diff options
Diffstat (limited to 'common/recipes-graphics')
34 files changed, 0 insertions, 4137 deletions
diff --git a/common/recipes-graphics/drm/libdrm/0001-headers-sync-up-amdgpu_drm.h-with-drm-next.patch b/common/recipes-graphics/drm/libdrm/0001-headers-sync-up-amdgpu_drm.h-with-drm-next.patch deleted file mode 100644 index 2e6ba6ac..00000000 --- a/common/recipes-graphics/drm/libdrm/0001-headers-sync-up-amdgpu_drm.h-with-drm-next.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 48ec0e7b1203e9fbe4aa8b59642ed0abeb739ab5 Mon Sep 17 00:00:00 2001 -From: Rex Zhu <Rex.Zhu@amd.com> -Date: Wed, 31 Jan 2018 12:56:44 +0800 -Subject: [PATCH] headers: sync up amdgpu_drm.h with drm-next - -Add sensor_info type -AMDGPU_INFO_SENSOR_STABLE_PSTATE_GFX_MCLK -AMDGPU_INFO_SENSOR_STABLE_PSTATE_GFX_SCLK - -Change-Id: I83c763aee5cd0be21f2ab5734f0d19ffb59a2628 -Acked-by: Junwei Zhang <Jerry.Zhang@amd.com> -Reviewed-by: Evan Quan <evan.quan@amd.com> -Signed-off-by: Rex Zhu <Rex.Zhu@amd.com> ---- - include/drm/amdgpu_drm.h | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/include/drm/amdgpu_drm.h b/include/drm/amdgpu_drm.h -index a023b47..f784f24 100644 ---- a/include/drm/amdgpu_drm.h -+++ b/include/drm/amdgpu_drm.h -@@ -656,6 +656,10 @@ struct drm_amdgpu_cs_chunk_data { - #define AMDGPU_INFO_SENSOR_VDDNB 0x6 - /* Subquery id: Query graphics voltage */ - #define AMDGPU_INFO_SENSOR_VDDGFX 0x7 -+ /* Subquery id: Query GPU stable pstate shader clock */ -+ #define AMDGPU_INFO_SENSOR_STABLE_PSTATE_GFX_SCLK 0x8 -+ /* Subquery id: Query GPU stable pstate memory clock */ -+ #define AMDGPU_INFO_SENSOR_STABLE_PSTATE_GFX_MCLK 0x9 - /* Number of VRAM page faults on CPU access. */ - #define AMDGPU_INFO_NUM_VRAM_CPU_PAGE_FAULTS 0x1E - #define AMDGPU_INFO_VRAM_LOST_COUNTER 0x1F --- -2.7.4 - diff --git a/common/recipes-graphics/drm/libdrm/amdgpu.ids b/common/recipes-graphics/drm/libdrm/amdgpu.ids deleted file mode 100644 index 88a9996c..00000000 --- a/common/recipes-graphics/drm/libdrm/amdgpu.ids +++ /dev/null @@ -1,200 +0,0 @@ -# List of AMDGPU ID's -# -# Syntax: -# device_id, revision_id, product_name <-- single tab after comma - -1.0.0 -6600, 0, AMD Radeon HD 8600/8700M -6600, 81, AMD Radeon (TM) R7 M370 -6601, 0, AMD Radeon (TM) HD 8500M/8700M -6604, 0, AMD Radeon R7 M265 Series -6604, 81, AMD Radeon (TM) R7 M350 -6605, 0, AMD Radeon R7 M260 Series -6605, 81, AMD Radeon (TM) R7 M340 -6606, 0, AMD Radeon HD 8790M -6607, 0, AMD Radeon (TM) HD8530M -6608, 0, AMD FirePro W2100 -6610, 0, AMD Radeon HD 8600 Series -6610, 81, AMD Radeon (TM) R7 350 -6610, 83, AMD Radeon (TM) R5 340 -6611, 0, AMD Radeon HD 8500 Series -6613, 0, AMD Radeon HD 8500 series -6617, C7, AMD Radeon R7 240 Series -6640, 0, AMD Radeon HD 8950 -6640, 80, AMD Radeon (TM) R9 M380 -6646, 0, AMD Radeon R9 M280X -6646, 80, AMD Radeon (TM) R9 M470X -6647, 0, AMD Radeon R9 M270X -6647, 80, AMD Radeon (TM) R9 M380 -6649, 0, AMD FirePro W5100 -6658, 0, AMD Radeon R7 200 Series -665C, 0, AMD Radeon HD 7700 Series -665D, 0, AMD Radeon R7 200 Series -665F, 81, AMD Radeon (TM) R7 300 Series -6660, 0, AMD Radeon HD 8600M Series -6660, 81, AMD Radeon (TM) R5 M335 -6660, 83, AMD Radeon (TM) R5 M330 -6663, 0, AMD Radeon HD 8500M Series -6663, 83, AMD Radeon (TM) R5 M320 -6664, 0, AMD Radeon R5 M200 Series -6665, 0, AMD Radeon R5 M200 Series -6665, 83, AMD Radeon (TM) R5 M320 -6667, 0, AMD Radeon R5 M200 Series -666F, 0, AMD Radeon HD 8500M -6780, 0, ATI FirePro V (FireGL V) Graphics Adapter -678A, 0, ATI FirePro V (FireGL V) Graphics Adapter -6798, 0, AMD Radeon HD 7900 Series -679A, 0, AMD Radeon HD 7900 Series -679B, 0, AMD Radeon HD 7900 Series -679E, 0, AMD Radeon HD 7800 Series -67A0, 0, AMD Radeon FirePro W9100 -67A1, 0, AMD Radeon FirePro W8100 -67B0, 0, AMD Radeon R9 200 Series -67B0, 80, AMD Radeon (TM) R9 390 Series -67B1, 0, AMD Radeon R9 200 Series -67B1, 80, AMD Radeon (TM) R9 390 Series -67B9, 0, AMD Radeon R9 200 Series -67DF, C1, Radeon RX 580 Series -67DF, C2, Radeon RX 570 Series -67DF, C3, Radeon RX 580 Series -67DF, C4, AMD Radeon (TM) RX 480 Graphics -67DF, C5, AMD Radeon (TM) RX 470 Graphics -67DF, C6, Radeon RX 570 Series -67DF, C7, AMD Radeon (TM) RX 480 Graphics -67DF, CF, AMD Radeon (TM) RX 470 Graphics -67DF, D7, Radeon(TM) RX 470 Graphics -67DF, E3, Radeon RX Series -67DF, E7, Radeon RX 580 Series -67DF, EF, Radeon RX 570 Series -67C2, 0, 67C2:00 -67C2, 01, AMD Radeon (TM) Pro V7350x2 -67C2, 02, AMD Radeon (TM) Pro V7300X -67C4, 00, AMD Radeon (TM) Pro WX 7100 Graphics -67C7, 00, AMD Radeon (TM) Pro WX 5100 Graphics -67C0, 00, AMD Radeon (TM) Pro WX 7100 Graphics -67D0, 0, 67D0:00 -67D0, 01, AMD Radeon (TM) Pro V7350x2 -67D0, 02, AMD Radeon (TM) Pro V7300X -67E0, 00, AMD Radeon (TM) Pro WX Series -67E3, 00, AMD Radeon (TM) Pro WX 4100 -67E8, 00, AMD Radeon (TM) Pro WX Series -67E8, 01, AMD Radeon (TM) Pro WX Series -67E8, 80, AMD Radeon (TM) E9260 Graphics -67EB, 00, AMD Radeon (TM) Pro V5300X -67EF, C0, AMD Radeon (TM) RX Graphics -67EF, C1, AMD Radeon (TM) RX 460 Graphics -67EF, C3, Radeon RX Series -67EF, C5, AMD Radeon (TM) RX 460 Graphics -67EF, C7, AMD Radeon (TM) RX Graphics -67EF, CF, AMD Radeon (TM) RX 460 Graphics -67EF, E0, 67EF:E0 -67EF, E1, Radeon RX Series -67EF, E3, Radeon RX Series -67EF, E5, 67EF:E5 -67EF, E7, 67EF:E7 -67EF, EF, AMD Radeon (TM) RX Graphics -67EF, FF, Radeon(TM) RX 460 Graphics -67FF, C0, AMD Radeon (TM) RX Graphics -67FF, C1, AMD Radeon (TM) RX Graphics -67FF, CF, 67FF:CF -67FF, EF, 67FF:EF -67FF, FF, Radeon RX 550 Series -6800, 0, AMD Radeon HD 7970M -6801, 0, AMD Radeon(TM) HD8970M -6808, 0, ATI FirePro V(FireGL V) Graphics Adapter -6809, 0, ATI FirePro V(FireGL V) Graphics Adapter -6810, 0, AMD Radeon(TM) HD 8800 Series -6810, 81, AMD Radeon (TM) R7 370 Series -6811, 0, AMD Radeon(TM) HD8800 Series -6811, 81, AMD Radeon (TM) R7 300 Series -6818, 0, AMD Radeon HD 7800 Series -6819, 0, AMD Radeon HD 7800 Series -6820, 0, AMD Radeon HD 8800M Series -6820, 81, AMD Radeon (TM) R9 M375 -6820, 83, AMD Radeon (TM) R9 M375X -6821, 0, AMD Radeon HD 8800M Series -6821, 87, AMD Radeon (TM) R7 M380 -6821, 83, AMD Radeon R9 (TM) M370X -6822, 0, AMD Radeon E8860 -6823, 0, AMD Radeon HD 8800M Series -6825, 0, AMD Radeon HD 7800M Series -6827, 0, AMD Radeon HD 7800M Series -6828, 0, ATI FirePro V(FireGL V) Graphics Adapter -682B, 0, AMD Radeon HD 8800M Series -682B, 87, AMD Radeon (TM) R9 M360 -682C, 0, AMD FirePro W4100 -682D, 0, AMD Radeon HD 7700M Series -682F, 0, AMD Radeon HD 7700M Series -6835, 0, AMD Radeon R7 Series / HD 9000 Series -6837, 0, AMD Radeon HD7700 Series -683D, 0, AMD Radeon HD 7700 Series -683F, 0, AMD Radeon HD 7700 Series -6860, 00, Radeon Instinct MI25 -6860, 01, Radeon Pro V320 -6860, 02, Radeon Instinct MI25 -6860, 03, Radeon Pro V340 -6860, 04, Radeon Instinct MI25x2 -6860, C0, 6860:C0 -6861, 00, Radeon(TM) Pro WX9100 -6862, 00, Radeon Pro SSG -6863, 00, Radeon Vega Frontier Edition -6864, 00, 6864:00 -6864, 03, Radeon Pro V340 -6864, 04, Instinct MI25x2 -6867, 00, 6867:00 -6868, 00, Radeon(TM) Pro WX8100 -686C, 00, GLXT (Radeon Instinct MI25) MxGPU VFID -686C, 01, GLXT (Radeon Pro V320) MxGPU -686C, 02, GLXT (Radeon Instinct MI25) MxGPU -686C, 03, GLXT (Radeon Pro V340) MxGPU -686C, 04, GLXT (Radeon Instinct MI25x2) MxGPU -686C, C1, 686C:C1 -687F, C0, Radeon RX Vega -687F, C1, Radeon RX Vega -687F, C3, Radeon RX Vega -687F, C7, 687F:C7 -6900, 0, AMD Radeon R7 M260 -6900, 81, AMD Radeon (TM) R7 M360 -6900, 83, AMD Radeon (TM) R7 M340 -6901, 0, AMD Radeon R5 M255 -6907, 0, AMD Radeon R5 M255 -6907, 87, AMD Radeon (TM) R5 M315 -6920, 0, AMD RADEON R9 M395X -6920, 1, AMD RADEON R9 M390X -6921, 0, AMD Radeon R9 M295X -6929, 0, AMD FirePro S7150 -692B, 0, AMD FirePro W7100 -6938, 0, AMD Radeon R9 200 Series -6938, F0, AMD Radeon R9 200 Series -6938, F1, AMD Radeon (TM) R9 380 Series -6939, F0, AMD Radeon R9 200 Series -6939, 0, AMD Radeon R9 200 Series -6939, F1, AMD Radeon (TM) R9 380 Series -6980, 00, Radeon Pro WX3100 -6981, C0, 6981:C0 -6985, 00, AMD Radeon Pro WX3100 -6987, 80, AMD Embedded Radeon E9171 -6995, 00, AMD Radeon Pro WX2100 -6997, 00, Radeon Pro WX2100 -699F, 81, AMD Embedded Radeon E9170 Series -699F, C0, Radeon 500 Series -699F, C1, 699F:C1 -699F, C3, Radeon 500 Series -699F, C7, Radeon RX 550 Series -7300, C1, AMD FirePro (TM) S9300 x2 -7300, C8, AMD Radeon (TM) R9 Fury Series -7300, C9, Radeon (TM) Pro Duo -7300, CB, AMD Radeon (TM) R9 Fury Series -7300, CA, AMD Radeon (TM) R9 Fury Series -9874, C4, AMD Radeon R7 Graphics -9874, C5, AMD Radeon R6 Graphics -9874, C6, AMD Radeon R6 Graphics -9874, C7, AMD Radeon R5 Graphics -9874, 81, AMD Radeon R6 Graphics -9874, 87, AMD Radeon R5 Graphics -9874, 85, AMD Radeon R6 Graphics -9874, 84, AMD Radeon R7 Graphics -15DD, C0, AMD Radeon (TM) Vega Graphics -15DD, C1, AMD Radeon (TM) Vega Graphics -15DD, 81, AMD Radeon(TM) Vega 11 Graphics -15DD, 82, AMD Radeon(TM) Vega 8 Graphics diff --git a/common/recipes-graphics/drm/libdrm_git.bb b/common/recipes-graphics/drm/libdrm_git.bb deleted file mode 100644 index 4c775af7..00000000 --- a/common/recipes-graphics/drm/libdrm_git.bb +++ /dev/null @@ -1,56 +0,0 @@ -SUMMARY = "Userspace interface to the kernel DRM services" -DESCRIPTION = "The runtime library for accessing the kernel DRM services. DRM \ -stands for \"Direct Rendering Manager\", which is the kernel portion of the \ -\"Direct Rendering Infrastructure\" (DRI). DRI is required for many hardware \ -accelerated OpenGL drivers." - -HOMEPAGE = "http://dri.freedesktop.org" -SECTION = "x11/base" -LICENSE = "MIT" -LIC_FILES_CHKSUM = "file://xf86drm.c;beginline=9;endline=32;md5=c8a3b961af7667c530816761e949dc71" -PROVIDES = "drm" -PV = "git" - -inherit autotools pkgconfig - -SRCREV = "85ae22af0f209e73c954d8867d9189ab2cfeb3e1" -DEPENDS = "libpthread-stubs udev libpciaccess freetype libxext cairo fontconfig libxrender libpng pixman" - -SRC_URI = "git://anongit.freedesktop.org/mesa/drm;branch=master \ - file://0001-headers-sync-up-amdgpu_drm.h-with-drm-next.patch \ - file://amdgpu.ids \ -" - -S = "${WORKDIR}/git" - -EXTRA_OECONF = "--disable-cairo-tests \ - --enable-omap-experimental-api \ - --enable-install-test-programs \ - --disable-manpages \ - --disable-valgrind \ - --enable-amdgpu \ - --enable-radeon \ - " - -ALLOW_EMPTY_${PN}-drivers = "1" -PACKAGES =+ "${PN}-tests ${PN}-drivers ${PN}-radeon ${PN}-nouveau ${PN}-omap \ - ${PN}-intel ${PN}-exynos ${PN}-kms ${PN}-freedreno ${PN}-amdgpu" - -RRECOMMENDS_${PN}-drivers = "${PN}-radeon ${PN}-nouveau ${PN}-omap ${PN}-intel \ - ${PN}-exynos ${PN}-freedreno ${PN}-amdgpu" - -FILES_${PN}-tests = "${bindir}/dr* ${bindir}/mode* ${bindir}/*test" -FILES_${PN}-radeon = "${libdir}/libdrm_radeon.so.*" -FILES_${PN}-nouveau = "${libdir}/libdrm_nouveau.so.*" -FILES_${PN}-omap = "${libdir}/libdrm_omap.so.*" -FILES_${PN}-intel = "${libdir}/libdrm_intel.so.*" -FILES_${PN}-exynos = "${libdir}/libdrm_exynos.so.*" -FILES_${PN}-kms = "${libdir}/libkms*.so.*" -FILES_${PN}-freedreno = "${libdir}/libdrm_freedreno.so.*" -FILES_${PN}-amdgpu = "${libdir}/libdrm_amdgpu.so.*" - -do_install_append() { - cp ${S}/include/drm/amdgpu_drm.h ${D}/usr/include/libdrm - install -vd ${D}/usr/share/libdrm - cp ${WORKDIR}/amdgpu.ids ${D}/usr/share/libdrm -} diff --git a/common/recipes-graphics/libva/libva-gl/0001-disable-tests.patch b/common/recipes-graphics/libva/libva-gl/0001-disable-tests.patch deleted file mode 100644 index e6115f87..00000000 --- a/common/recipes-graphics/libva/libva-gl/0001-disable-tests.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 1c0c029576e6eed69be2f96b5bbcf13636ea3a84 Mon Sep 17 00:00:00 2001 -From: Awais Belal <awais_belal@mentor.com> -Date: Tue, 29 Mar 2016 14:17:27 +0500 -Subject: [PATCH 1/2] disable tests - -The tests subdirectory requires libva base package to -build which is disabled here. - -Signed-off-by: Awais Belal <awais_belal@mentor.com> ---- - Makefile.am | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/Makefile.am b/Makefile.am -index beac7e9..be1ce9e 100644 ---- a/Makefile.am -+++ b/Makefile.am -@@ -24,7 +24,7 @@ ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS} - - AUTOMAKE_OPTIONS = foreign - --SUBDIRS = va dummy_drv_video pkgconfig test debian.upstream doc -+SUBDIRS = va dummy_drv_video pkgconfig debian.upstream doc - - # Extra clean files so that maintainer-clean removes *everything* - MAINTAINERCLEANFILES = \ --- -1.9.1 - diff --git a/common/recipes-graphics/libva/libva-gl/0002-allow-building-gl-backends-only.patch b/common/recipes-graphics/libva/libva-gl/0002-allow-building-gl-backends-only.patch deleted file mode 100644 index 055ef79c..00000000 --- a/common/recipes-graphics/libva/libva-gl/0002-allow-building-gl-backends-only.patch +++ /dev/null @@ -1,126 +0,0 @@ -From 6f93d2a8e5a1d8339a41d4d8db2299379a59cc26 Mon Sep 17 00:00:00 2001 -From: Awais Belal <awais_belal@mentor.com> -Date: Thu, 18 Jan 2018 15:58:08 +0500 -Subject: [PATCH] allow building gl backends only - -For this specific package we'd like to only -build/deploy the gl (EGL, GLX) backends as -this package will mainly take care of the circular -dependencies between mesa and libva. - -Signed-off-by: Awais Belal <awais_belal@mentor.com> ---- - configure.ac | 4 ++-- - pkgconfig/Makefile.am | 3 +-- - va/Makefile.am | 42 ++++++------------------------------------ - 3 files changed, 9 insertions(+), 40 deletions(-) - -diff --git a/configure.ac b/configure.ac -index 64eddf2..450cf10 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -289,8 +289,8 @@ 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)]) -+if test "$USE_DRM:$USE_X11:$USE_WAYLAND:$USE_EGL:$USE_GLX" = "no:no:no:no:no"; then -+ AC_MSG_ERROR([Please select at least one backend (DRM, X11, Wayland, EGL, GLX)]) - fi - - # Define __vaDriverInit*() function name for dummy backend -diff --git a/pkgconfig/Makefile.am b/pkgconfig/Makefile.am -index a3435a4..4ce8aa1 100644 ---- a/pkgconfig/Makefile.am -+++ b/pkgconfig/Makefile.am -@@ -20,8 +20,7 @@ - # 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 -+pcfiles = - if USE_DRM - pcfiles += libva-drm.pc - endif -diff --git a/va/Makefile.am b/va/Makefile.am -index 1be4214..1a35c22 100644 ---- a/va/Makefile.am -+++ b/va/Makefile.am -@@ -36,27 +36,7 @@ libva_source_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_enc_vp9.h \ -- va_tpi.h \ -- va_version.h \ -- va_vpp.h \ -- $(NULL) -+libva_source_h = - - libva_source_h_priv = \ - sysdeps.h \ -@@ -69,20 +49,10 @@ libva_ldflags = \ - -Wl,-version-script,${srcdir}/libva.syms \ - $(NULL) - --lib_LTLIBRARIES = libva.la -+lib_LTLIBRARIES = - 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 -@@ -110,8 +80,8 @@ 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 \ -+libva_glx_la_DEPENDENCIES = glx/libva_glx.la -+libva_glx_la_LIBADD = glx/libva_glx.la \ - $(GLX_LIBS) -ldl - endif - -@@ -120,8 +90,8 @@ 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 \ -+libva_egl_la_DEPENDENCIES = egl/libva_egl.la -+libva_egl_la_LIBADD = egl/libva_egl.la \ - $(EGL_LIBS) -ldl - endif - --- -2.11.1 - diff --git a/common/recipes-graphics/libva/libva-gl/0003-allow-building-glx-backend-without-x11-enabled.patch b/common/recipes-graphics/libva/libva-gl/0003-allow-building-glx-backend-without-x11-enabled.patch deleted file mode 100644 index 4f2c5e0c..00000000 --- a/common/recipes-graphics/libva/libva-gl/0003-allow-building-glx-backend-without-x11-enabled.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 602d90e7b04d39576d458094caf031b9638d4c9c Mon Sep 17 00:00:00 2001 -From: Awais Belal <awais_belal@mentor.com> -Date: Tue, 29 Mar 2016 15:10:02 +0500 -Subject: [PATCH] allow building glx backend without x11 enabled - -The X11 requirements are dealt through the base package -so we allow this package to build glx without x11 enabled. - -Signed-off-by: Awais Belal <awais_belal@mentor.com> ---- - configure.ac | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/configure.ac b/configure.ac -index 8dde9ca..65aad67 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -230,7 +230,7 @@ AM_CONDITIONAL(USE_X11, test "$USE_X11" = "yes") - - # Check for GLX - USE_GLX="no" --if test "$USE_X11:$enable_glx" = "yes:yes"; then -+if test "$enable_glx" = "yes"; then - PKG_CHECK_MODULES([GLX], [gl x11], [USE_GLX="yes"], [:]) - saved_CPPFLAGS="$CPPFLAGS" - saved_LIBS="$LIBS" --- -1.9.1 - diff --git a/common/recipes-graphics/libva/libva-gl_1.7.3.bb b/common/recipes-graphics/libva/libva-gl_1.7.3.bb deleted file mode 100644 index a01188b7..00000000 --- a/common/recipes-graphics/libva/libva-gl_1.7.3.bb +++ /dev/null @@ -1,40 +0,0 @@ -SUMMARY = "Video Acceleration (VA) API for Linux" -DESCRIPTION = "Video Acceleration API (VA API) is a library (libVA) \ -and API specification which enables and provides access to graphics \ -hardware (GPU) acceleration for video processing on Linux and UNIX \ -based operating systems. Accelerated processing includes video \ -decoding, video encoding, subpicture blending and rendering. The \ -specification was originally designed by Intel for its GMA (Graphics \ -Media Accelerator) series of GPU hardware, the API is however not \ -limited to GPUs or Intel specific hardware, as other hardware and \ -manufacturers can also freely use this API for hardware accelerated \ -video decoding." - -HOMEPAGE = "http://www.freedesktop.org/wiki/Software/vaapi" -BUGTRACKER = "https://bugs.freedesktop.org" - -SECTION = "x11" -LICENSE = "MIT" -LIC_FILES_CHKSUM = "file://COPYING;md5=2e48940f94acb0af582e5ef03537800f" - -inherit autotools pkgconfig - -SRC_URI = "http://www.freedesktop.org/software/vaapi/releases/libva/libva-${PV}.tar.bz2 \ - file://0001-disable-tests.patch \ - file://0002-allow-building-gl-backends-only.patch \ - file://0003-allow-building-glx-backend-without-x11-enabled.patch" - -SRC_URI[md5sum] = "dafb1d7d6449e850e9eb1a099895c683" -SRC_URI[sha256sum] = "22bc139498065a7950d966dbdb000cad04905cbd3dc8f3541f80d36c4670b9d9" - -DEPENDS = "libdrm virtual/mesa virtual/libgles1 virtual/libgles2" - -S = "${WORKDIR}/libva-${PV}" - -EXTRA_OECONF = "--disable-dummy-driver --disable-x11 --disable-wayland --disable-drm" - -PACKAGECONFIG ??= "${@bb.utils.contains("DISTRO_FEATURES", "opengl", "egl glx", "", d)}" -PACKAGECONFIG[egl] = "--enable-egl,--disable-egl,virtual/egl,libva-x11" -PACKAGECONFIG[glx] = "--enable-glx,--disable-glx,virtual/libgl libx11,libva-x11" - -FILES_${PN}-dbg += "${libdir}/dri/.debug" diff --git a/common/recipes-graphics/libva/libva_1.7.3.bb b/common/recipes-graphics/libva/libva_1.7.3.bb deleted file mode 100644 index 88a8c5f7..00000000 --- a/common/recipes-graphics/libva/libva_1.7.3.bb +++ /dev/null @@ -1,39 +0,0 @@ -SUMMARY = "Dummy package for dependency resolution between Mesa and Libva" -DESCRIPTION = "There exists a cyclic dependency between Mesa and Libva \ - when libva is built with egl/glx enabled and mesa \ - is enabling its vaapi backend. This package strives \ - to cover up the dependency chain." - -HOMEPAGE = "http://www.freedesktop.org/wiki/Software/vaapi" -BUGTRACKER = "https://bugs.freedesktop.org" - -SECTION = "x11" -LICENSE = "MIT" -LIC_FILES_CHKSUM = "file://COPYING;md5=2e48940f94acb0af582e5ef03537800f" - -inherit autotools pkgconfig - -SRC_URI = "http://www.freedesktop.org/software/vaapi/releases/libva/${BP}.tar.bz2" - -SRC_URI[md5sum] = "dafb1d7d6449e850e9eb1a099895c683" -SRC_URI[sha256sum] = "22bc139498065a7950d966dbdb000cad04905cbd3dc8f3541f80d36c4670b9d9" - -DEPENDS = "libdrm" - -EXTRA_OECONF = "--disable-dummy-driver --disable-egl --disable-glx" - -PACKAGECONFIG ??= "${@bb.utils.contains("DISTRO_FEATURES", "x11", "x11", "", d)} \ - ${@bb.utils.contains("DISTRO_FEATURES", "wayland", "wayland", "", d)}" -PACKAGECONFIG[x11] = "--enable-x11,--disable-x11,virtual/libx11 libxext libxfixes" -PACKAGECONFIG[wayland] = "--enable-wayland,--disable-wayland,wayland" - -PACKAGES =+ "${PN}-x11 ${PN}-tpi ${PN}-wayland" - -RDEPENDS_${PN}-tpi =+ "${PN}" -RDEPENDS_${PN}-x11 =+ "${PN}" - -FILES_${PN}-dbg += "${libdir}/dri/.debug" - -FILES_${PN}-x11 =+ "${libdir}/${PN}-x11*${SOLIBS}" -FILES_${PN}-tpi =+ "${libdir}/${PN}-tpi*${SOLIBS}" -FILES_${PN}-wayland =+ "${libdir}/${PN}-wayland*${SOLIBS}" diff --git a/common/recipes-graphics/mesa-demos/mesa-demos_%.bbappend b/common/recipes-graphics/mesa-demos/mesa-demos_%.bbappend deleted file mode 100644 index fb3ac604..00000000 --- a/common/recipes-graphics/mesa-demos/mesa-demos_%.bbappend +++ /dev/null @@ -1,2 +0,0 @@ -DEPENDS_append_amd = " mesa-glut glew" -PACKAGECONFIG_append_amd = " glut glew glu" diff --git a/common/recipes-graphics/mesa/mesa/0001-configure.ac-adjust-usage-of-LLVM-flags.patch b/common/recipes-graphics/mesa/mesa/0001-configure.ac-adjust-usage-of-LLVM-flags.patch deleted file mode 100644 index a6599648..00000000 --- a/common/recipes-graphics/mesa/mesa/0001-configure.ac-adjust-usage-of-LLVM-flags.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 223ffdb659ceb8628e38003495b5c6550833b673 Mon Sep 17 00:00:00 2001 -From: Awais Belal <awais_belal@mentor.com> -Date: Thu, 26 Jul 2018 17:13:32 +0500 -Subject: [PATCH] configure.ac: adjust usage of LLVM flags - -The llvm-config is provided through a native build -so using flags from there creates conflicts between -mesa and llvm on the target. - -Signed-off-by: Awais Belal <awais_belal@mentor.com> ---- - configure.ac | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/configure.ac b/configure.ac -index d1c8bb82da..290cc5f9f8 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -1064,6 +1064,7 @@ strip_unwanted_llvm_flags() { - -e 's/[[[:space:]]]+-pedantic[[[:space:]]]/ /g' \ - -e 's/[[[:space:]]]+-W[[^[:space:]]]*//g' \ - -e 's/[[[:space:]]]+-O[[^[:space:]]]*//g' \ -+ -e 's/[[[:space:]]]+-D_GLIBCXX_USE_CXX11_ABI[[^[:space:]]]*//g' \ - -e 's/[[[:space:]]]+-g[[^[:space:]]]*//g' \ - -e 's/-fno-rtti[[[:space:]]]/-Fno-rtti /g' \ - -e 's/[[[:space:]]]+-f[[^[:space:]]]*//g' \ -@@ -2808,7 +2809,7 @@ dnl - if test "x$enable_llvm" = xyes; then - DEFINES="${DEFINES} -DHAVE_LLVM=0x0$LLVM_VERSION_INT -DMESA_LLVM_VERSION_PATCH=$LLVM_VERSION_PATCH" - -- LLVM_LDFLAGS=`$LLVM_CONFIG --ldflags` -+ LLVM_LDFLAGS= - LLVM_CFLAGS=$LLVM_CPPFLAGS # CPPFLAGS seem to be sufficient - LLVM_CXXFLAGS=`strip_unwanted_llvm_flags "$LLVM_CONFIG --cxxflags"` - --- -2.11.1 diff --git a/common/recipes-graphics/mesa/mesa/0001-configure.ac-obey-llvm_prefix-if-available.patch b/common/recipes-graphics/mesa/mesa/0001-configure.ac-obey-llvm_prefix-if-available.patch deleted file mode 100644 index 76e152e7..00000000 --- a/common/recipes-graphics/mesa/mesa/0001-configure.ac-obey-llvm_prefix-if-available.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 8dc29db401030725ca0201ba03feb6238ec258f7 Mon Sep 17 00:00:00 2001 -From: Awais Belal <awais_belal@mentor.com> -Date: Fri, 20 Jul 2018 17:58:45 +0500 -Subject: [PATCH] configure.ac: obey llvm_prefix if available - -Signed-off-by: Awais Belal <awais_belal@mentor.com> ---- - configure.ac | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) - -diff --git a/configure.ac b/configure.ac -index d1c8bb82da..92a83fec4a 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -2821,7 +2821,11 @@ if test "x$enable_llvm" = xyes; then - - if test $LLVM_VERSION_MAJOR -ge 4 -o $LLVM_VERSION_MAJOR -eq 3 -a $LLVM_VERSION_MINOR -ge 9; then - if test "x$enable_llvm_shared_libs" = xyes; then -- LLVM_LIBS="`$LLVM_CONFIG --link-shared --libs ${LLVM_COMPONENTS}`" -+ if test "x${llvm_prefix}" == "x"; then -+ LLVM_LIBS="`$LLVM_CONFIG --link-shared --libs ${LLVM_COMPONENTS}`" -+ else -+ LLVM_LIBS="`$LLVM_CONFIG --link-shared --libs ${LLVM_COMPONENTS} --tgtlibdir ${llvm_prefix}`" -+ fi - else - dnl Invoking llvm-config with both -libs and --system-libs produces the - dnl two separate lines - each for the set of libraries. --- -2.11.1 - diff --git a/common/recipes-graphics/mesa/mesa/0001-st-omx-enc-fix-blit-setup-for-YUV-LoadImage.patch b/common/recipes-graphics/mesa/mesa/0001-st-omx-enc-fix-blit-setup-for-YUV-LoadImage.patch deleted file mode 100644 index edfe3678..00000000 --- a/common/recipes-graphics/mesa/mesa/0001-st-omx-enc-fix-blit-setup-for-YUV-LoadImage.patch +++ /dev/null @@ -1,51 +0,0 @@ -From 62bf8198ff125f9e04457bd18ec2c1f7b2ba4cdf Mon Sep 17 00:00:00 2001 -From: Leo Liu <leo.liu@amd.com> -Date: Fri, 27 Apr 2018 08:32:41 -0400 -Subject: [PATCH 01/13] st/omx/enc: fix blit setup for YUV LoadImage -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -The blit here involves scaling since it's copying from I8 format to R8G8 format. -Half of source will be filtered out with PIPE_TEX_FILTER_NEAREST instruction, it -looks that GPU always uses the second half as source. Currently we use "1" as -the start point of x for R, then causing 1 source pixel of U component shift to -right. So "-1" should be the start point for U component. - -Cc: 18.0 18.1 <mesa-stable@lists.freedesktop.org> -Reviewed-by: Marek Olšák <marek.olsak@amd.com> ---- - src/gallium/state_trackers/omx/vid_enc_common.c | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - -diff --git a/src/gallium/state_trackers/omx/vid_enc_common.c b/src/gallium/state_trackers/omx/vid_enc_common.c -index 874dd3a..2aa739d 100644 ---- a/src/gallium/state_trackers/omx/vid_enc_common.c -+++ b/src/gallium/state_trackers/omx/vid_enc_common.c -@@ -353,7 +353,7 @@ OMX_ERRORTYPE enc_LoadImage_common(vid_enc_PrivateType * priv, OMX_VIDEO_PORTDEF - blit.src.resource = inp->resource; - blit.src.format = inp->resource->format; - -- blit.src.box.x = 0; -+ blit.src.box.x = -1; - blit.src.box.y = def->nFrameHeight; - blit.src.box.width = def->nFrameWidth; - blit.src.box.height = def->nFrameHeight / 2 ; -@@ -367,11 +367,11 @@ OMX_ERRORTYPE enc_LoadImage_common(vid_enc_PrivateType * priv, OMX_VIDEO_PORTDEF - blit.dst.box.depth = 1; - blit.filter = PIPE_TEX_FILTER_NEAREST; - -- blit.mask = PIPE_MASK_G; -+ blit.mask = PIPE_MASK_R; - priv->s_pipe->blit(priv->s_pipe, &blit); - -- blit.src.box.x = 1; -- blit.mask = PIPE_MASK_R; -+ blit.src.box.x = 0; -+ blit.mask = PIPE_MASK_G; - priv->s_pipe->blit(priv->s_pipe, &blit); - priv->s_pipe->flush(priv->s_pipe, NULL, 0); - --- -2.7.4 - diff --git a/common/recipes-graphics/mesa/mesa/0002-mesa-st-glsl_to_tgsi-Split-arrays-who-s-elements-are.patch b/common/recipes-graphics/mesa/mesa/0002-mesa-st-glsl_to_tgsi-Split-arrays-who-s-elements-are.patch deleted file mode 100644 index 6ee5cbdd..00000000 --- a/common/recipes-graphics/mesa/mesa/0002-mesa-st-glsl_to_tgsi-Split-arrays-who-s-elements-are.patch +++ /dev/null @@ -1,165 +0,0 @@ -From d29d4b81188e50010058f9c409936713e84bf67d Mon Sep 17 00:00:00 2001 -From: Gert Wollny <gw.fossdev@gmail.com> -Date: Fri, 9 Feb 2018 11:11:06 +0100 -Subject: [PATCH 02/13] mesa/st: glsl_to_tgsi: Split arrays who's elements are - only accessed directly - -Array who's elements are only accessed directly are replaced by the -according number of temporary registers. By doing so the otherwise -reserved register range becomes subject to further optimizations like -copy propagation and register merging. - -Thanks to the resulting reduced register pressure this patch makes -the piglits - - spec/glsl-1.50/execution - - variable-indexing/vs-output-array-vec3-index-wr-before-gs - geometry/max-input-components - -pass on r600 (barts) where they would fail before with a "GPR limit exceeded" -error. - -v2: * rename method dissolve_arrays to split_arrays - * unify the tracking and remapping methods for src and st registers - * also track access to arrays via reladdr* - -Signed-off-by: Gert Wollny <gw.fossdev@gmail.com> ---- - src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 107 +++++++++++++++++++++++++++++ - 1 file changed, 107 insertions(+) - -diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp -index 911c855..7413874 100644 ---- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp -+++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp -@@ -337,6 +337,7 @@ public: - void copy_propagate(void); - int eliminate_dead_code(void); - -+ void split_arrays(void); - void merge_two_dsts(void); - void merge_registers(void); - void renumber_registers(void); -@@ -5362,6 +5363,110 @@ glsl_to_tgsi_visitor::merge_two_dsts(void) - } - } - -+ -+ -+/* One-dimensional arrays who's elements are only accessed directly are -+ * replaced by an according set of temporary registers that then can become -+ * subject to further optimization steps like copy propagation and -+ * register merging. -+ */ -+ -+template <typename st_reg> -+void test_indirect_access(const st_reg& reg, bool *has_indirect_access) -+{ -+ if (reg.file == PROGRAM_ARRAY) { -+ if (reg.reladdr || reg.reladdr2 || reg.has_index2) { -+ has_indirect_access[reg.array_id] = true; -+ if (reg.reladdr) -+ test_indirect_access(*reg.reladdr, has_indirect_access); -+ if (reg.reladdr2) -+ test_indirect_access(*reg.reladdr, has_indirect_access); -+ } -+ } -+} -+ -+template <typename st_reg> -+void remap_array(st_reg& reg, const int *array_remap_info, -+ const bool *has_indirect_access) -+{ -+ if (reg.file == PROGRAM_ARRAY) { -+ if (!has_indirect_access[reg.array_id]) { -+ reg.file = PROGRAM_TEMPORARY; -+ reg.index = reg.index + array_remap_info[reg.array_id]; -+ reg.array_id = 0; -+ } else { -+ reg.array_id = array_remap_info[reg.array_id]; -+ } -+ -+ if (reg.reladdr) -+ remap_array(*reg.reladdr, array_remap_info, has_indirect_access); -+ -+ if (reg.reladdr2) -+ remap_array(*reg.reladdr2, array_remap_info, has_indirect_access); -+ } -+} -+ -+void -+glsl_to_tgsi_visitor::split_arrays(void) -+{ -+ if (!next_array) -+ return; -+ -+ bool *has_indirect_access = rzalloc_array(mem_ctx, bool, next_array + 1); -+ -+ foreach_in_list(glsl_to_tgsi_instruction, inst, &this->instructions) { -+ for (unsigned j = 0; j < num_inst_src_regs(inst); j++) -+ test_indirect_access(inst->src[j], has_indirect_access); -+ -+ for (unsigned j = 0; j < inst->tex_offset_num_offset; j++) -+ test_indirect_access(inst->tex_offsets[j], has_indirect_access); -+ -+ for (unsigned j = 0; j < num_inst_dst_regs(inst); j++) -+ test_indirect_access(inst->dst[j], has_indirect_access); -+ } -+ -+ unsigned array_offset = 0; -+ unsigned n_remaining_arrays = 0; -+ -+ /* Double use: For arrays that get split this value will contain -+ * the base index of the temporary registers this array is replaced -+ * with. For arrays that remain it contains the new array ID. -+ */ -+ int *array_remap_info = rzalloc_array(has_indirect_access, int, -+ next_array + 1); -+ -+ for (unsigned i = 1; i <= next_array; ++i) { -+ if (!has_indirect_access[i]) { -+ array_remap_info[i] = this->next_temp + array_offset; -+ array_offset += array_sizes[i-1]; -+ } else { -+ array_sizes[n_remaining_arrays] = array_sizes[i-1]; -+ array_remap_info[i] = ++n_remaining_arrays; -+ } -+ } -+ -+ if (next_array != n_remaining_arrays) { -+ -+ foreach_in_list(glsl_to_tgsi_instruction, inst, &this->instructions) { -+ -+ for (unsigned j = 0; j < num_inst_src_regs(inst); j++) -+ remap_array(inst->src[j], array_remap_info, has_indirect_access); -+ -+ for (unsigned j = 0; j < inst->tex_offset_num_offset; j++) -+ remap_array(inst->tex_offsets[j], array_remap_info, has_indirect_access); -+ -+ for (unsigned j = 0; j < num_inst_dst_regs(inst); j++) { -+ remap_array(inst->dst[j], array_remap_info, has_indirect_access); -+ } -+ } -+ } -+ -+ ralloc_free(has_indirect_access); -+ -+ this->next_temp += array_offset; -+ next_array = n_remaining_arrays; -+} -+ - /* Merges temporary registers together where possible to reduce the number of - * registers needed to run a program. - * -@@ -6823,6 +6928,8 @@ get_mesa_program_tgsi(struct gl_context *ctx, - } - #endif - -+ v->split_arrays(); -+ - /* Perform optimizations on the instructions in the glsl_to_tgsi_visitor. */ - v->simplify_cmp(); - v->copy_propagate(); --- -2.7.4 - diff --git a/common/recipes-graphics/mesa/mesa/0003-mesa-st-glsl_to_tgsi-rename-lifetime-to-register_liv.patch b/common/recipes-graphics/mesa/mesa/0003-mesa-st-glsl_to_tgsi-rename-lifetime-to-register_liv.patch deleted file mode 100644 index 774e7f09..00000000 --- a/common/recipes-graphics/mesa/mesa/0003-mesa-st-glsl_to_tgsi-rename-lifetime-to-register_liv.patch +++ /dev/null @@ -1,522 +0,0 @@ -From 73193fae57d2b9ab6dae144fc966c47f86a3206f Mon Sep 17 00:00:00 2001 -From: Gert Wollny <gw.fossdev@gmail.com> -Date: Fri, 9 Feb 2018 11:11:07 +0100 -Subject: [PATCH 03/13] mesa/st/glsl_to_tgsi: rename lifetime to - register_live_range - -On one hand "live range" is the term used in the literature, and on the -other hand a distinction is needed from the array live ranges that will -be introduced later. - -Signed-off-by: Gert Wollny <gw.fossdev@gmail.com> ---- - src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 16 ++--- - .../state_tracker/st_glsl_to_tgsi_temprename.cpp | 78 +++++++++++----------- - .../state_tracker/st_glsl_to_tgsi_temprename.h | 36 +++++----- - src/mesa/state_tracker/tests/st_tests_common.cpp | 16 +++-- - src/mesa/state_tracker/tests/st_tests_common.h | 13 ++-- - .../tests/test_glsl_to_tgsi_lifetime.cpp | 10 +-- - 6 files changed, 88 insertions(+), 81 deletions(-) - -diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp -index 7413874..163f334 100644 ---- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp -+++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp -@@ -5475,19 +5475,19 @@ glsl_to_tgsi_visitor::split_arrays(void) - void - glsl_to_tgsi_visitor::merge_registers(void) - { -- struct lifetime *lifetimes = -- rzalloc_array(mem_ctx, struct lifetime, this->next_temp); -+ struct register_live_range *reg_live_ranges = -+ rzalloc_array(mem_ctx, struct register_live_range, this->next_temp); - -- if (get_temp_registers_required_lifetimes(mem_ctx, &this->instructions, -- this->next_temp, lifetimes)) { -+ if (get_temp_registers_required_live_ranges(reg_live_ranges, &this->instructions, -+ this->next_temp, reg_live_ranges)) { - struct rename_reg_pair *renames = -- rzalloc_array(mem_ctx, struct rename_reg_pair, this->next_temp); -- get_temp_registers_remapping(mem_ctx, this->next_temp, lifetimes, renames); -+ rzalloc_array(reg_live_ranges, struct rename_reg_pair, this->next_temp); -+ get_temp_registers_remapping(reg_live_ranges, this->next_temp, -+ reg_live_ranges, renames); - rename_temp_registers(renames); - ralloc_free(renames); - } -- -- ralloc_free(lifetimes); -+ ralloc_free(reg_live_ranges); - } - - /* Reassign indices to temporary registers by reusing unused indices created -diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.cpp -index 6921a64..73f52cf 100644 ---- a/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.cpp -+++ b/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.cpp -@@ -154,9 +154,9 @@ public: - - void record_read(int line, prog_scope *scope); - void record_write(int line, prog_scope *scope); -- lifetime get_required_lifetime(); -+ register_live_range get_required_live_range(); - private: -- void propagate_lifetime_to_dominant_write_scope(); -+ void propagate_live_range_to_dominant_write_scope(); - bool conditional_ifelse_write_in_loop() const; - - void record_ifelse_write(const prog_scope& scope); -@@ -230,7 +230,7 @@ public: - temp_access(); - void record_read(int line, prog_scope *scope, int swizzle); - void record_write(int line, prog_scope *scope, int writemask); -- lifetime get_required_lifetime(); -+ register_live_range get_required_live_range(); - private: - void update_access_mask(int mask); - -@@ -513,22 +513,22 @@ void temp_access::record_read(int line, prog_scope *scope, int swizzle) - comp[3].record_read(line, scope); - } - --inline static lifetime make_lifetime(int b, int e) -+inline static register_live_range make_live_range(int b, int e) - { -- lifetime lt; -+ register_live_range lt; - lt.begin = b; - lt.end = e; - return lt; - } - --lifetime temp_access::get_required_lifetime() -+register_live_range temp_access::get_required_live_range() - { -- lifetime result = make_lifetime(-1, -1); -+ register_live_range result = make_live_range(-1, -1); - - unsigned mask = access_mask; - while (mask) { - unsigned chan = u_bit_scan(&mask); -- lifetime lt = comp[chan].get_required_lifetime(); -+ register_live_range lt = comp[chan].get_required_live_range(); - - if (lt.begin >= 0) { - if ((result.begin < 0) || (result.begin > lt.begin)) -@@ -766,7 +766,7 @@ bool temp_comp_access::conditional_ifelse_write_in_loop() const - return conditionality_in_loop_id <= conditionality_unresolved; - } - --void temp_comp_access::propagate_lifetime_to_dominant_write_scope() -+void temp_comp_access::propagate_live_range_to_dominant_write_scope() - { - first_write = first_write_scope->begin(); - int lr = first_write_scope->end(); -@@ -775,7 +775,7 @@ void temp_comp_access::propagate_lifetime_to_dominant_write_scope() - last_read = lr; - } - --lifetime temp_comp_access::get_required_lifetime() -+register_live_range temp_comp_access::get_required_live_range() - { - bool keep_for_full_loop = false; - -@@ -785,7 +785,7 @@ lifetime temp_comp_access::get_required_lifetime() - * eliminating registers that are not written to. - */ - if (last_write < 0) -- return make_lifetime(-1, -1); -+ return make_live_range(-1, -1); - - assert(first_write_scope); - -@@ -793,7 +793,7 @@ lifetime temp_comp_access::get_required_lifetime() - * reused in the range it is used to write to - */ - if (!last_read_scope) -- return make_lifetime(first_write, last_write + 1); -+ return make_live_range(first_write, last_write + 1); - - const prog_scope *enclosing_scope_first_read = first_read_scope; - const prog_scope *enclosing_scope_first_write = first_write_scope; -@@ -837,7 +837,7 @@ lifetime temp_comp_access::get_required_lifetime() - /* Propagate the last read scope to the target scope */ - while (enclosing_scope->nesting_depth() < last_read_scope->nesting_depth()) { - /* If the read is in a loop and we have to move up the scope we need to -- * extend the life time to the end of this current loop because at this -+ * extend the live range to the end of this current loop because at this - * point we don't know whether the component was written before - * un-conditionally in the same loop. - */ -@@ -848,42 +848,42 @@ lifetime temp_comp_access::get_required_lifetime() - } - - /* If the variable has to be kept for the whole loop, and we -- * are currently in a loop, then propagate the life time. -+ * are currently in a loop, then propagate the live range. - */ - if (keep_for_full_loop && first_write_scope->is_loop()) -- propagate_lifetime_to_dominant_write_scope(); -+ propagate_live_range_to_dominant_write_scope(); - - /* Propagate the first_dominant_write scope to the target scope */ - while (enclosing_scope->nesting_depth() < first_write_scope->nesting_depth()) { -- /* Propagate lifetime if there was a break in a loop and the write was -+ /* Propagate live_range if there was a break in a loop and the write was - * after the break inside that loop. Note, that this is only needed if - * we move up in the scopes. - */ - if (first_write_scope->loop_break_line() < first_write) { - keep_for_full_loop = true; -- propagate_lifetime_to_dominant_write_scope(); -+ propagate_live_range_to_dominant_write_scope(); - } - - first_write_scope = first_write_scope->parent(); - -- /* Propagte lifetime if we are now in a loop */ -+ /* Propagte live_range if we are now in a loop */ - if (keep_for_full_loop && first_write_scope->is_loop()) -- propagate_lifetime_to_dominant_write_scope(); -+ propagate_live_range_to_dominant_write_scope(); - } - - /* The last write past the last read is dead code, but we have to - * ensure that the component is not reused too early, hence extend the -- * lifetime past the last write. -+ * live_range past the last write. - */ - if (last_write >= last_read) - last_read = last_write + 1; - - /* Here we are at the same scope, all is resolved */ -- return make_lifetime(first_write, last_read); -+ return make_live_range(first_write, last_read); - } - - /* Helper class for sorting and searching the registers based -- * on life times. */ -+ * on live ranges. */ - class access_record { - public: - int begin; -@@ -904,7 +904,7 @@ public: - void record_read(const st_src_reg& src, int line, prog_scope *scope); - void record_write(const st_dst_reg& src, int line, prog_scope *scope); - -- void get_required_lifetimes(struct lifetime *lifetimes); -+ void get_required_live_ranges(register_live_range *live_ranges); - private: - - int ntemps; -@@ -947,14 +947,14 @@ void access_recorder::record_write(const st_dst_reg& dst, int line, - record_read(*dst.reladdr2, line, scope); - } - --void access_recorder::get_required_lifetimes(struct lifetime *lifetimes) -+void access_recorder::get_required_live_ranges(struct register_live_range *live_ranges) - { -- RENAME_DEBUG(debug_log << "========= lifetimes ==============\n"); -+ RENAME_DEBUG(debug_log << "=========live_ranges ==============\n"); - for(int i = 0; i < ntemps; ++i) { - RENAME_DEBUG(debug_log<< setw(4) << i); -- lifetimes[i] = acc[i].get_required_lifetime(); -- RENAME_DEBUG(debug_log << ": [" << lifetimes[i].begin << ", " -- << lifetimes[i].end << "]\n"); -+ live_ranges[i] = acc[i].get_required_live_range(); -+ RENAME_DEBUG(debug_log << ": [" <<live_ranges[i].begin << ", " -+ <<live_ranges[i].end << "]\n"); - } - RENAME_DEBUG(debug_log << "==================================\n\n"); - } -@@ -967,12 +967,12 @@ static void dump_instruction(ostream& os, int line, prog_scope *scope, - const glsl_to_tgsi_instruction& inst); - #endif - --/* Scan the program and estimate the required register life times. -- * The array lifetimes must be pre-allocated -+/* Scan the program and estimate the required register live ranges. -+ * live_ranges must be pre-allocated. - */ - bool --get_temp_registers_required_lifetimes(void *mem_ctx, exec_list *instructions, -- int ntemps, struct lifetime *lifetimes) -+get_temp_registers_required_live_ranges(void *mem_ctx, exec_list *instructions, -+ int ntemps, struct register_live_range *live_ranges) - { - int line = 0; - int loop_id = 1; -@@ -1110,7 +1110,7 @@ get_temp_registers_required_lifetimes(void *mem_ctx, exec_list *instructions, - case TGSI_OPCODE_CAL: - case TGSI_OPCODE_RET: - /* These opcodes are not supported and if a subroutine would -- * be called in a shader, then the lifetime tracking would have -+ * be called in a shader, then the live_range tracking would have - * to follow that call to see which registers are used there. - * Since this is not done, we have to bail out here and signal - * that no register merge will take place. -@@ -1139,11 +1139,11 @@ get_temp_registers_required_lifetimes(void *mem_ctx, exec_list *instructions, - if (cur_scope->end() < 0) - cur_scope->set_end(line - 1); - -- access.get_required_lifetimes(lifetimes); -+ access.get_required_live_ranges(live_ranges); - return true; - } - --/* Find the next register between [start, end) that has a life time starting -+/* Find the next register between [start, end) that has a live range starting - * at or after bound by using a binary search. - * start points at the beginning of the search range, - * end points at the element past the end of the search range, and -@@ -1181,16 +1181,16 @@ static int access_record_compare (const void *a, const void *b) { - /* This functions evaluates the register merges by using a binary - * search to find suitable merge candidates. */ - void get_temp_registers_remapping(void *mem_ctx, int ntemps, -- const struct lifetime* lifetimes, -+ const struct register_live_range *live_ranges, - struct rename_reg_pair *result) - { - access_record *reg_access = ralloc_array(mem_ctx, access_record, ntemps); - - int used_temps = 0; - for (int i = 0; i < ntemps; ++i) { -- if (lifetimes[i].begin >= 0) { -- reg_access[used_temps].begin = lifetimes[i].begin; -- reg_access[used_temps].end = lifetimes[i].end; -+ if (live_ranges[i].begin >= 0) { -+ reg_access[used_temps].begin =live_ranges[i].begin; -+ reg_access[used_temps].end =live_ranges[i].end; - reg_access[used_temps].reg = i; - reg_access[used_temps].erase = false; - ++used_temps; -diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.h b/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.h -index 3f21b13..375d5b8 100644 ---- a/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.h -+++ b/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.h -@@ -26,46 +26,48 @@ - - #include "st_glsl_to_tgsi_private.h" - --/** Storage to record the required life time of a temporary register -+/** Storage to record the required live range of a temporary register - * begin == end == -1 indicates that the register can be reused without - * limitations. Otherwise, "begin" indicates the first instruction in which - * a write operation may target this temporary, and end indicates the - * last instruction in which a value can be read from this temporary. - * Hence, a register R2 can be merged with a register R1 if R1.end <= R2.begin. - */ --struct lifetime { -+struct register_live_range { - int begin; - int end; - }; - --/** Evaluates the required life times of temporary registers in a shader. -- * The life time estimation can only be run sucessfully if the shader doesn't -+/** Evaluates the required live ranges of temporary registers in a shader. -+ * The live range estimation can only be run sucessfully if the shader doesn't - * call a subroutine. -- * @param[in] mem_ctx a memory context that can be used with the ralloc_* functions -+ * @param[in] mem_ctx a memory context that can be used with the ralloc_* -+ * functions - * @param[in] instructions the shader to be anlzyed - * @param[in] ntemps number of temporaries reserved for this shader -- * @param[in,out] lifetimes memory location to store the estimated required -- * life times for each temporary register. The parameter must point to -- * allocated memory that can hold ntemps lifetime structures. On output -- * the life times contains the life times for the registers with the -- * exception of TEMP[0]. -+ * @param[in,out] reg_live_ranges memory location to store the estimated -+ * required live ranges for each temporary register. The parameter must -+ * point to allocated memory that can hold ntemps register_live_range -+ * structures. On output the live ranges contains the live ranges for -+ * the registers with the exception of TEMP[0] - * @returns: true if the lifetimes were estimated, false if not (i.e. if a - * subroutine was called). - */ - bool --get_temp_registers_required_lifetimes(void *mem_ctx, exec_list *instructions, -- int ntemps, struct lifetime *lifetimes); -+get_temp_registers_required_live_ranges(void *mem_ctx, exec_list *instructions, -+ int ntemps, struct register_live_range *live_ranges); -+ - /** Estimate the merge remapping of the registers. -- * @param[in] mem_ctx a memory context that can be used with the ralloc_* functions -+ * @param[in] mem_ctx a memory context that can be used with the ralloc_* -+ * functions - * @param[in] ntemps number of temporaries reserved for this shader -- * @param[in] lifetimes required life time for each temporary register. -+ * @param[in] reg_live_ranges required live range for each temporary register. - * @param[in,out] result memory location to store the register remapping table. - * On input the parameter must point to allocated memory that can hold the - * renaming information for ntemps registers, on output the mapping is stored. - * Note that TEMP[0] is not considered for register renaming. - */ - void get_temp_registers_remapping(void *mem_ctx, int ntemps, -- const struct lifetime* lifetimes, -- struct rename_reg_pair *result); -- -+ const struct register_live_range* reg_live_ranges, -+ struct rename_reg_pair *result); - #endif -\ No newline at end of file -diff --git a/src/mesa/state_tracker/tests/st_tests_common.cpp b/src/mesa/state_tracker/tests/st_tests_common.cpp -index ea01ca5..f1e4a83 100644 ---- a/src/mesa/state_tracker/tests/st_tests_common.cpp -+++ b/src/mesa/state_tracker/tests/st_tests_common.cpp -@@ -411,7 +411,7 @@ LifetimeEvaluatorTest::run(const vector<FakeCodeline>& code, bool& success) - lifetime_result result(shader.get_num_temps()); - - success = -- get_temp_registers_required_lifetimes(mem_ctx, shader.get_program(mem_ctx), -+ get_temp_registers_required_live_ranges(mem_ctx, shader.get_program(mem_ctx), - shader.get_num_temps(), - &result[0]); - -@@ -422,8 +422,9 @@ void LifetimeEvaluatorTest::run(const vector<FakeCodeline>& code, const temp_lt_ - { - FakeShader shader(code); - lifetime_result result(shader.get_num_temps()); -+ - bool success = -- get_temp_registers_required_lifetimes(mem_ctx, shader.get_program(mem_ctx), -+ get_temp_registers_required_live_ranges(mem_ctx, shader.get_program(mem_ctx), - shader.get_num_temps(), - &result[0]); - ASSERT_TRUE(success); -@@ -431,7 +432,7 @@ void LifetimeEvaluatorTest::run(const vector<FakeCodeline>& code, const temp_lt_ - check(result, e); - } - --void LifetimeEvaluatorExactTest::check( const vector<lifetime>& lifetimes, -+void LifetimeEvaluatorExactTest::check( const vector<register_live_range>& lifetimes, - const temp_lt_expect& e) - { - for (unsigned i = 1; i < lifetimes.size(); ++i) { -@@ -440,7 +441,7 @@ void LifetimeEvaluatorExactTest::check( const vector<lifetime>& lifetimes, - } - } - --void LifetimeEvaluatorAtLeastTest::check( const vector<lifetime>& lifetimes, -+void LifetimeEvaluatorAtLeastTest::check( const vector<register_live_range>& lifetimes, - const temp_lt_expect& e) - { - for (unsigned i = 1; i < lifetimes.size(); ++i) { -@@ -449,7 +450,7 @@ void LifetimeEvaluatorAtLeastTest::check( const vector<lifetime>& lifetimes, - } - } - --void RegisterRemappingTest::run(const vector<lifetime>& lt, -+void RegisterRemappingTest::run(const vector<register_live_range>& lt, - const vector<int>& expect) - { - rename_reg_pair proto{false,0}; -@@ -476,8 +477,9 @@ void RegisterLifetimeAndRemappingTest::run(const vector<FakeCodeline>& code, - const vector<int>& expect) - { - FakeShader shader(code); -- std::vector<lifetime> lt(shader.get_num_temps()); -- get_temp_registers_required_lifetimes(mem_ctx, shader.get_program(mem_ctx), -+ std::vector<register_live_range> lt(shader.get_num_temps()); -+ -+ get_temp_registers_required_live_ranges(mem_ctx, shader.get_program(mem_ctx), - shader.get_num_temps(), <[0]); - this->run(lt, expect); - } -diff --git a/src/mesa/state_tracker/tests/st_tests_common.h b/src/mesa/state_tracker/tests/st_tests_common.h -index 2e18832..0fcec62 100644 ---- a/src/mesa/state_tracker/tests/st_tests_common.h -+++ b/src/mesa/state_tracker/tests/st_tests_common.h -@@ -131,17 +131,19 @@ class LifetimeEvaluatorTest : public MesaTestWithMemCtx { - protected: - void run(const std::vector<FakeCodeline>& code, const temp_lt_expect& e); - private: -- using lifetime_result=std::vector<lifetime>; -+ using lifetime_result=std::vector<register_live_range>; - lifetime_result run(const std::vector<FakeCodeline>& code, bool& success); - -- virtual void check(const std::vector<lifetime>& result, const temp_lt_expect& e) = 0; -+ virtual void check(const std::vector<register_live_range>& result, -+ const temp_lt_expect& e) = 0; - }; - - /* This is a test class to check the exact life times of - * registers. */ - class LifetimeEvaluatorExactTest : public LifetimeEvaluatorTest { - protected: -- void check(const std::vector<lifetime>& result, const temp_lt_expect& e); -+ void check(const std::vector<register_live_range>& result, -+ const temp_lt_expect& e); - - }; - -@@ -152,13 +154,14 @@ protected: - */ - class LifetimeEvaluatorAtLeastTest : public LifetimeEvaluatorTest { - protected: -- void check(const std::vector<lifetime>& result, const temp_lt_expect& e); -+ void check(const std::vector<register_live_range>& result, const temp_lt_expect& e); - }; - - /* With this test class the renaming mapping estimation is tested */ - class RegisterRemappingTest : public MesaTestWithMemCtx { - protected: -- void run(const std::vector<lifetime>& lt, const std::vector<int> &expect); -+ void run(const std::vector<register_live_range>& lt, -+ const std::vector<int> &expect); - }; - - /* With this test class the combined lifetime estimation and renaming -diff --git a/src/mesa/state_tracker/tests/test_glsl_to_tgsi_lifetime.cpp b/src/mesa/state_tracker/tests/test_glsl_to_tgsi_lifetime.cpp -index acebfb8..dbf74cc 100644 ---- a/src/mesa/state_tracker/tests/test_glsl_to_tgsi_lifetime.cpp -+++ b/src/mesa/state_tracker/tests/test_glsl_to_tgsi_lifetime.cpp -@@ -1684,7 +1684,7 @@ TEST_F(LifetimeEvaluatorExactTest, WriteIndirectReladdr2) - */ - TEST_F(RegisterRemappingTest, RegisterRemapping1) - { -- vector<lifetime> lt({{-1,-1}, -+ vector<register_live_range> lt({{-1,-1}, - {0,1}, - {0,2}, - {1,2}, -@@ -1699,7 +1699,7 @@ TEST_F(RegisterRemappingTest, RegisterRemapping1) - - TEST_F(RegisterRemappingTest, RegisterRemapping2) - { -- vector<lifetime> lt({{-1,-1}, -+ vector<register_live_range> lt({{-1,-1}, - {0,1}, - {0,2}, - {3,4}, -@@ -1711,7 +1711,7 @@ TEST_F(RegisterRemappingTest, RegisterRemapping2) - - TEST_F(RegisterRemappingTest, RegisterRemappingMergeAllToOne) - { -- vector<lifetime> lt({{-1,-1}, -+ vector<register_live_range> lt({{-1,-1}, - {0,1}, - {1,2}, - {2,3}, -@@ -1723,7 +1723,7 @@ TEST_F(RegisterRemappingTest, RegisterRemappingMergeAllToOne) - - TEST_F(RegisterRemappingTest, RegisterRemappingIgnoreUnused) - { -- vector<lifetime> lt({{-1,-1}, -+ vector<register_live_range> lt({{-1,-1}, - {0,1}, - {1,2}, - {2,3}, -@@ -1736,7 +1736,7 @@ TEST_F(RegisterRemappingTest, RegisterRemappingIgnoreUnused) - - TEST_F(RegisterRemappingTest, RegisterRemappingMergeZeroLifetimeRegisters) - { -- vector<lifetime> lt({{-1,-1}, -+ vector<register_live_range> lt({{-1,-1}, - {0,1}, - {1,2}, - {2,3}, --- -2.7.4 - diff --git a/common/recipes-graphics/mesa/mesa/0004-mesa-st-Add-helper-classes-for-array-merging-and-int.patch b/common/recipes-graphics/mesa/mesa/0004-mesa-st-Add-helper-classes-for-array-merging-and-int.patch deleted file mode 100644 index ddb634b6..00000000 --- a/common/recipes-graphics/mesa/mesa/0004-mesa-st-Add-helper-classes-for-array-merging-and-int.patch +++ /dev/null @@ -1,459 +0,0 @@ -From 0397050c39fbb67f954929f8c5c2faeab7b9b08f Mon Sep 17 00:00:00 2001 -From: Gert Wollny <gw.fossdev@gmail.com> -Date: Fri, 9 Feb 2018 11:11:08 +0100 -Subject: [PATCH 04/13] mesa/st: Add helper classes for array merging and - interleaving - -This class implements the live range merge and component interleave -remapping logic. - -Signed-off-by: Gert Wollny <gw.fossdev@gmail.com> ---- - src/mesa/Makefile.sources | 2 + - src/mesa/meson.build | 2 + - .../state_tracker/st_glsl_to_tgsi_array_merge.cpp | 283 +++++++++++++++++++++ - .../state_tracker/st_glsl_to_tgsi_array_merge.h | 116 +++++++++ - 4 files changed, 403 insertions(+) - create mode 100644 src/mesa/state_tracker/st_glsl_to_tgsi_array_merge.cpp - create mode 100644 src/mesa/state_tracker/st_glsl_to_tgsi_array_merge.h - -diff --git a/src/mesa/Makefile.sources b/src/mesa/Makefile.sources -index 0a9aad5..789feeb 100644 ---- a/src/mesa/Makefile.sources -+++ b/src/mesa/Makefile.sources -@@ -519,6 +519,8 @@ STATETRACKER_FILES = \ - state_tracker/st_glsl_to_nir.cpp \ - state_tracker/st_glsl_to_tgsi.cpp \ - state_tracker/st_glsl_to_tgsi.h \ -+ state_tracker/st_glsl_to_tgsi_array_merge.cpp \ -+ state_tracker/st_glsl_to_tgsi_array_merge.h \ - state_tracker/st_glsl_to_tgsi_private.cpp \ - state_tracker/st_glsl_to_tgsi_private.h \ - state_tracker/st_glsl_to_tgsi_temprename.cpp \ -diff --git a/src/mesa/meson.build b/src/mesa/meson.build -index aa27d59..2ec5062 100644 ---- a/src/mesa/meson.build -+++ b/src/mesa/meson.build -@@ -566,6 +566,8 @@ files_libmesa_gallium = files( - 'state_tracker/st_glsl_to_nir.cpp', - 'state_tracker/st_glsl_to_tgsi.cpp', - 'state_tracker/st_glsl_to_tgsi.h', -+ 'state_tracker/st_glsl_to_tgsi_array_merge.cpp', -+ 'state_tracker/st_glsl_to_tgsi_array_merge.h', - 'state_tracker/st_glsl_to_tgsi_private.cpp', - 'state_tracker/st_glsl_to_tgsi_private.h', - 'state_tracker/st_glsl_to_tgsi_temprename.cpp', -diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi_array_merge.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi_array_merge.cpp -new file mode 100644 -index 0000000..f432d93 ---- /dev/null -+++ b/src/mesa/state_tracker/st_glsl_to_tgsi_array_merge.cpp -@@ -0,0 +1,283 @@ -+/* -+ * Copyright © 2017 Gert Wollny -+ * -+ * Permission is hereby granted, free of charge, to any person obtaining a -+ * copy of this software and 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 "program/prog_instruction.h" -+#include "util/u_math.h" -+#include <ostream> -+#include <cassert> -+#include <algorithm> -+ -+#include <iostream> -+ -+#include "st_glsl_to_tgsi_array_merge.h" -+ -+#if __cplusplus >= 201402L -+#include <memory> -+using std::unique_ptr; -+using std::make_unique; -+#endif -+ -+namespace tgsi_array_merge { -+ -+array_remapping::array_remapping(): -+ target_id(0), -+ reswizzle(false), -+ finalized(true) -+{ -+} -+ -+array_remapping::array_remapping(int trgt_array_id, unsigned src_access_mask): -+ target_id(trgt_array_id), -+ original_src_access_mask(src_access_mask), -+ reswizzle(false), -+ finalized(false) -+{ -+} -+ -+array_remapping::array_remapping(int trgt_array_id, int trgt_access_mask, -+ int src_access_mask): -+ target_id(trgt_array_id), -+ summary_access_mask(trgt_access_mask), -+ original_src_access_mask(src_access_mask), -+ reswizzle(true), -+ finalized(false) -+{ -+ for (int i = 0; i < 4; ++i) { -+ read_swizzle_map[i] = -1; -+ writemask_map[i] = 0; -+ } -+ -+ int src_swizzle_bit = 1; -+ int next_free_swizzle_bit = 1; -+ int k = 0; -+ bool skip = true; -+ unsigned last_src_bit = util_last_bit(src_access_mask); -+ -+ for (unsigned i = 0; i < 4; ++i, src_swizzle_bit <<= 1) { -+ -+ /* The swizzle mapping fills the unused slots with the last used -+ * component (think temp[A].xyyy) and maps the write mask accordingly. -+ * Hence, if (i < last_src_bit) skip is true and mappings are only added -+ * for used the components, but for (i >= last_src_bit) the mapping -+ * is set for remaining slots. -+ */ -+ if (skip && !(src_swizzle_bit & src_access_mask)) -+ continue; -+ skip = (i < last_src_bit); -+ -+ /* Find the next free access slot in the target.*/ -+ while ((trgt_access_mask & next_free_swizzle_bit) && -+ k < 4) { -+ next_free_swizzle_bit <<= 1; -+ ++k; -+ } -+ assert(k < 4 && -+ "Interleaved array would have more then four components"); -+ -+ /* Set the mapping for this component. */ -+ read_swizzle_map[i] = k; -+ writemask_map[i] = next_free_swizzle_bit; -+ trgt_access_mask |= next_free_swizzle_bit; -+ -+ /* Update the joined access mask if we didn't just fill the mapping.*/ -+ if (src_swizzle_bit & src_access_mask) -+ summary_access_mask |= next_free_swizzle_bit; -+ } -+} -+ -+int array_remapping::map_writemask(int writemask_to_map) const -+{ -+ assert(is_valid()); -+ if (!reswizzle) -+ return writemask_to_map; -+ -+ assert(original_src_access_mask & writemask_to_map); -+ int result = 0; -+ for (int i = 0; i < 4; ++i) { -+ if (1 << i & writemask_to_map) -+ result |= writemask_map[i]; -+ } -+ return result; -+} -+ -+uint16_t array_remapping::move_read_swizzles(uint16_t original_swizzle) const -+{ -+ assert(is_valid()); -+ if (!reswizzle) -+ return original_swizzle; -+ -+ /* Since -+ * -+ * dst.zw = src.xy in glsl actually is MOV dst.__zw src.__xy -+ * -+ * when interleaving the arrays the source swizzles must be moved -+ * according to the changed dst write mask. -+ */ -+ uint16_t out_swizzle = 0; -+ for (int idx = 0; idx < 4; ++idx) { -+ uint16_t orig_swz = GET_SWZ(original_swizzle, idx); -+ int new_idx = read_swizzle_map[idx]; -+ if (new_idx >= 0) -+ out_swizzle |= orig_swz << 3 * new_idx; -+ } -+ return out_swizzle; -+} -+ -+int array_remapping::map_one_swizzle(int swizzle_to_map) const -+{ -+ if (!reswizzle) -+ return swizzle_to_map; -+ -+ assert(read_swizzle_map[swizzle_to_map] >= 0); -+ return read_swizzle_map[swizzle_to_map]; -+} -+ -+uint16_t array_remapping::map_swizzles(uint16_t old_swizzle) const -+{ -+ if (!reswizzle) -+ return old_swizzle; -+ -+ uint16_t out_swizzle = 0; -+ for (int idx = 0; idx < 4; ++idx) { -+ uint16_t swz = map_one_swizzle(GET_SWZ(old_swizzle, idx)); -+ out_swizzle |= swz << 3 * idx; -+ } -+ return out_swizzle; -+} -+ -+void array_remapping::print(std::ostream& os) const -+{ -+ static const char xyzw[] = "xyzw"; -+ if (is_valid()) { -+ os << "[aid: " << target_id; -+ -+ if (reswizzle) { -+ os << " write-swz: "; -+ for (int i = 0; i < 4; ++i) { -+ if (1 << i & original_src_access_mask) { -+ switch (writemask_map[i]) { -+ case 1: os << "x"; break; -+ case 2: os << "y"; break; -+ case 4: os << "z"; break; -+ case 8: os << "w"; break; -+ } -+ } else { -+ os << "_"; -+ } -+ } -+ os << ", read-swz: "; -+ for (int i = 0; i < 4; ++i) { -+ if (1 << i & original_src_access_mask && read_swizzle_map[i] >= 0) -+ os << xyzw[read_swizzle_map[i]]; -+ else -+ os << "_"; -+ } -+ } -+ os << "]"; -+ } else { -+ os << "[unused]"; -+ } -+} -+ -+void array_remapping::finalize_mappings(array_remapping *arr_map) -+{ -+ assert(is_valid()); -+ -+ array_remapping& forward_map = arr_map[target_id]; -+ -+ /* If no valid map is provided than we have a final target array -+ * at the target_id index, no finalization needed. */ -+ if (!forward_map.is_valid()) -+ return; -+ -+ /* This mappoints to another mapped array that may need finalization. */ -+ if (!forward_map.is_finalized()) -+ forward_map.finalize_mappings(arr_map); -+ -+ /* Now finalize this mapping by translating the map to represent -+ * a mapping to a final target array (i.e. one that is not mapped). -+ * This is only necessary if the target_id array map provides reswizzling. -+ */ -+ if (forward_map.reswizzle) { -+ -+ /* If this mapping doesn't have a reswizzle map build one now.*/ -+ if (!reswizzle) { -+ for (int i = 0; i < 4; ++i) { -+ if (1 << i & original_src_access_mask) { -+ read_swizzle_map[i] = i; -+ writemask_map[i] = 1 << i; -+ } else { -+ read_swizzle_map[i] = -1; -+ writemask_map[i] = 0; -+ } -+ } -+ reswizzle = true; -+ } -+ -+ /* Propagate the swizzle mapping of the forward map.*/ -+ for (int i = 0; i < 4; ++i) { -+ if ((1 << i & original_src_access_mask) == 0) -+ continue; -+ read_swizzle_map[i] = forward_map.map_one_swizzle(read_swizzle_map[i]); -+ writemask_map[i] = forward_map.map_writemask(writemask_map[i]); -+ } -+ -+ } -+ -+ /* Now we can skip the intermediate mapping.*/ -+ target_id = forward_map.target_id; -+ finalized = true; -+} -+ -+/* Required by the unit tests */ -+bool operator == (const array_remapping& lhs, const array_remapping& rhs) -+{ -+ if (lhs.target_id != rhs.target_id) -+ return false; -+ -+ if (lhs.target_id == 0) -+ return true; -+ -+ if (lhs.reswizzle) { -+ if (!rhs.reswizzle) -+ return false; -+ -+ if (lhs.original_src_access_mask != rhs.original_src_access_mask) -+ return false; -+ -+ for (int i = 0; i < 4; ++i) { -+ if (1 << i & lhs.original_src_access_mask) { -+ if (lhs.writemask_map[i] != rhs.writemask_map[i]) -+ return false; -+ if (lhs.read_swizzle_map[i] != rhs.read_swizzle_map[i]) -+ return false; -+ } -+ } -+ } else { -+ return !rhs.reswizzle; -+ } -+ return true; -+} -+ -+/* end namespace tgsi_array_merge */ -+} -diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi_array_merge.h b/src/mesa/state_tracker/st_glsl_to_tgsi_array_merge.h -new file mode 100644 -index 0000000..c74c854 ---- /dev/null -+++ b/src/mesa/state_tracker/st_glsl_to_tgsi_array_merge.h -@@ -0,0 +1,116 @@ -+/* -+ * Copyright © 2017 Gert Wollny -+ * -+ * Permission is hereby granted, free of charge, to any person obtaining a -+ * copy of this software and 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 MESA_GLSL_TO_TGSI_ARRAY_MERGE_H -+#define MESA_GLSL_TO_TGSI_ARRAY_MERGE_H -+ -+#include "st_glsl_to_tgsi_private.h" -+#include <iosfwd> -+ -+namespace tgsi_array_merge { -+ -+/* Helper class to merge and interleave arrays. -+ * The interface is exposed here to make unit tests possible. -+ */ -+class array_remapping { -+public: -+ -+ /** Create an invalid mapping that is used as place-holder for -+ * arrays that are not mapped at all. -+ */ -+ array_remapping(); -+ -+ /** Simple remapping that is done when the lifetimes do not -+ * overlap. -+ * @param trgt_array_id ID of the array that the new array will -+ * be interleaved with -+ */ -+ array_remapping(int trgt_array_id, unsigned src_access_mask); -+ -+ /** Component interleaving of arrays. -+ * @param target_array_id ID of the array that the new array will -+ * be interleaved with -+ * @param trgt_access_mask the component mast of the target array -+ * (the components that are already reserved) -+ * @param orig_component_mask -+ */ -+ array_remapping(int trgt_array_id, int trgt_access_mask, -+ int src_access_mask); -+ -+ /* Defines a valid remapping */ -+ bool is_valid() const {return target_id > 0;} -+ -+ /* Resolve the mapping chain so that this mapping remaps to an -+ * array that is not remapped. -+ */ -+ void finalize_mappings(array_remapping *arr_map); -+ -+ void set_target_id(int tid) {target_id = tid;} -+ -+ /* Translates the write mask to the new, interleaved component -+ * position -+ */ -+ int map_writemask(int original_src_access_mask) const; -+ -+ /* Translates all read swizzles to the new, interleaved component -+ * swizzles -+ */ -+ uint16_t map_swizzles(uint16_t original_swizzle) const; -+ -+ /** Move the read swizzles to the positiones that correspond to -+ * a changed write mask. -+ */ -+ uint16_t move_read_swizzles(uint16_t original_swizzle) const; -+ -+ unsigned target_array_id() const {return target_id;} -+ -+ int combined_access_mask() const {return summary_access_mask;} -+ -+ void print(std::ostream& os) const; -+ -+ bool is_finalized() { return finalized;} -+ -+ friend bool operator == (const array_remapping& lhs, -+ const array_remapping& rhs); -+ -+ int map_one_swizzle(int swizzle_to_map) const; -+ -+private: -+ unsigned target_id; -+ uint16_t writemask_map[4]; -+ int16_t read_swizzle_map[4]; -+ unsigned summary_access_mask:4; -+ unsigned original_src_access_mask:4; -+ int reswizzle:1; -+ int finalized:1; -+}; -+ -+inline -+std::ostream& operator << (std::ostream& os, const array_remapping& am) -+{ -+ am.print(os); -+ return os; -+} -+ -+} -+#endif --- -2.7.4 - diff --git a/common/recipes-graphics/mesa/mesa/0005-mesa-st-glsl_to_tgsi-Add-class-to-hold-array-informa.patch b/common/recipes-graphics/mesa/mesa/0005-mesa-st-glsl_to_tgsi-Add-class-to-hold-array-informa.patch deleted file mode 100644 index d139f8a9..00000000 --- a/common/recipes-graphics/mesa/mesa/0005-mesa-st-glsl_to_tgsi-Add-class-to-hold-array-informa.patch +++ /dev/null @@ -1,156 +0,0 @@ -From a454110bd60608df5e562ac5cdc43f994bb8d33f Mon Sep 17 00:00:00 2001 -From: Gert Wollny <gw.fossdev@gmail.com> -Date: Fri, 9 Feb 2018 11:11:09 +0100 -Subject: [PATCH 05/13] mesa/st/glsl_to_tgsi: Add class to hold array - information - -Implememt a class that holds the information required by the array merging -and interleave algorithm, namely array ID, live range, access mask, -accessed components, and the number of accessed components. - -Signed-off-by: Gert Wollny <gw.fossdev@gmail.com> ---- - .../state_tracker/st_glsl_to_tgsi_array_merge.cpp | 69 ++++++++++++++++++++++ - .../state_tracker/st_glsl_to_tgsi_array_merge.h | 46 +++++++++++++++ - 2 files changed, 115 insertions(+) - -diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi_array_merge.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi_array_merge.cpp -index f432d93..1a455ce 100644 ---- a/src/mesa/state_tracker/st_glsl_to_tgsi_array_merge.cpp -+++ b/src/mesa/state_tracker/st_glsl_to_tgsi_array_merge.cpp -@@ -37,6 +37,75 @@ using std::unique_ptr; - using std::make_unique; - #endif - -+ -+array_live_range::array_live_range(): -+ id(0), -+ length(0), -+ first_access(0), -+ last_access(0), -+ component_access_mask(0), -+ used_component_count(0) -+{ -+} -+ -+array_live_range::array_live_range(unsigned aid, unsigned alength): -+ id(aid), -+ length(alength), -+ first_access(0), -+ last_access(0), -+ component_access_mask(0), -+ used_component_count(0) -+{ -+} -+ -+array_live_range::array_live_range(unsigned aid, unsigned alength, int begin, -+ int end, int sw): -+ id(aid), -+ length(alength), -+ first_access(begin), -+ last_access(end), -+ component_access_mask(sw), -+ used_component_count(util_bitcount(sw)) -+{ -+} -+ -+void array_live_range::set_live_range(int _begin, int _end) -+{ -+ set_begin(_begin); -+ set_end(_end); -+} -+ -+void array_live_range::set_access_mask(int mask) -+{ -+ component_access_mask = mask; -+ used_component_count = util_bitcount(mask); -+} -+ -+void array_live_range::merge_live_range(const array_live_range &other) -+{ -+ if (other.begin() < first_access) -+ first_access = other.begin(); -+ if (other.end() > last_access) -+ last_access = other.end(); -+} -+ -+void array_live_range::print(std::ostream& os) const -+{ -+ os << "[id:" << id -+ << ", length:" << length -+ << ", (b:" << first_access -+ << ", e:" << last_access -+ << "), sw:" << component_access_mask -+ << ", nc:" << used_component_count -+ << "]"; -+} -+ -+bool array_live_range::time_doesnt_overlap(const array_live_range& other) const -+{ -+ return (other.last_access < first_access || -+ last_access < other.first_access); -+} -+ - namespace tgsi_array_merge { - - array_remapping::array_remapping(): -diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi_array_merge.h b/src/mesa/state_tracker/st_glsl_to_tgsi_array_merge.h -index c74c854..b9fb498 100644 ---- a/src/mesa/state_tracker/st_glsl_to_tgsi_array_merge.h -+++ b/src/mesa/state_tracker/st_glsl_to_tgsi_array_merge.h -@@ -27,6 +27,52 @@ - #include "st_glsl_to_tgsi_private.h" - #include <iosfwd> - -+/* Helper class to evaluate the required live range of an array. -+ * -+ * For arrays not only the live range must be tracked, but also the arrays -+ * length and since we want to interleave arrays, we also track an access mask. -+ * Consequently, one array can be merged into another or interleaved with -+ * another only if the target array is longer. -+ */ -+class array_live_range { -+public: -+ array_live_range(); -+ array_live_range(unsigned aid, unsigned alength); -+ array_live_range(unsigned aid, unsigned alength, int first_access, -+ int last_access, int mask); -+ -+ void set_live_range(int first_access, int last_access); -+ void set_begin(int _begin){first_access = _begin;} -+ void set_end(int _end){last_access = _end;} -+ void set_access_mask(int s); -+ void merge_live_range(const array_live_range& other); -+ -+ unsigned array_id() const {return id;} -+ int array_length() const { return length;} -+ int begin() const { return first_access;} -+ int end() const { return last_access;} -+ int access_mask() const { return component_access_mask;} -+ int used_components() const {return used_component_count;} -+ -+ bool time_doesnt_overlap(const array_live_range& other) const; -+ -+ void print(std::ostream& os) const; -+ -+private: -+ unsigned id; -+ unsigned length; -+ int first_access; -+ int last_access; -+ int component_access_mask; -+ int used_component_count; -+}; -+ -+inline -+std::ostream& operator << (std::ostream& os, const array_live_range& lt) { -+ lt.print(os); -+ return os; -+} -+ - namespace tgsi_array_merge { - - /* Helper class to merge and interleave arrays. --- -2.7.4 - diff --git a/common/recipes-graphics/mesa/mesa/0006-mesa-st-glsl_to_tgsi-Add-array-merge-logic.patch b/common/recipes-graphics/mesa/mesa/0006-mesa-st-glsl_to_tgsi-Add-array-merge-logic.patch deleted file mode 100644 index cca4609e..00000000 --- a/common/recipes-graphics/mesa/mesa/0006-mesa-st-glsl_to_tgsi-Add-array-merge-logic.patch +++ /dev/null @@ -1,462 +0,0 @@ -From 6a7b4ddd3c5759f4b6ba0a9df527e3187c6a3e50 Mon Sep 17 00:00:00 2001 -From: Gert Wollny <gw.fossdev@gmail.com> -Date: Fri, 9 Feb 2018 11:11:10 +0100 -Subject: [PATCH 06/13] mesa/st/glsl_to_tgsi: Add array merge logic - -Add the functions that evaluate array live range merging and array -interleaving based on the array information. - -Signed-off-by: Gert Wollny <gw.fossdev@gmail.com> ---- - .../state_tracker/st_glsl_to_tgsi_array_merge.cpp | 385 ++++++++++++++++++++- - .../state_tracker/st_glsl_to_tgsi_array_merge.h | 26 +- - 2 files changed, 409 insertions(+), 2 deletions(-) - -diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi_array_merge.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi_array_merge.cpp -index 1a455ce..5db49d5 100644 ---- a/src/mesa/state_tracker/st_glsl_to_tgsi_array_merge.cpp -+++ b/src/mesa/state_tracker/st_glsl_to_tgsi_array_merge.cpp -@@ -21,6 +21,109 @@ - * DEALINGS IN THE SOFTWARE. - */ - -+/* A short overview on how the array merging works: -+ * -+ * Inputs: -+ * - per array information: live range, access mask, size -+ * - the program -+ * -+ * Output: -+ * - the program with updated array addressing -+ * -+ * Pseudo algorithm: -+ * -+ * repeat until no more successful merges were found -+ * for all pairs of arrays: -+ * if they have non-overlapping live ranges and equal access masks: -+ * - pick shorter array -+ * - merge its live range into the longer array -+ * - set its merge target array to the longer array -+ * - mark the shorter array as processed -+ * endfor -+ * for all pairs of arrays: -+ * if they have overlapping live ranges use in sum at most four components: -+ * - pick shorter array -+ * - evaluate reswizzle map to move its components into the components -+ * that are not used by the longer array -+ * - set its merge target array to the longer array -+ * - mark the shorter array as processed -+ * - bail out of for loop -+ * endfor -+ * end repeat -+ * for all pairs of arrays: -+ * if they have non-overlapping live ranges: -+ * - pick shorter array -+ * - merge its live range into the longer array -+ * - set its merge target array to the longer array -+ * - mark the shorter array as processed -+ * endfor -+ * Finalize remapping map so that target arrays are always final, i.e. have -+ * themselfes no merge target set. -+ * -+ * Example: -+ * ID | Length | Live range | access mask | target id | reswizzle -+ * ================================================================ -+ * 1 3 3-10 x___ 0 ____ -+ * 2 4 13-20 x___ 0 ____ -+ * 3 8 3-20 x___ 0 ____ -+ * 4 6 21-40 xy__ 0 ____ -+ * 5 7 12-30 xy__ 0 ____ -+ * -+ * 1. merge live ranges 1 and 2 -+ * -+ * ID | Length | Live range | access mask | target id | reswizzle -+ * ================================================================ -+ * 1 - - x___ 2 ____ -+ * 2 4 3-20 x___ 0 ____ -+ * 3 8 3-20 x___ 0 ____ -+ * 4 6 21-40 xy__ 0 ____ -+ * 5 7 12-30 xy__ 0 ____ -+ * -+ * -+ * 3. interleave 2 and 3 -+ * -+ * ID | Length | Live range | access mask | target id | reswizzle -+ * ================================================================ -+ * 1 - - x___ 2 ____ -+ * 2 - - x___ 3 _x__ -+ * 3 8 3-20 xy__ 0 ____ -+ * 4 6 21-40 xy__ 0 ____ -+ * 5 7 12-30 xy__ 0 ____ -+ * -+ * 3. merge live ranges 3 and 4 -+ * -+ * ID | Length | Live range | access mask | target id | reswizzle -+ * ================================================================ -+ * 1 - - x___ 2 ____ -+ * 2 - - x___ 3 _x__ -+ * 3 8 3-40 xy__ 0 ____ -+ * 4 - - xy__ 3 ____ -+ * 5 7 3-21 xy__ 0 ____ -+ * -+ * 4. interleave 3 and 5 -+ * -+ * ID | Length | Live range | access mask | target id | reswizzle -+ * ================================================================ -+ * 1 - - x___ 2 ____ -+ * 2 - - x___ 3 _x__ -+ * 3 8 3-40 xy__ 0 ____ -+ * 4 - - xy__ 3 ____ -+ * 5 - - xy__ 3 __xy -+ * -+ * 5. finalize remapping -+ * (Array 1 has been merged with 2 that was later interleaved, so -+ * the reswizzeling must be propagated.) -+ * -+ * ID | Length | Live range | new access mask | target id | reswizzle -+ * ================================================================ -+ * 1 - - _y__ 3 _x__ -+ * 2 - - _y__ 3 _x__ -+ * 3 8 3-40 xy__ 0 ____ -+ * 4 - - xy__ 3 ____ -+ * 5 - - __zw 3 __xy -+ * -+*/ -+ - #include "program/prog_instruction.h" - #include "util/u_math.h" - #include <ostream> -@@ -37,6 +140,14 @@ using std::unique_ptr; - using std::make_unique; - #endif - -+#define ARRAY_MERGE_DEBUG 0 -+ -+#if ARRAY_MERGE_DEBUG -+#define ARRAY_MERGE_DUMP(x) do std::cerr << x; while (0) -+#else -+#define ARRAY_MERGE_DUMP(x) -+#endif -+ - - array_live_range::array_live_range(): - id(0), -@@ -348,5 +459,277 @@ bool operator == (const array_remapping& lhs, const array_remapping& rhs) - return true; - } - --/* end namespace tgsi_array_merge */ -+static -+bool sort_by_begin(const array_live_range& lhs, const array_live_range& rhs) { -+ return lhs.begin() < rhs.begin(); -+} -+ -+/* Helper class to evaluate merging and interleaving of arrays */ -+class array_merge_evaluator { -+public: -+ typedef int (*array_merger)(array_live_range& range_1, -+ array_live_range& range_2, -+ array_remapping *_remapping); -+ -+ array_merge_evaluator(int _narrays, array_live_range *_ranges, -+ array_remapping *_remapping); -+ -+ /** Run the merge strategy on all arrays -+ * @returns number of successful merges -+ */ -+ int run(array_merger merger, bool always_restart); -+ -+private: -+ int narrays; -+ array_live_range *ranges; -+ array_remapping *remapping; -+}; -+ -+/** Execute the live range merge */ -+static -+int merge_live_range(array_live_range& range_1, array_live_range& range_2, -+ array_remapping *remapping) -+{ -+ if (range_2.time_doesnt_overlap(range_1)) { -+ if (range_1.array_length() < range_2.array_length()) -+ std::swap(range_2, range_1); -+ -+ ARRAY_MERGE_DUMP("merge " << range_2 << " into " << range_1 << "\n"); -+ -+ remapping[range_2.array_id()] = array_remapping(range_1.array_id(), -+ range_1.access_mask()); -+ range_1.merge_live_range(range_2); -+ return 1; -+ } -+ return 0; -+} -+ -+/** Merge arrays that have non-overlapping live ranges -+ * and equal access masks. -+ */ -+static -+int merge_live_range_equal_swizzle(array_live_range& range_1, -+ array_live_range& range_2, -+ array_remapping *remapping) -+{ -+ if (range_1.access_mask() == range_2.access_mask()) -+ return merge_live_range(range_1, range_2, remapping); -+ return 0; -+} -+ -+static -+int array_interleave(array_live_range& range_1, array_live_range& range_2, -+ array_remapping *remapping) -+{ -+ if ((range_2.used_components() + range_1.used_components() > 4) || -+ range_1.time_doesnt_overlap(range_2)) -+ return 0; -+ -+ if (range_1.array_length() < range_2.array_length()) -+ std::swap(range_2, range_1); -+ -+ ARRAY_MERGE_DUMP("Interleave " << range_2 << " into " << range_1 << "\n"); -+ remapping[range_2.array_id()] = array_remapping(range_1.array_id(), -+ range_1.access_mask(), -+ range_2.access_mask()); -+ range_1.merge_live_range(range_2); -+ range_1.set_access_mask(remapping[range_2.array_id()].combined_access_mask()); -+ ARRAY_MERGE_DUMP(" Interleaved is " << range_1 << "\n"); -+ return 1; -+} -+ -+/* Implementation of the helper classes follows */ -+array_merge_evaluator::array_merge_evaluator(int _narrays, -+ array_live_range *_ranges, -+ array_remapping *_remapping): -+ narrays(_narrays), -+ ranges(_ranges), -+ remapping(_remapping) -+{ -+} -+ -+int array_merge_evaluator::run(array_merger merger, bool always_restart) -+{ -+ int remaps = 0; -+ -+ for (int i = 0; i < narrays; ++i) { -+ -+ if (remapping[ranges[i].array_id()].is_valid()) -+ continue; -+ -+ for (int j = i + 1; j < narrays; ++j) { -+ -+ if (!remapping[ranges[j].array_id()].is_valid()) { -+ int n = merger(ranges[i], ranges[j], remapping); -+ if (always_restart && n) -+ return n; -+ remaps += n; -+ } -+ -+ } -+ } -+ return remaps; -+} -+ -+/* Estimate the array merging: First in a loop, arrays with equal access mask -+ * are merged then interleave arrays that together use at most four components, -+ * and finally arrays are merged regardless of access mask. -+ * @param[in] narrays number of arrays -+ * @param[in,out] alt array life times, the merge target life time will be -+ * updated with the new life time. -+ * @param[in,out] remapping track the array index remapping and reswizzeling. -+ * @returns number of merged arrays -+ */ -+bool get_array_remapping(int narrays, array_live_range *ranges, -+ array_remapping *remapping) -+{ -+ int total_remapped = 0; -+ int n_remapped; -+ -+ /* Sort by "begin of live range" so that we don't have to restart searching -+ * after every merge. -+ */ -+ std::sort(ranges, ranges + narrays, sort_by_begin); -+ array_merge_evaluator merge_evaluator(narrays, ranges, remapping); -+ -+ do { -+ -+ n_remapped = merge_evaluator.run(merge_live_range_equal_swizzle, false); -+ -+ /* try only one array interleave, if successful, another -+ * live_range merge is tried. The test MergeAndInterleave5 -+ * (mesa/st/tests/test_glsl_to_tgsi_array_merge.cpp) -+ * shows how this can result in more arrays being merged. -+ */ -+ n_remapped += merge_evaluator.run(array_interleave, true); -+ total_remapped += n_remapped; -+ -+ ARRAY_MERGE_DUMP("Remapped " << n_remapped << " arrays\n"); -+ } while (n_remapped > 0); -+ -+ total_remapped += merge_evaluator.run(merge_live_range, false); -+ ARRAY_MERGE_DUMP("Remapped a total of " << total_remapped << " arrays\n"); -+ -+ for (int i = 1; i <= narrays; ++i) { -+ if (remapping[i].is_valid()) { -+ remapping[i].finalize_mappings(remapping); -+ } -+ } -+ return total_remapped > 0; -+} -+ -+/* Remap the arrays in a TGSI program according to the given mapping. -+ * @param narrays number of arrays -+ * @param array_sizes array of arrays sizes -+ * @param map the array remapping information -+ * @param instructions TGSI program -+ * @returns number of arrays after remapping -+ */ -+int remap_arrays(int narrays, unsigned *array_sizes, -+ exec_list *instructions, -+ array_remapping *map) -+{ -+ /* re-calculate arrays */ -+#if __cplusplus < 201402L -+ int *idx_map = new int[narrays + 1]; -+ unsigned *old_sizes = new unsigned[narrays + 1]; -+#else -+ unique_ptr<int[]> idx_map = make_unique<int[]>(narrays + 1); -+ unique_ptr<unsigned[]> old_sizes = make_unique<unsigned[]>(narrays + 1); -+#endif -+ -+ memcpy(&old_sizes[0], &array_sizes[0], sizeof(unsigned) * narrays); -+ -+ /* Evaluate mapping for the array indices and update array sizes */ -+ int new_narrays = 0; -+ for (int i = 1; i <= narrays; ++i) { -+ if (!map[i].is_valid()) { -+ ++new_narrays; -+ idx_map[i] = new_narrays; -+ array_sizes[new_narrays] = old_sizes[i]; -+ } -+ } -+ -+ /* Map the array ids of merge arrays. */ -+ for (int i = 1; i <= narrays; ++i) { -+ if (map[i].is_valid()) { -+ map[i].set_target_id(idx_map[map[i].target_array_id()]); -+ } -+ } -+ -+ /* Map the array ids of merge targets that got only renumbered. */ -+ for (int i = 1; i <= narrays; ++i) { -+ if (!map[i].is_valid()) { -+ map[i].set_target_id(idx_map[i]); -+ } -+ } -+ -+ /* Update the array ids and swizzles in the registers */ -+ foreach_in_list(glsl_to_tgsi_instruction, inst, instructions) { -+ for (unsigned j = 0; j < num_inst_src_regs(inst); j++) { -+ st_src_reg& src = inst->src[j]; -+ if (src.file == PROGRAM_ARRAY && src.array_id > 0) { -+ array_remapping& m = map[src.array_id]; -+ if (m.is_valid()) { -+ src.array_id = m.target_array_id(); -+ src.swizzle = m.map_swizzles(src.swizzle); -+ } -+ } -+ } -+ for (unsigned j = 0; j < inst->tex_offset_num_offset; j++) { -+ st_src_reg& src = inst->tex_offsets[j]; -+ if (src.file == PROGRAM_ARRAY && src.array_id > 0) { -+ array_remapping& m = map[src.array_id]; -+ if (m.is_valid()) { -+ src.array_id = m.target_array_id(); -+ src.swizzle = m.map_swizzles(src.swizzle); -+ } -+ } -+ } -+ for (unsigned j = 0; j < num_inst_dst_regs(inst); j++) { -+ st_dst_reg& dst = inst->dst[j]; -+ if (dst.file == PROGRAM_ARRAY && dst.array_id > 0) { -+ array_remapping& m = map[dst.array_id]; -+ if (m.is_valid()) { -+ assert(j == 0 && -+ "remapping can only be done for single dest ops"); -+ dst.array_id = m.target_array_id(); -+ dst.writemask = m.map_writemask(dst.writemask); -+ -+ /* If the target component is moved, then the source swizzles -+ * must be moved accordingly. -+ */ -+ for (unsigned j = 0; j < num_inst_src_regs(inst); j++) { -+ st_src_reg& src = inst->src[j]; -+ src.swizzle = m.move_read_swizzles(src.swizzle); -+ } -+ } -+ } -+ } -+ } -+ -+#if __cplusplus < 201402L -+ delete[] old_sizes; -+ delete[] idx_map; -+#endif -+ -+ return new_narrays; -+} -+ - } -+ -+using namespace tgsi_array_merge; -+ -+int merge_arrays(int narrays, -+ unsigned *array_sizes, -+ exec_list *instructions, -+ struct array_live_range *arr_live_ranges) -+{ -+ array_remapping *map= new array_remapping[narrays + 1]; -+ -+ if (get_array_remapping(narrays, arr_live_ranges, map)) -+ narrays = remap_arrays(narrays, array_sizes, instructions, map); -+ -+ delete[] map; -+ return narrays; -+} -\ No newline at end of file -diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi_array_merge.h b/src/mesa/state_tracker/st_glsl_to_tgsi_array_merge.h -index b9fb498..44a4027 100644 ---- a/src/mesa/state_tracker/st_glsl_to_tgsi_array_merge.h -+++ b/src/mesa/state_tracker/st_glsl_to_tgsi_array_merge.h -@@ -158,5 +158,29 @@ std::ostream& operator << (std::ostream& os, const array_remapping& am) - return os; - } - -+/* Apply the array remapping (internal use, exposed here for testing) */ -+ bool get_array_remapping(int narrays, array_live_range *array_live_ranges, -+ array_remapping *remapping); -+ -+/* Apply the array remapping (internal use, exposed here for testing) */ -+int remap_arrays(int narrays, unsigned *array_sizes, -+ exec_list *instructions, -+ array_remapping *map); -+ - } --#endif -+ -+/** Remap the array access to finalize the array merging and interleaving. -+ * @param[in] narrays number of input arrays, -+ * @param[in,out] array_sizes length array of input arrays, on output the -+ * array sizes will be updated according to the remapping, -+ * @param[in,out] instructions TGSI program, on output the arrays access is -+ * remapped to the new array layout, -+ * @param[in] array_live_ranges live ranges and access information of the -+ * arrays. -+ * @returns number of remaining arrays -+ */ -+int merge_arrays(int narrays, -+ unsigned *array_sizes, -+ exec_list *instructions, -+ struct array_live_range *arr_live_ranges); -+#endif -\ No newline at end of file --- -2.7.4 - diff --git a/common/recipes-graphics/mesa/mesa/0007-mesa-st-tests-Add-unit-tests-for-array-merge-helper-.patch b/common/recipes-graphics/mesa/mesa/0007-mesa-st-tests-Add-unit-tests-for-array-merge-helper-.patch deleted file mode 100644 index 368938d9..00000000 --- a/common/recipes-graphics/mesa/mesa/0007-mesa-st-tests-Add-unit-tests-for-array-merge-helper-.patch +++ /dev/null @@ -1,384 +0,0 @@ -From 16c03290ef5f59e722f610f8914edcb98b1573b6 Mon Sep 17 00:00:00 2001 -From: Gert Wollny <gw.fossdev@gmail.com> -Date: Fri, 9 Feb 2018 11:11:11 +0100 -Subject: [PATCH 07/13] mesa/st/tests: Add unit tests for array merge helper - classes. - -Signed-off-by: Gert Wollny <gw.fossdev@gmail.com> ---- - src/mesa/state_tracker/tests/Makefile.am | 20 +- - src/mesa/state_tracker/tests/st_tests_common.h | 7 +- - .../tests/test_glsl_to_tgsi_array_merge.cpp | 296 +++++++++++++++++++++ - 3 files changed, 317 insertions(+), 6 deletions(-) - create mode 100644 src/mesa/state_tracker/tests/test_glsl_to_tgsi_array_merge.cpp - -diff --git a/src/mesa/state_tracker/tests/Makefile.am b/src/mesa/state_tracker/tests/Makefile.am -index cbb7447..160f85a 100644 ---- a/src/mesa/state_tracker/tests/Makefile.am -+++ b/src/mesa/state_tracker/tests/Makefile.am -@@ -17,8 +17,10 @@ AM_CPPFLAGS = \ - - if HAVE_STD_CXX11 - if HAVE_SHARED_GLAPI --TESTS = st-renumerate-test --check_PROGRAMS = st-renumerate-test -+TESTS = st-renumerate-test \ -+ st-array-merge-test -+check_PROGRAMS = st-renumerate-test \ -+ st-array-merge-test - - check_LIBRARIES = libmesa-st-tests-common.a - endif -@@ -34,7 +36,13 @@ st_renumerate_test_SOURCES = \ - st_renumerate_test_LDFLAGS = \ - $(LLVM_LDFLAGS) - --st_renumerate_test_LDADD = \ -+st_array_merge_test_SOURCES = \ -+ test_glsl_to_tgsi_array_merge.cpp -+ -+st_array_merge_test_LDFLAGS = \ -+ $(LLVM_LDFLAGS) -+ -+st_common_LDADD = \ - libmesa-st-tests-common.a \ - $(top_builddir)/src/mesa/libmesagallium.la \ - $(top_builddir)/src/mapi/shared-glapi/libglapi.la \ -@@ -43,3 +51,9 @@ st_renumerate_test_LDADD = \ - $(top_builddir)/src/gtest/libgtest.la \ - $(GALLIUM_COMMON_LIB_DEPS) \ - $(LLVM_LIBS) -+ -+st_renumerate_test_LDADD = \ -+ $(st_common_LDADD) -+ -+st_array_merge_test_LDADD = \ -+ $(st_common_LDADD) -diff --git a/src/mesa/state_tracker/tests/st_tests_common.h b/src/mesa/state_tracker/tests/st_tests_common.h -index 0fcec62..98d227a 100644 ---- a/src/mesa/state_tracker/tests/st_tests_common.h -+++ b/src/mesa/state_tracker/tests/st_tests_common.h -@@ -24,14 +24,15 @@ - #ifndef mesa_st_tests_h - #define mesa_st_tests_h - --#include <state_tracker/st_glsl_to_tgsi_temprename.h> --#include <gtest/gtest.h> -+#include "state_tracker/st_glsl_to_tgsi_temprename.h" -+#include "state_tracker/st_glsl_to_tgsi_array_merge.h" -+#include "gtest/gtest.h" -+ - #include <utility> - - #define MP(X, W) std::make_pair(X, W) - #define MT(X,Y,Z) std::make_tuple(X,Y,Z) - -- - /* Use this to make the compiler pick the swizzle constructor below */ - struct SWZ {}; - -diff --git a/src/mesa/state_tracker/tests/test_glsl_to_tgsi_array_merge.cpp b/src/mesa/state_tracker/tests/test_glsl_to_tgsi_array_merge.cpp -new file mode 100644 -index 0000000..d8a5e7f ---- /dev/null -+++ b/src/mesa/state_tracker/tests/test_glsl_to_tgsi_array_merge.cpp -@@ -0,0 +1,296 @@ -+/* -+ * Copyright © 2017 Gert Wollny -+ * -+ * Permission is hereby granted, free of charge, to any person obtaining a -+ * copy of this software and 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 "st_tests_common.h" -+ -+#include "tgsi/tgsi_ureg.h" -+#include "tgsi/tgsi_info.h" -+#include "mesa/program/prog_instruction.h" -+#include "gtest/gtest.h" -+ -+#include <utility> -+#include <algorithm> -+#include <iostream> -+ -+using std::vector; -+ -+using namespace tgsi_array_merge; -+using SwizzleRemapTest=testing::Test; -+ -+TEST_F(SwizzleRemapTest, ArrayRemappingBase_x_x) -+{ -+ array_remapping map1(10, 1, 1); -+ ASSERT_EQ(map1.target_array_id(), 10u); -+ ASSERT_EQ(map1.map_writemask(1), 2); -+ ASSERT_EQ(map1.map_one_swizzle(0), 1); -+ ASSERT_EQ(map1.combined_access_mask(), 3); -+} -+ -+TEST_F(SwizzleRemapTest, ArrayRemappingBase_xy_x) -+{ -+ array_remapping map1(5, 3, 1); -+ ASSERT_EQ(map1.target_array_id(), 5u); -+ ASSERT_EQ(map1.map_writemask(1), 4); -+ ASSERT_EQ(map1.map_one_swizzle(0), 2); -+ ASSERT_EQ(map1.combined_access_mask(), 0x7); -+} -+ -+TEST_F(SwizzleRemapTest, ArrayRemappingBase_no_reswizzle) -+{ -+ array_remapping map1(5, 3); -+ ASSERT_EQ(map1.target_array_id(), 5u); -+ for (int i = 1; i < 16; ++i) -+ ASSERT_EQ(map1.map_writemask(i), i); -+ -+ for (int i = 0; i < 4; ++i) -+ ASSERT_EQ(map1.map_one_swizzle(i), i); -+} -+ -+TEST_F(SwizzleRemapTest, ArrayRemappingBase_xyz_x) -+{ -+ array_remapping map1(5, 7, 1); -+ ASSERT_EQ(map1.target_array_id(), 5u); -+ ASSERT_EQ(map1.map_writemask(1), 8); -+ ASSERT_EQ(map1.map_one_swizzle(0), 3); -+ ASSERT_EQ(map1.combined_access_mask(), 0xF); -+} -+ -+TEST_F(SwizzleRemapTest, ArrayRemappingBase_xy_xy) -+{ -+ array_remapping map1(5, 3, 3); -+ ASSERT_EQ(map1.target_array_id(), 5u); -+ ASSERT_EQ(map1.map_writemask(1), 4); -+ ASSERT_EQ(map1.map_writemask(2), 8); -+ ASSERT_EQ(map1.map_writemask(3), 0xC); -+ ASSERT_EQ(map1.map_one_swizzle(0), 2); -+ ASSERT_EQ(map1.map_one_swizzle(1), 3); -+ ASSERT_EQ(map1.combined_access_mask(), 0xF); -+} -+ -+TEST_F(SwizzleRemapTest, ArrayRemappingBase_xz_xw) -+{ -+ array_remapping map1(5, 5, 9); -+ std::cerr << map1 << "\n"; -+ ASSERT_EQ(map1.target_array_id(), 5u); -+ ASSERT_EQ(map1.map_writemask(1), 2); -+ ASSERT_EQ(map1.map_writemask(8), 8); -+ ASSERT_EQ(map1.map_writemask(9), 0xA); -+ ASSERT_EQ(map1.map_one_swizzle(0), 1); -+ ASSERT_EQ(map1.map_one_swizzle(3), 3); -+ ASSERT_EQ(map1.combined_access_mask(), 0xF); -+} -+ -+using ArrayMergeTest=testing::Test; -+ -+TEST_F(ArrayMergeTest, ArrayMergeTwoSwizzles) -+{ -+ vector<array_live_range> alt = { -+ {1, 4, 1, 5, WRITEMASK_X}, -+ {2, 4, 2, 5, WRITEMASK_X}, -+ }; -+ -+ vector<array_remapping> expect = { -+ {}, -+ {1, WRITEMASK_X, WRITEMASK_X}, -+ }; -+ -+ vector<array_remapping> result(alt.size() + 1); -+ -+ get_array_remapping(2, &alt[0], &result[0]); -+ -+ EXPECT_EQ(result[1], expect[0]); -+ EXPECT_EQ(result[2], expect[1]); -+ -+} -+ -+TEST_F(ArrayMergeTest, ArrayMergeFourSwizzles) -+{ -+ vector<array_live_range> alt = { -+ {1, 8, 1, 7, WRITEMASK_X}, -+ {2, 7, 2, 7, WRITEMASK_X}, -+ {3, 6, 3, 7, WRITEMASK_X}, -+ {4, 5, 4, 7, WRITEMASK_X}, -+ }; -+ -+ vector<array_remapping> expect = { -+ {}, -+ {1, WRITEMASK_X, WRITEMASK_X}, -+ {1, WRITEMASK_XY, WRITEMASK_X}, -+ {1, WRITEMASK_XYZ, WRITEMASK_X}, -+ }; -+ -+ vector<array_remapping> result(alt.size() + 1); -+ -+ get_array_remapping(4, &alt[0], &result[0]); -+ -+ EXPECT_EQ(result[1], expect[0]); -+ EXPECT_EQ(result[2], expect[1]); -+ EXPECT_EQ(result[3], expect[2]); -+ EXPECT_EQ(result[4], expect[3]); -+ -+} -+ -+ -+TEST_F(ArrayMergeTest, SimpleChainMerge) -+{ -+ vector<array_live_range> input = { -+ {1, 3, 1, 5, WRITEMASK_XYZW}, -+ {2, 2, 6, 7, WRITEMASK_XYZW}, -+ }; -+ -+ vector<array_remapping> expect = { -+ {}, -+ {1, WRITEMASK_XYZW}, -+ }; -+ -+ vector<array_remapping> result(3); -+ get_array_remapping(2, &input[0], &result[0]); -+ -+ for (unsigned i = 0; i < expect.size(); ++i) -+ EXPECT_EQ(result[i + 1], expect[i]); -+} -+ -+TEST_F(ArrayMergeTest, MergeAndInterleave) -+{ -+ vector<array_live_range> input = { -+ {1, 5, 1, 5, WRITEMASK_X}, -+ {2, 4, 6, 7, WRITEMASK_X}, -+ {3, 3, 1, 5, WRITEMASK_X}, -+ {4, 2, 6, 7, WRITEMASK_X}, -+ }; -+ -+ vector<array_remapping> expect = { -+ {}, -+ {1, WRITEMASK_X}, -+ {1, WRITEMASK_X, WRITEMASK_X}, -+ {1, WRITEMASK_X, WRITEMASK_X} -+ }; -+ vector<array_remapping> result(input.size() + 1); -+ get_array_remapping(input.size(), &input[0], &result[0]); -+ -+ for (unsigned i = 0; i < expect.size(); ++i) -+ EXPECT_EQ(result[i + 1], expect[i]); -+} -+ -+TEST_F(ArrayMergeTest, MergeAndInterleave2) -+{ -+ vector<array_live_range> input = { -+ {1, 5, 1, 5, WRITEMASK_X}, -+ {2, 4, 6, 7, WRITEMASK_X}, -+ {3, 3, 1, 8, WRITEMASK_XY}, -+ {4, 2, 6, 7, WRITEMASK_X}, -+ }; -+ -+ vector<array_remapping> expect = { -+ {}, -+ {1, WRITEMASK_X}, -+ {1, WRITEMASK_X, WRITEMASK_XY}, -+ {1, WRITEMASK_XYZ, WRITEMASK_X} -+ }; -+ vector<array_remapping> result(input.size() + 1); -+ get_array_remapping(input.size(), &input[0], &result[0]); -+ -+ for (unsigned i = 0; i < expect.size(); ++i) -+ EXPECT_EQ(result[i + 1], expect[i]); -+} -+ -+ -+TEST_F(ArrayMergeTest, MergeAndInterleave3) -+{ -+ vector<array_live_range> input = { -+ {1, 5, 1, 5, WRITEMASK_X}, -+ {2, 4, 6, 7, WRITEMASK_XY}, -+ {3, 3, 1, 5, WRITEMASK_X} -+ }; -+ -+ vector<array_remapping> expect = { -+ {}, -+ {1, WRITEMASK_X}, -+ {1, WRITEMASK_X, WRITEMASK_X} -+ }; -+ vector<array_remapping> result(input.size() + 1); -+ get_array_remapping(input.size(), &input[0], &result[0]); -+ -+ for (unsigned i = 0; i < expect.size(); ++i) -+ EXPECT_EQ(result[i + 1], expect[i]); -+} -+ -+TEST_F(ArrayMergeTest, MergeAndInterleave4) -+{ -+ vector<array_live_range> input = { -+ {1, 7, 1, 5, WRITEMASK_X}, -+ {2, 6, 6, 7, WRITEMASK_XY}, -+ {3, 5, 1, 5, WRITEMASK_X}, -+ {4, 4, 8, 9, WRITEMASK_XYZ}, -+ {5, 3, 8, 9, WRITEMASK_W}, -+ {6, 2, 10, 11, WRITEMASK_XYZW}, -+ }; -+ -+ vector<array_remapping> expect = { -+ {}, -+ {1, WRITEMASK_XY}, -+ {1, WRITEMASK_X, WRITEMASK_X}, -+ {1, WRITEMASK_XYZ}, -+ {1, WRITEMASK_XYZ, WRITEMASK_W}, -+ {1, WRITEMASK_XYZW} -+ }; -+ vector<array_remapping> result(input.size() + 1); -+ get_array_remapping(input.size(), &input[0], &result[0]); -+ -+ EXPECT_EQ(result[1], expect[0]); -+ EXPECT_EQ(result[2], expect[1]); -+ EXPECT_EQ(result[3], expect[2]); -+ EXPECT_EQ(result[4], expect[3]); -+ EXPECT_EQ(result[5], expect[4]); -+ EXPECT_EQ(result[6], expect[5]); -+ -+} -+ -+TEST_F(ArrayMergeTest, MergeAndInterleave5) -+{ -+ vector<array_live_range> input = { -+ {1, 7, 1, 5, WRITEMASK_X}, -+ {2, 6, 1, 3, WRITEMASK_X}, -+ {3, 5, 4, 5, WRITEMASK_X}, -+ {4, 4, 6, 10, WRITEMASK_XY}, -+ {5, 8, 1, 10, WRITEMASK_XY} -+ }; -+ -+ vector<array_remapping> expect = { -+ {5, WRITEMASK_XY, WRITEMASK_XY}, /* expect xy because of interleaving */ -+ {5, WRITEMASK_XYZ, WRITEMASK_X}, -+ {5, WRITEMASK_XYZ, WRITEMASK_X}, -+ {5, WRITEMASK_XY, WRITEMASK_XY}, -+ {} -+ }; -+ vector<array_remapping> result(input.size() + 1); -+ get_array_remapping(input.size(), &input[0], &result[0]); -+ -+ EXPECT_EQ(result[1], expect[0]); -+ EXPECT_EQ(result[2], expect[1]); -+ EXPECT_EQ(result[3], expect[2]); -+ EXPECT_EQ(result[4], expect[3]); -+ EXPECT_EQ(result[5], expect[4]); -+ -+} --- -2.7.4 - diff --git a/common/recipes-graphics/mesa/mesa/0008-mesa-st-glsl_to_tgsi-refactor-access_record-and-its-.patch b/common/recipes-graphics/mesa/mesa/0008-mesa-st-glsl_to_tgsi-refactor-access_record-and-its-.patch deleted file mode 100644 index daf71f60..00000000 --- a/common/recipes-graphics/mesa/mesa/0008-mesa-st-glsl_to_tgsi-refactor-access_record-and-its-.patch +++ /dev/null @@ -1,213 +0,0 @@ -From 3326bd12764f7921d34f50980ba34230a05e212f Mon Sep 17 00:00:00 2001 -From: Gert Wollny <gw.fossdev@gmail.com> -Date: Fri, 9 Feb 2018 11:11:12 +0100 -Subject: [PATCH 08/13] mesa/st/glsl_to_tgsi: refactor access_record and its - use - -* rename access_record to register_merge_record because the name is more - appropriate and we need to distinguish from the array access introduced - later. -* rename member variable acc to temp_acc -* make comparison operator in register_merge_record const - -Signed-off-by: Gert Wollny <gw.fossdev@gmail.com> ---- - .../state_tracker/st_glsl_to_tgsi_temprename.cpp | 61 +++++++++++----------- - .../state_tracker/st_glsl_to_tgsi_temprename.h | 2 +- - 2 files changed, 32 insertions(+), 31 deletions(-) - -diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.cpp -index 73f52cf..ae3ea17 100644 ---- a/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.cpp -+++ b/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.cpp -@@ -884,14 +884,14 @@ register_live_range temp_comp_access::get_required_live_range() - - /* Helper class for sorting and searching the registers based - * on live ranges. */ --class access_record { -+class register_merge_record { - public: - int begin; - int end; - int reg; - bool erase; - -- bool operator < (const access_record& rhs) const { -+ bool operator < (const register_merge_record& rhs) const { - return begin < rhs.begin; - } - }; -@@ -904,30 +904,30 @@ public: - void record_read(const st_src_reg& src, int line, prog_scope *scope); - void record_write(const st_dst_reg& src, int line, prog_scope *scope); - -- void get_required_live_ranges(register_live_range *live_ranges); -+ void get_required_live_ranges(register_live_range *register_live_ranges); - private: - - int ntemps; -- temp_access *acc; -+ temp_access *temp_acc; - - }; - - access_recorder::access_recorder(int _ntemps): - ntemps(_ntemps) - { -- acc = new temp_access[ntemps]; -+ temp_acc = new temp_access[ntemps]; - } - - access_recorder::~access_recorder() - { -- delete[] acc; -+ delete[] temp_acc; - } - - void access_recorder::record_read(const st_src_reg& src, int line, - prog_scope *scope) - { - if (src.file == PROGRAM_TEMPORARY) -- acc[src.index].record_read(line, scope, src.swizzle); -+ temp_acc[src.index].record_read(line, scope, src.swizzle); - - if (src.reladdr) - record_read(*src.reladdr, line, scope); -@@ -939,7 +939,7 @@ void access_recorder::record_write(const st_dst_reg& dst, int line, - prog_scope *scope) - { - if (dst.file == PROGRAM_TEMPORARY) -- acc[dst.index].record_write(line, scope, dst.writemask); -+ temp_acc[dst.index].record_write(line, scope, dst.writemask); - - if (dst.reladdr) - record_read(*dst.reladdr, line, scope); -@@ -947,14 +947,14 @@ void access_recorder::record_write(const st_dst_reg& dst, int line, - record_read(*dst.reladdr2, line, scope); - } - --void access_recorder::get_required_live_ranges(struct register_live_range *live_ranges) -+void access_recorder::get_required_live_ranges(struct register_live_range *register_live_ranges) - { -- RENAME_DEBUG(debug_log << "=========live_ranges ==============\n"); -+ RENAME_DEBUG(debug_log << "== register live ranges ==========\n"); - for(int i = 0; i < ntemps; ++i) { - RENAME_DEBUG(debug_log<< setw(4) << i); -- live_ranges[i] = acc[i].get_required_live_range(); -- RENAME_DEBUG(debug_log << ": [" <<live_ranges[i].begin << ", " -- <<live_ranges[i].end << "]\n"); -+ register_live_ranges[i] = temp_acc[i].get_required_live_range(); -+ RENAME_DEBUG(debug_log << ": [" <<register_live_ranges[i].begin << ", " -+ <<register_live_ranges[i].end << "]\n"); - } - RENAME_DEBUG(debug_log << "==================================\n\n"); - } -@@ -972,7 +972,7 @@ static void dump_instruction(ostream& os, int line, prog_scope *scope, - */ - bool - get_temp_registers_required_live_ranges(void *mem_ctx, exec_list *instructions, -- int ntemps, struct register_live_range *live_ranges) -+ int ntemps, struct register_live_range *register_live_ranges) - { - int line = 0; - int loop_id = 1; -@@ -1139,7 +1139,7 @@ get_temp_registers_required_live_ranges(void *mem_ctx, exec_list *instructions, - if (cur_scope->end() < 0) - cur_scope->set_end(line - 1); - -- access.get_required_live_ranges(live_ranges); -+ access.get_required_live_ranges(register_live_ranges); - return true; - } - -@@ -1149,14 +1149,14 @@ get_temp_registers_required_live_ranges(void *mem_ctx, exec_list *instructions, - * end points at the element past the end of the search range, and - * the array comprising [start, end) must be sorted in ascending order. - */ --static access_record* --find_next_rename(access_record* start, access_record* end, int bound) -+static register_merge_record* -+find_next_rename(register_merge_record* start, register_merge_record* end, int bound) - { - int delta = (end - start); - - while (delta > 0) { - int half = delta >> 1; -- access_record* middle = start + half; -+ register_merge_record* middle = start + half; - - if (bound <= middle->begin) { - delta = half; -@@ -1171,9 +1171,9 @@ find_next_rename(access_record* start, access_record* end, int bound) - } - - #ifndef USE_STL_SORT --static int access_record_compare (const void *a, const void *b) { -- const access_record *aa = static_cast<const access_record*>(a); -- const access_record *bb = static_cast<const access_record*>(b); -+static int register_merge_record_compare (const void *a, const void *b) { -+ const register_merge_record *aa = static_cast<const register_merge_record*>(a); -+ const register_merge_record *bb = static_cast<const register_merge_record*>(b); - return aa->begin < bb->begin ? -1 : (aa->begin > bb->begin ? 1 : 0); - } - #endif -@@ -1184,7 +1184,7 @@ void get_temp_registers_remapping(void *mem_ctx, int ntemps, - const struct register_live_range *live_ranges, - struct rename_reg_pair *result) - { -- access_record *reg_access = ralloc_array(mem_ctx, access_record, ntemps); -+ register_merge_record *reg_access = ralloc_array(mem_ctx, register_merge_record, ntemps); - - int used_temps = 0; - for (int i = 0; i < ntemps; ++i) { -@@ -1200,16 +1200,17 @@ void get_temp_registers_remapping(void *mem_ctx, int ntemps, - #ifdef USE_STL_SORT - std::sort(reg_access, reg_access + used_temps); - #else -- std::qsort(reg_access, used_temps, sizeof(access_record), access_record_compare); -+ std::qsort(reg_access, used_temps, sizeof(register_merge_record), -+ register_merge_record_compare); - #endif - -- access_record *trgt = reg_access; -- access_record *reg_access_end = reg_access + used_temps; -- access_record *first_erase = reg_access_end; -- access_record *search_start = trgt + 1; -+ register_merge_record *trgt = reg_access; -+ register_merge_record *reg_access_end = reg_access + used_temps; -+ register_merge_record *first_erase = reg_access_end; -+ register_merge_record *search_start = trgt + 1; - - while (trgt != reg_access_end) { -- access_record *src = find_next_rename(search_start, reg_access_end, -+ register_merge_record *src = find_next_rename(search_start, reg_access_end, - trgt->end); - if (src != reg_access_end) { - result[src->reg].new_reg = trgt->reg; -@@ -1228,8 +1229,8 @@ void get_temp_registers_remapping(void *mem_ctx, int ntemps, - /* Moving to the next target register it is time to remove - * the already merged registers from the search range */ - if (first_erase != reg_access_end) { -- access_record *outp = first_erase; -- access_record *inp = first_erase + 1; -+ register_merge_record *outp = first_erase; -+ register_merge_record *inp = first_erase + 1; - - while (inp != reg_access_end) { - if (!inp->erase) -diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.h b/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.h -index 375d5b8..86c2158 100644 ---- a/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.h -+++ b/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.h -@@ -55,7 +55,7 @@ struct register_live_range { - */ - bool - get_temp_registers_required_live_ranges(void *mem_ctx, exec_list *instructions, -- int ntemps, struct register_live_range *live_ranges); -+ int ntemps, struct register_live_range *register_live_ranges); - - /** Estimate the merge remapping of the registers. - * @param[in] mem_ctx a memory context that can be used with the ralloc_* --- -2.7.4 - diff --git a/common/recipes-graphics/mesa/mesa/0009-mesa-st-glsl_to_tgsi-move-evaluation-of-read-mask-up.patch b/common/recipes-graphics/mesa/mesa/0009-mesa-st-glsl_to_tgsi-move-evaluation-of-read-mask-up.patch deleted file mode 100644 index 1dd9e01c..00000000 --- a/common/recipes-graphics/mesa/mesa/0009-mesa-st-glsl_to_tgsi-move-evaluation-of-read-mask-up.patch +++ /dev/null @@ -1,53 +0,0 @@ -From 34cd2bfe90fc659491ec3c89d9bf871615b23192 Mon Sep 17 00:00:00 2001 -From: Gert Wollny <gw.fossdev@gmail.com> -Date: Fri, 9 Feb 2018 11:11:13 +0100 -Subject: [PATCH 09/13] mesa/st/glsl_to_tgsi: move evaluation of read mask up - in the call hierarchy - -In preparation of the array live range tracking the evaluation of the read -mask is moved out the register live range tracking to the enclosing call -of the generalized read access tracking. - -Signed-off-by: Gert Wollny <gw.fossdev@gmail.com> ---- - src/mesa/state_tracker/st_glsl_to_tgsi_temprename.cpp | 15 ++++++++------- - 1 file changed, 8 insertions(+), 7 deletions(-) - -diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.cpp -index ae3ea17..4734a98 100644 ---- a/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.cpp -+++ b/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.cpp -@@ -494,13 +494,8 @@ void temp_access::record_write(int line, prog_scope *scope, int writemask) - comp[3].record_write(line, scope); - } - --void temp_access::record_read(int line, prog_scope *scope, int swizzle) -+void temp_access::record_read(int line, prog_scope *scope, int readmask) - { -- int readmask = 0; -- for (int idx = 0; idx < 4; ++idx) { -- int swz = GET_SWZ(swizzle, idx); -- readmask |= (1 << swz) & 0xF; -- } - update_access_mask(readmask); - - if (readmask & WRITEMASK_X) -@@ -926,8 +921,14 @@ access_recorder::~access_recorder() - void access_recorder::record_read(const st_src_reg& src, int line, - prog_scope *scope) - { -+ int readmask = 0; -+ for (int idx = 0; idx < 4; ++idx) { -+ int swz = GET_SWZ(src.swizzle, idx); -+ readmask |= (1 << swz) & 0xF; -+ } -+ - if (src.file == PROGRAM_TEMPORARY) -- temp_acc[src.index].record_read(line, scope, src.swizzle); -+ temp_acc[src.index].record_read(line, scope, readmask); - - if (src.reladdr) - record_read(*src.reladdr, line, scope); --- -2.7.4 - diff --git a/common/recipes-graphics/mesa/mesa/0010-mesa-st-glsl_to_tgsi-add-class-for-array-access-trac.patch b/common/recipes-graphics/mesa/mesa/0010-mesa-st-glsl_to_tgsi-add-class-for-array-access-trac.patch deleted file mode 100644 index 629ae7cd..00000000 --- a/common/recipes-graphics/mesa/mesa/0010-mesa-st-glsl_to_tgsi-add-class-for-array-access-trac.patch +++ /dev/null @@ -1,146 +0,0 @@ -From ce713f4cae9d18dac3748183f5f92f87f92c5d13 Mon Sep 17 00:00:00 2001 -From: Gert Wollny <gw.fossdev@gmail.com> -Date: Fri, 9 Feb 2018 11:11:14 +0100 -Subject: [PATCH 10/13] mesa/st/glsl_to_tgsi: add class for array access - tracking - -Add a class implementing the (rather simplified) live range evaluation for -arrays. -Remark: Since the class is local and not yet used, the compiler will emit - some warnings about unused functions. - -Signed-off-by: Gert Wollny <gw.fossdev@gmail.com> ---- - .../state_tracker/st_glsl_to_tgsi_temprename.cpp | 102 +++++++++++++++++++++ - 1 file changed, 102 insertions(+) - -diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.cpp -index 4734a98..bdd52ac 100644 ---- a/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.cpp -+++ b/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.cpp -@@ -22,6 +22,7 @@ - */ - - #include "st_glsl_to_tgsi_temprename.h" -+#include "st_glsl_to_tgsi_array_merge.h" - #include "tgsi/tgsi_info.h" - #include "tgsi/tgsi_strings.h" - #include "program/prog_instruction.h" -@@ -239,6 +240,27 @@ private: - bool needs_component_tracking; - }; - -+/* Class to track array access. -+ * Compared to the temporary tracking this is very simplified, mainly because -+ * with the likely indirect access one can not really establish access -+ * patterns for individual elements. Instead the life range evaluation is -+ * always for the whole array, handles only loops and the fact whether a -+ * value was accessed conditionally in a loop. -+ */ -+class array_access { -+public: -+ array_access(); -+ void record_access(int line, prog_scope *scope, int swizzle); -+ void get_required_live_range(array_live_range &lr); -+private: -+ int first_access; -+ int last_access; -+ prog_scope *first_access_scope; -+ prog_scope *last_access_scope; -+ unsigned accumulated_swizzle:4; -+ int conditional_access_in_loop:1; -+}; -+ - prog_scope_storage::prog_scope_storage(void *mc, int n): - mem_ctx(mc), - current_slot(0) -@@ -508,6 +530,86 @@ void temp_access::record_read(int line, prog_scope *scope, int readmask) - comp[3].record_read(line, scope); - } - -+array_access::array_access(): -+ first_access(-1), -+ last_access(-1), -+ first_access_scope(nullptr), -+ last_access_scope(nullptr), -+ accumulated_swizzle(0), -+ conditional_access_in_loop(false) -+{ -+} -+ -+void array_access::record_access(int line, prog_scope *scope, int swizzle) -+{ -+ if (!first_access_scope) { -+ first_access = line; -+ first_access_scope = scope; -+ } -+ last_access_scope = scope; -+ last_access = line; -+ accumulated_swizzle |= swizzle; -+ if (scope->in_ifelse_scope() && scope->innermost_loop()) -+ conditional_access_in_loop = true; -+} -+ -+void array_access::get_required_live_range(array_live_range& lr) -+{ -+ RENAME_DEBUG(debug_log << "first_access_scope=" << first_access_scope << "\n"); -+ RENAME_DEBUG(debug_log << "last_access_scope=" << last_access_scope << "\n"); -+ -+ if (first_access_scope == last_access_scope) { -+ lr.set_live_range(first_access, last_access); -+ lr.set_access_mask(accumulated_swizzle); -+ return; -+ } -+ -+ const prog_scope *shared_scope = first_access_scope; -+ const prog_scope *other_scope = last_access_scope; -+ -+ assert(shared_scope); -+ RENAME_DEBUG(debug_log << "shared_scope=" << shared_scope << "\n"); -+ -+ if (conditional_access_in_loop) { -+ const prog_scope *help = shared_scope->outermost_loop(); -+ if (help) { -+ shared_scope = help; -+ } else { -+ help = other_scope->outermost_loop(); -+ if (help) -+ other_scope = help; -+ } -+ if (first_access > shared_scope->begin()) -+ first_access = shared_scope->begin(); -+ if (last_access < shared_scope->end()) -+ last_access = shared_scope->end(); -+ } -+ -+ /* See if any of the two is the parent of the other. */ -+ if (other_scope->contains_range_of(*shared_scope)) { -+ shared_scope = other_scope; -+ } else while (!shared_scope->contains_range_of(*other_scope)) { -+ assert(shared_scope->parent()); -+ if (shared_scope->type() == loop_body) { -+ if (last_access < shared_scope->end()) -+ last_access = shared_scope->end(); -+ } -+ shared_scope = shared_scope->parent(); -+ } -+ -+ while (shared_scope != other_scope) { -+ if (other_scope->type() == loop_body) { -+ if (last_access < other_scope->end()) -+ last_access = other_scope->end(); -+ } -+ other_scope = other_scope->parent(); -+ } -+ -+ lr.set_live_range(first_access, last_access); -+ lr.set_access_mask(accumulated_swizzle); -+} -+ -+ - inline static register_live_range make_live_range(int b, int e) - { - register_live_range lt; --- -2.7.4 - diff --git a/common/recipes-graphics/mesa/mesa/0011-mesa-st-glsl_to_tgsi-add-array-life-range-evaluation.patch b/common/recipes-graphics/mesa/mesa/0011-mesa-st-glsl_to_tgsi-add-array-life-range-evaluation.patch deleted file mode 100644 index 1dee8300..00000000 --- a/common/recipes-graphics/mesa/mesa/0011-mesa-st-glsl_to_tgsi-add-array-life-range-evaluation.patch +++ /dev/null @@ -1,167 +0,0 @@ -From 9a388d59aab6da2acee755cd304029c1e46a756e Mon Sep 17 00:00:00 2001 -From: Gert Wollny <gw.fossdev@gmail.com> -Date: Fri, 9 Feb 2018 11:11:15 +0100 -Subject: [PATCH 11/13] mesa/st/glsl_to_tgsi: add array life range evaluation - into tracking code - -This adds the array live range tracking harvesting the already implemented -live range tracking for temporary registers. With this patch the array live -range tracking is not yet exposed, and since some tests that track reladdr -access arrays, some array live range tracker instances need to be available, -so some are added as a placeholder in get_temp_registers_required_live_ranges. - -Signed-off-by: Gert Wollny <gw.fossdev@gmail.com> ---- - .../state_tracker/st_glsl_to_tgsi_temprename.cpp | 61 +++++++++++++++++----- - 1 file changed, 49 insertions(+), 12 deletions(-) - -diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.cpp -index bdd52ac..e276471 100644 ---- a/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.cpp -+++ b/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.cpp -@@ -995,28 +995,34 @@ public: - - class access_recorder { - public: -- access_recorder(int _ntemps); -+ access_recorder(int _ntemps, int _narrays); - ~access_recorder(); - - void record_read(const st_src_reg& src, int line, prog_scope *scope); -- void record_write(const st_dst_reg& src, int line, prog_scope *scope); -+ void record_write(const st_dst_reg& src, int line, prog_scope *scope, -+ bool no_reswizzle); - -- void get_required_live_ranges(register_live_range *register_live_ranges); -+ void get_required_live_ranges(register_live_range *register_live_ranges, -+ array_live_range *array_live_ranges); - private: - - int ntemps; -+ int narrays; - temp_access *temp_acc; -- -+ array_access *array_acc; - }; - --access_recorder::access_recorder(int _ntemps): -- ntemps(_ntemps) -+access_recorder::access_recorder(int _ntemps, int _narrays): -+ ntemps(_ntemps), -+ narrays(_narrays) - { - temp_acc = new temp_access[ntemps]; -+ array_acc = new array_access[narrays]; - } - - access_recorder::~access_recorder() - { -+ delete[] array_acc; - delete[] temp_acc; - } - -@@ -1032,6 +1038,11 @@ void access_recorder::record_read(const st_src_reg& src, int line, - if (src.file == PROGRAM_TEMPORARY) - temp_acc[src.index].record_read(line, scope, readmask); - -+ if (src.file == PROGRAM_ARRAY) { -+ assert(src.array_id <= narrays); -+ array_acc[src.array_id - 1].record_access(line, scope, readmask); -+ } -+ - if (src.reladdr) - record_read(*src.reladdr, line, scope); - if (src.reladdr2) -@@ -1039,18 +1050,30 @@ void access_recorder::record_read(const st_src_reg& src, int line, - } - - void access_recorder::record_write(const st_dst_reg& dst, int line, -- prog_scope *scope) -+ prog_scope *scope, bool can_reswizzle) - { - if (dst.file == PROGRAM_TEMPORARY) - temp_acc[dst.index].record_write(line, scope, dst.writemask); - -+ if (dst.file == PROGRAM_ARRAY) { -+ assert(dst.array_id <= narrays); -+ -+ /* If the array is written as dst of a multi-dst operation, we must not -+ * reswizzle the access, because we would have to reswizzle also the -+ * other dst. For now just fill the mask to make interleaving impossible. -+ */ -+ array_acc[dst.array_id - 1].record_access(line, scope, -+ can_reswizzle ? dst.writemask: 0xF); -+ } -+ - if (dst.reladdr) - record_read(*dst.reladdr, line, scope); - if (dst.reladdr2) - record_read(*dst.reladdr2, line, scope); - } - --void access_recorder::get_required_live_ranges(struct register_live_range *register_live_ranges) -+void access_recorder::get_required_live_ranges(struct register_live_range *register_live_ranges, -+ struct array_live_range *array_live_ranges) - { - RENAME_DEBUG(debug_log << "== register live ranges ==========\n"); - for(int i = 0; i < ntemps; ++i) { -@@ -1060,6 +1083,15 @@ void access_recorder::get_required_live_ranges(struct register_live_range *regis - <<register_live_ranges[i].end << "]\n"); - } - RENAME_DEBUG(debug_log << "==================================\n\n"); -+ -+ RENAME_DEBUG(debug_log << "== array live ranges ==========\n"); -+ for(int i = 0; i < narrays; ++i) { -+ RENAME_DEBUG(debug_log<< setw(4) << i); -+ array_acc[i].get_required_live_range(array_live_ranges[i]); -+ RENAME_DEBUG(debug_log << ": [" <<array_live_ranges[i].begin() << ", " -+ << array_live_ranges[i].end() << "]\n"); -+ } -+ RENAME_DEBUG(debug_log << "==================================\n\n"); - } - - } -@@ -1084,6 +1116,10 @@ get_temp_registers_required_live_ranges(void *mem_ctx, exec_list *instructions, - bool is_at_end = false; - int n_scopes = 1; - -+ /* Placeholder to make the reladdr tests pass, will be removed with the next patch. */ -+ int narrays = 2; -+ struct array_live_range array_live_ranges[3]; -+ - /* Count scopes to allocate the needed space without the need for - * re-allocation - */ -@@ -1100,7 +1136,7 @@ get_temp_registers_required_live_ranges(void *mem_ctx, exec_list *instructions, - - prog_scope_storage scopes(mem_ctx, n_scopes); - -- access_recorder access(ntemps); -+ access_recorder access(ntemps, narrays); - - prog_scope *cur_scope = scopes.create(nullptr, outer_scope, 0, 0, line); - -@@ -1226,8 +1262,9 @@ get_temp_registers_required_live_ranges(void *mem_ctx, exec_list *instructions, - for (unsigned j = 0; j < inst->tex_offset_num_offset; j++) { - access.record_read(inst->tex_offsets[j], line, cur_scope); - } -- for (unsigned j = 0; j < num_inst_dst_regs(inst); j++) { -- access.record_write(inst->dst[j], line, cur_scope); -+ unsigned ndst = num_inst_dst_regs(inst); -+ for (unsigned j = 0; j < ndst; j++) { -+ access.record_write(inst->dst[j], line, cur_scope, ndst == 1); - } - } - } -@@ -1242,7 +1279,7 @@ get_temp_registers_required_live_ranges(void *mem_ctx, exec_list *instructions, - if (cur_scope->end() < 0) - cur_scope->set_end(line - 1); - -- access.get_required_live_ranges(register_live_ranges); -+ access.get_required_live_ranges(register_live_ranges, array_live_ranges); - return true; - } - --- -2.7.4 - diff --git a/common/recipes-graphics/mesa/mesa/0012-mesa-st-glsl_to_tgsi-Expose-array-live-range-trackin.patch b/common/recipes-graphics/mesa/mesa/0012-mesa-st-glsl_to_tgsi-Expose-array-live-range-trackin.patch deleted file mode 100644 index 0114c54f..00000000 --- a/common/recipes-graphics/mesa/mesa/0012-mesa-st-glsl_to_tgsi-Expose-array-live-range-trackin.patch +++ /dev/null @@ -1,204 +0,0 @@ -From 3669f47f03dcf696188294da78def040cffa77a2 Mon Sep 17 00:00:00 2001 -From: Gert Wollny <gw.fossdev@gmail.com> -Date: Fri, 9 Feb 2018 11:11:16 +0100 -Subject: [PATCH 12/13] mesa/st/glsl_to_tgsi: Expose array live range tracking - and merging - -Rename get_temp_registers_required_live_ranges to get_required_live_ranges and -change its interface to also accomodate the live range tracking for arrays. -Remove the placeholder arrays in this function and tie the array merging. - -This makes the register spilling in piglit - glsl-1.30/execution/fs-multiple-large-local-arrays -on r600/barts unneccessary. - -Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=100200 -Signed-off-by: Gert Wollny <gw.fossdev@gmail.com> ---- - src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 25 +++++++++++++++++----- - .../state_tracker/st_glsl_to_tgsi_temprename.cpp | 13 +++++------ - .../state_tracker/st_glsl_to_tgsi_temprename.h | 19 ++++++++++------ - src/mesa/state_tracker/tests/st_tests_common.cpp | 19 ++++++++-------- - 4 files changed, 48 insertions(+), 28 deletions(-) - -diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp -index 163f334..c58fac0 100644 ---- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp -+++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp -@@ -5467,25 +5467,40 @@ glsl_to_tgsi_visitor::split_arrays(void) - next_array = n_remaining_arrays; - } - --/* Merges temporary registers together where possible to reduce the number of -- * registers needed to run a program. -+/* Merges temporary registers and arrays together where possible to reduce -+ * the number of registers needed to run a program. - * - * Produces optimal code only after copy propagation and dead code elimination - * have been run. */ - void - glsl_to_tgsi_visitor::merge_registers(void) - { -+ struct array_live_range *arr_live_ranges = NULL; -+ - struct register_live_range *reg_live_ranges = - rzalloc_array(mem_ctx, struct register_live_range, this->next_temp); - -- if (get_temp_registers_required_live_ranges(reg_live_ranges, &this->instructions, -- this->next_temp, reg_live_ranges)) { -+ if (this->next_array > 0) { -+ arr_live_ranges = new array_live_range[this->next_array]; -+ for (unsigned i = 0; i < this->next_array; ++i) -+ arr_live_ranges[i] = array_live_range(i+1, this->array_sizes[i+1]); -+ } -+ -+ -+ if (get_required_live_ranges(reg_live_ranges, &this->instructions, -+ this->next_temp, reg_live_ranges, -+ this->next_array, arr_live_ranges)) { - struct rename_reg_pair *renames = - rzalloc_array(reg_live_ranges, struct rename_reg_pair, this->next_temp); - get_temp_registers_remapping(reg_live_ranges, this->next_temp, - reg_live_ranges, renames); - rename_temp_registers(renames); -- ralloc_free(renames); -+ -+ this->next_array = merge_arrays(this->next_array, this->array_sizes, -+ &this->instructions, arr_live_ranges); -+ -+ if (arr_live_ranges) -+ delete[] arr_live_ranges; - } - ralloc_free(reg_live_ranges); - } -diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.cpp -index e276471..eafe4cd 100644 ---- a/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.cpp -+++ b/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.cpp -@@ -1102,12 +1102,13 @@ static void dump_instruction(ostream& os, int line, prog_scope *scope, - const glsl_to_tgsi_instruction& inst); - #endif - --/* Scan the program and estimate the required register live ranges. -- * live_ranges must be pre-allocated. -+/* Scan the program and estimate the required register and array live ranges. -+ * The *live_ranges must be pre-allocated. - */ - bool --get_temp_registers_required_live_ranges(void *mem_ctx, exec_list *instructions, -- int ntemps, struct register_live_range *register_live_ranges) -+get_required_live_ranges(void *mem_ctx, exec_list *instructions, int ntemps, -+ struct register_live_range *register_live_ranges, -+ int narrays, struct array_live_range *array_live_ranges) - { - int line = 0; - int loop_id = 1; -@@ -1116,10 +1117,6 @@ get_temp_registers_required_live_ranges(void *mem_ctx, exec_list *instructions, - bool is_at_end = false; - int n_scopes = 1; - -- /* Placeholder to make the reladdr tests pass, will be removed with the next patch. */ -- int narrays = 2; -- struct array_live_range array_live_ranges[3]; -- - /* Count scopes to allocate the needed space without the need for - * re-allocation - */ -diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.h b/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.h -index 86c2158..e0dbc3d 100644 ---- a/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.h -+++ b/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.h -@@ -24,7 +24,7 @@ - #ifndef MESA_GLSL_TO_TGSI_TEMPRENAME_H - #define MESA_GLSL_TO_TGSI_TEMPRENAME_H - --#include "st_glsl_to_tgsi_private.h" -+#include "st_glsl_to_tgsi_array_merge.h" - - /** Storage to record the required live range of a temporary register - * begin == end == -1 indicates that the register can be reused without -@@ -38,9 +38,9 @@ struct register_live_range { - int end; - }; - --/** Evaluates the required live ranges of temporary registers in a shader. -- * The live range estimation can only be run sucessfully if the shader doesn't -- * call a subroutine. -+/** Evaluates the required live ranges of temporary registers and arrays in a -+ * shader. The live range estimation can only be run sucessfully if the shader -+ * doesn't call a subroutine. - * @param[in] mem_ctx a memory context that can be used with the ralloc_* - * functions - * @param[in] instructions the shader to be anlzyed -@@ -50,12 +50,19 @@ struct register_live_range { - * point to allocated memory that can hold ntemps register_live_range - * structures. On output the live ranges contains the live ranges for - * the registers with the exception of TEMP[0] -+ * @param[in] narrays number of array sreserved for this shader -+ * @param[in,out] arr_live_ranges memory location to store the estimated required -+ * live ranges for each array. The parameter must point to allocated memory -+ * that can hold narrays array_live_range structures. On output the live -+ * ranges contains the live ranges for the registers with the exception of -+ * ARRAY[0]. - * @returns: true if the lifetimes were estimated, false if not (i.e. if a - * subroutine was called). - */ - bool --get_temp_registers_required_live_ranges(void *mem_ctx, exec_list *instructions, -- int ntemps, struct register_live_range *register_live_ranges); -+get_required_live_ranges(void *mem_ctx, exec_list *instructions, -+ int ntemps, struct register_live_range *register_live_ranges, -+ int narrays, array_live_range *array_live_ranges); - - /** Estimate the merge remapping of the registers. - * @param[in] mem_ctx a memory context that can be used with the ralloc_* -diff --git a/src/mesa/state_tracker/tests/st_tests_common.cpp b/src/mesa/state_tracker/tests/st_tests_common.cpp -index f1e4a83..33d669d 100644 ---- a/src/mesa/state_tracker/tests/st_tests_common.cpp -+++ b/src/mesa/state_tracker/tests/st_tests_common.cpp -@@ -409,11 +409,11 @@ LifetimeEvaluatorTest::run(const vector<FakeCodeline>& code, bool& success) - { - FakeShader shader(code); - lifetime_result result(shader.get_num_temps()); -- -+ vector <array_live_range> arr(10); - success = -- get_temp_registers_required_live_ranges(mem_ctx, shader.get_program(mem_ctx), -+ get_required_live_ranges(mem_ctx, shader.get_program(mem_ctx), - shader.get_num_temps(), -- &result[0]); -+ &result[0], 9, &arr[0]); - - return result; - } -@@ -422,11 +422,11 @@ void LifetimeEvaluatorTest::run(const vector<FakeCodeline>& code, const temp_lt_ - { - FakeShader shader(code); - lifetime_result result(shader.get_num_temps()); -- -+ vector <array_live_range> arr(10); - bool success = -- get_temp_registers_required_live_ranges(mem_ctx, shader.get_program(mem_ctx), -+ get_required_live_ranges(mem_ctx, shader.get_program(mem_ctx), - shader.get_num_temps(), -- &result[0]); -+ &result[0], 9, &arr[0]); - ASSERT_TRUE(success); - ASSERT_EQ(result.size(), e.size()); - check(result, e); -@@ -478,8 +478,9 @@ void RegisterLifetimeAndRemappingTest::run(const vector<FakeCodeline>& code, - { - FakeShader shader(code); - std::vector<register_live_range> lt(shader.get_num_temps()); -- -- get_temp_registers_required_live_ranges(mem_ctx, shader.get_program(mem_ctx), -- shader.get_num_temps(), <[0]); -+ vector <array_live_range> arr(10); -+ get_required_live_ranges(mem_ctx, shader.get_program(mem_ctx), -+ shader.get_num_temps(), <[0], -+ 9, &arr[0]); - this->run(lt, expect); - } --- -2.7.4 - diff --git a/common/recipes-graphics/mesa/mesa/0013-mesa-st-glsl_to_tgsi-Properly-resolve-life-times-for.patch b/common/recipes-graphics/mesa/mesa/0013-mesa-st-glsl_to_tgsi-Properly-resolve-life-times-for.patch deleted file mode 100644 index aae65422..00000000 --- a/common/recipes-graphics/mesa/mesa/0013-mesa-st-glsl_to_tgsi-Properly-resolve-life-times-for.patch +++ /dev/null @@ -1,98 +0,0 @@ -From 1e6cac33a250c63865a02b82a073457b26ddb120 Mon Sep 17 00:00:00 2001 -From: Gert Wollny <gw.fossdev@gmail.com> -Date: Tue, 6 Mar 2018 18:36:40 +0100 -Subject: [PATCH 13/13] mesa/st/glsl_to_tgsi: Properly resolve life times for - simple if/else + use constructs - -In constructs like - - while (foo) { - ... - if (a) { - ... - if (b) - foo = ... - else - foo = ... - x = foo; - ... - } - ... - } - -currently the live range estimation extends the live range of t unnecessarily -to the whole loop because it was not detected that t is only read in the -"if (a)" scope that encloses the "if (b)/else" constructs where t is written -in both branches. - -This patch corrects the minimal live range estimation and adds an according -unit test for this case. - -Signed-off-by: Gert Wollny <gw.fossdev@gmail.com> ---- - .../state_tracker/st_glsl_to_tgsi_temprename.cpp | 14 +++++++++++++ - .../tests/test_glsl_to_tgsi_lifetime.cpp | 23 ++++++++++++++++++++++ - 2 files changed, 37 insertions(+) - -diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.cpp -index eafe4cd..115dca7 100644 ---- a/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.cpp -+++ b/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.cpp -@@ -838,6 +838,20 @@ void temp_comp_access::record_else_write(const prog_scope& scope) - } else { - current_unpaired_if_write_scope = nullptr; - } -+ /* Promote the first write scope to the enclosing scope because the -+ * current IF/ELSE pair is now irrelevant for the analysis. This is -+ * needed to obtain the minimum live range for t in constructs like: -+ * { -+ * var t; -+ * if (a) -+ * t = ... -+ * else -+ * t = ... -+ * x = t; -+ * ... -+ * } -+ */ -+ first_write_scope = scope.parent(); - - /* If some parent is IF/ELSE and in a loop then propagate the - * write to that scope. Otherwise the write is unconditional -diff --git a/src/mesa/state_tracker/tests/test_glsl_to_tgsi_lifetime.cpp b/src/mesa/state_tracker/tests/test_glsl_to_tgsi_lifetime.cpp -index dbf74cc..a665d9d 100644 ---- a/src/mesa/state_tracker/tests/test_glsl_to_tgsi_lifetime.cpp -+++ b/src/mesa/state_tracker/tests/test_glsl_to_tgsi_lifetime.cpp -@@ -794,6 +794,29 @@ TEST_F(LifetimeEvaluatorExactTest, WriteInIfElseBranchSecondIfInLoop) - run (code, temp_lt_expect({{-1,-1}, {2,9}})); - } - -+/* -+ Test for write in IF and ELSE and read in enclosing IF in loop. -+*/ -+ -+TEST_F(LifetimeEvaluatorExactTest, DeeplyNestedinLoop) -+{ -+ const vector<FakeCodeline> code = { -+ { TGSI_OPCODE_BGNLOOP }, -+ { TGSI_OPCODE_UIF, {}, {in0}, {}}, -+ { TGSI_OPCODE_FSEQ, {1}, {in1,in2}, {}}, -+ { TGSI_OPCODE_UIF, {}, {1}, {}}, -+ { TGSI_OPCODE_MOV, {2}, {in1}, {}}, -+ { TGSI_OPCODE_ELSE }, -+ { TGSI_OPCODE_MOV, {2}, {in2}, {}}, -+ { TGSI_OPCODE_ENDIF }, -+ { TGSI_OPCODE_MOV, {3}, {2}, {}}, -+ { TGSI_OPCODE_ENDIF }, -+ { TGSI_OPCODE_ADD, {out0}, {3, in1}, {}}, -+ { TGSI_OPCODE_ENDLOOP } -+ }; -+ run (code, temp_lt_expect({{-1,-1}, {2,3}, {4, 8}, {0,11}})); -+} -+ - /** Regression test for bug #104803, - * Read and write in if/else path outside loop and later read in conditional - * within a loop. The first write is to be considered the dominant write. --- -2.7.4 - diff --git a/common/recipes-graphics/mesa/mesa_git.bb b/common/recipes-graphics/mesa/mesa_git.bb deleted file mode 100644 index f7e4bc75..00000000 --- a/common/recipes-graphics/mesa/mesa_git.bb +++ /dev/null @@ -1,92 +0,0 @@ -require recipes-graphics/mesa/${BPN}.inc - -S = "${WORKDIR}/git" - -DEPENDS_append = " python-mako-native" -inherit pythonnative - -SRCREV_amd = "d07a49fb1840bb441e600ce942cb0088e7ea15c7" -LIC_FILES_CHKSUM_amd = "file://docs/license.html;md5=725f991a1cc322aa7a0cd3a2016621c4" -PV_amd = "18.1.0+git${SRCPV}" - -DEPENDS_append_amd = " libvdpau libomxil" - -PACKAGECONFIG[va] = "--enable-va,--disable-va,libva" -PACKAGECONFIG_append_amd = " xvmc gallium r600 gallium-llvm xa" -PACKAGECONFIG_append_radeon = " va" -PACKAGECONFIG_append_amdgpu = " va" - -PACKAGECONFIG_remove_amd = "vulkan" -PACKAGECONFIG_remove_amdfalconx86 = "xvmc" - -LIBVA_PLATFORMS = "libva" -LIBVA_PLATFORMS .= "${@bb.utils.contains('DISTRO_FEATURES', 'x11', ' libva-x11', '', d)}" -LIBVA_PLATFORMS .= "${@bb.utils.contains('DISTRO_FEATURES', 'wayland', ' libva-wayland', '', d)}" -LIBVA_PLATFORMS .= "${@bb.utils.contains('DISTRO_FEATURES', 'opengl', ' libva-gl', '', d)}" -RDEPENDS_mesa-megadriver += "${@bb.utils.contains('PACKAGECONFIG', 'va', '${LIBVA_PLATFORMS}', '', d)}" - -MESA_LLVM_RELEASE_amd = "6.0" - -SRC_URI_amd = "git://anongit.freedesktop.org/mesa/mesa;branch=master \ - file://0001-st-omx-enc-fix-blit-setup-for-YUV-LoadImage.patch \ - file://0002-mesa-st-glsl_to_tgsi-Split-arrays-who-s-elements-are.patch \ - file://0003-mesa-st-glsl_to_tgsi-rename-lifetime-to-register_liv.patch \ - file://0004-mesa-st-Add-helper-classes-for-array-merging-and-int.patch \ - file://0005-mesa-st-glsl_to_tgsi-Add-class-to-hold-array-informa.patch \ - file://0006-mesa-st-glsl_to_tgsi-Add-array-merge-logic.patch \ - file://0007-mesa-st-tests-Add-unit-tests-for-array-merge-helper-.patch \ - file://0008-mesa-st-glsl_to_tgsi-refactor-access_record-and-its-.patch \ - file://0009-mesa-st-glsl_to_tgsi-move-evaluation-of-read-mask-up.patch \ - file://0010-mesa-st-glsl_to_tgsi-add-class-for-array-access-trac.patch \ - file://0011-mesa-st-glsl_to_tgsi-add-array-life-range-evaluation.patch \ - file://0012-mesa-st-glsl_to_tgsi-Expose-array-live-range-trackin.patch \ - file://0013-mesa-st-glsl_to_tgsi-Properly-resolve-life-times-for.patch \ - file://0001-configure.ac-obey-llvm_prefix-if-available.patch \ - file://0001-configure.ac-adjust-usage-of-LLVM-flags.patch" - -EXTRA_OECONF_append_amd = " \ - --enable-vdpau \ - --enable-osmesa \ - --enable-glx \ - --enable-omx-bellagio \ - --with-omx-bellagio-libdir=${libdir}/bellagio \ - --enable-texture-float" - -# Package all the libXvMC gallium extensions together -# they provide the shared lib libXvMCGallium and splitting -# them up creates trouble in rpm packaging -PACKAGES =+ "libxvmcgallium-${PN} libxvmcgallium-${PN}-dev" -FILES_libxvmcgallium-${PN} = "${libdir}/libXvMC*${SOLIBS}" -FILES_libxvmcgallium-${PN}-dev = "${libdir}/libXvMC*${SOLIBSDEV} \ - ${libdir}/libXvMC*.la" - -PACKAGES =+ "libvdpau-${PN} libvdpau-${PN}-dev" -FILES_libvdpau-${PN} = "${libdir}/vdpau/libvdpau*${SOLIBS}" -FILES_libvdpau-${PN}-dev = "${libdir}/vdpau/libvdpau*${SOLIBSDEV} \ - ${libdir}/vdpau/libvdpau*.la" -FILES_${PN}-dbg += "${libdir}/vdpau/.debug" - -# -# libomx files are non-versioned so we put *.so directly in the -# main package as opposed to the -dev package. -# -PACKAGES =+ "libomx-${PN} libomx-${PN}-dev" -FILES_libomx-${PN} = "${libdir}/bellagio/libomx_*.so" -FILES_libomx-${PN}-dev = "${libdir}/bellagio/libomx_*.la" -FILES_${PN}-dbg += "${libdir}/bellagio/.debug" - -# Set DRIDRIVERS with anonymous python so we can effectively -# override the _append_x86-64 assignement from mesa.inc. -python () { - d.setVar("DRIDRIVERS", "swrast,radeon") - d.setVar("GALLIUMDRIVERS", "swrast,r300,r600,radeonsi") -} - -#because we cannot rely on the fact that all apps will use pkgconfig, -#make eglplatform.h independent of MESA_EGL_NO_X11_HEADER -do_install_append() { - if ${@bb.utils.contains('PACKAGECONFIG', 'egl', 'true', 'false', d)}; then - sed -i -e 's/^#if defined(MESA_EGL_NO_X11_HEADERS)$/#if defined(MESA_EGL_NO_X11_HEADERS) || ${@bb.utils.contains('PACKAGECONFIG', 'x11', '0', '1', d)}/' ${D}${includedir}/EGL/eglplatform.h - fi -} - diff --git a/common/recipes-graphics/vdpauinfo/vdpauinfo_1.0.bb b/common/recipes-graphics/vdpauinfo/vdpauinfo_1.0.bb deleted file mode 100644 index 7495859d..00000000 --- a/common/recipes-graphics/vdpauinfo/vdpauinfo_1.0.bb +++ /dev/null @@ -1,15 +0,0 @@ -DESCRIPTION = "VDPAU info tool" -HOMEPAGE = "http://people.freedesktop.org" -LICENSE = "MIT" - -LIC_FILES_CHKSUM = "file://COPYING;md5=5b6e110c362fe46168199f3490e52c3c" - -SRC_URI = "http://people.freedesktop.org/~aplattner/vdpau/vdpauinfo-${PV}.tar.gz" -SRC_URI[md5sum] = "4eba3e7bf5062b9c245276860493804f" -SRC_URI[sha256sum] = "4054960b7ae618c351ff1ce3e7831b5cbda964ae1fbf9969b7146404d3044bc4" - -inherit autotools pkgconfig - -DEPENDS += "virtual/libx11 libvdpau mesa" - -RDEPENDS_${PN} += "libvdpau-mesa" diff --git a/common/recipes-graphics/xinput-calibrator/xinput-calibrator_git.bbappend b/common/recipes-graphics/xinput-calibrator/xinput-calibrator_git.bbappend deleted file mode 100644 index 8a8069ce..00000000 --- a/common/recipes-graphics/xinput-calibrator/xinput-calibrator_git.bbappend +++ /dev/null @@ -1,4 +0,0 @@ -do_install_append_amd() { - # Do not install the boot time auto launcher - rm -rf ${D}${sysconfdir}/xdg/autostart -} diff --git a/common/recipes-graphics/xorg-app/xrandr/0001-Fixed-CRTC-disable-in-xrandr-causing-scale-issue.patch b/common/recipes-graphics/xorg-app/xrandr/0001-Fixed-CRTC-disable-in-xrandr-causing-scale-issue.patch deleted file mode 100644 index 3ba30c34..00000000 --- a/common/recipes-graphics/xorg-app/xrandr/0001-Fixed-CRTC-disable-in-xrandr-causing-scale-issue.patch +++ /dev/null @@ -1,87 +0,0 @@ -From 3e946f562ba38993b57ea46bc7089c4f6bc7951b Mon Sep 17 00:00:00 2001 -From: Arsalan-Awan <Arsalan_Awan@mentor.com> -Date: Mon, 5 Mar 2018 18:37:37 +0500 -Subject: [PATCH] Fixed CRTC disable in xrandr causing scale issue - -Whenever scale value is increased when it is between 0.0 - 1.0 -and is kept within 0.0 - 1.0 range, the display does not expand -to fullscreen. It rather becomes smaller and leaves blank spaces on -the right and bottom sides. And the following error message shows up: - -X Error of failed request: BadMatch (invalid parameter attributes) - Major opcode of failed request: 139 (RANDR) - Minor opcode of failed request: 7 (RRSetScreenSize) - Serial number of failed request: 36 - Current serial number in output stream: 38 - -Before xrandr attempts to apply the transformation matrix requested -by "scale", "transform" or "scale-from" options, it disables the -CRTCs for which the transformed image's dimensions are larger than the -target display's resolution/mode. But, when the image is smaller, it -does not disable the CRTCs, and proceeds with applying the -transformation (involves framebuffer dimension changes). This works well -for all the scale values and transitions except for the above mentioned -transitions. - -This patch fixes such issues! - -Signed-off-by: Arsalan-Awan <Arsalan_Awan@mentor.com> ---- - xrandr.c | 31 +++++-------------------------- - 1 file changed, 5 insertions(+), 26 deletions(-) - -diff --git a/xrandr.c b/xrandr.c -index dcfdde0..d2872ef 100644 ---- a/xrandr.c -+++ b/xrandr.c -@@ -1723,8 +1723,7 @@ apply (void) - XGrabServer (dpy); - - /* -- * Turn off any crtcs which are to be disabled or which are -- * larger than the target size -+ * Turn off any crtcs which are to be disabled - */ - for (c = 0; c < res->ncrtc; c++) - { -@@ -1736,33 +1735,13 @@ apply (void) - continue; - - /* -- * If this crtc is to be left enabled, make -- * sure the old size fits then new screen -+ * Once the scale value is changed in xrandr, omitting the -+ * following if statement causes the display to fail to -+ * turn back ON after it goes to sleep due to inactivity. - */ - if (crtc->mode_info) -- { -- XRRModeInfo *old_mode = find_mode_by_xid (crtc_info->mode); -- int x, y, w, h; -- box_t bounds; -- -- if (!old_mode) -- panic (RRSetConfigFailed, crtc); -- -- /* old position and size information */ -- mode_geometry (old_mode, crtc_info->rotation, -- &crtc->current_transform.transform, -- &bounds); -- -- x = crtc_info->x + bounds.x1; -- y = crtc_info->y + bounds.y1; -- w = bounds.x2 - bounds.x1; -- h = bounds.y2 - bounds.y1; -- -- /* if it fits, skip it */ -- if (x + w <= fb_width && y + h <= fb_height) -- continue; - crtc->changing = True; -- } -+ - s = crtc_disable (crtc); - if (s != RRSetConfigSuccess) - panic (s, crtc); --- -2.7.4 - diff --git a/common/recipes-graphics/xorg-app/xrandr_1.5.0.bbappend b/common/recipes-graphics/xorg-app/xrandr_1.5.0.bbappend deleted file mode 100644 index a20e79d8..00000000 --- a/common/recipes-graphics/xorg-app/xrandr_1.5.0.bbappend +++ /dev/null @@ -1,3 +0,0 @@ -FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" - -SRC_URI += " file://0001-Fixed-CRTC-disable-in-xrandr-causing-scale-issue.patch" diff --git a/common/recipes-graphics/xorg-driver/xf86-video-amd_git.bb b/common/recipes-graphics/xorg-driver/xf86-video-amd_git.bb deleted file mode 100644 index f119c674..00000000 --- a/common/recipes-graphics/xorg-driver/xf86-video-amd_git.bb +++ /dev/null @@ -1,41 +0,0 @@ -SUMMARY = "X.Org X server -- AMD graphics chipsets driver" - -DESCRIPTION = "xf86-video-amd is an Xorg driver for AMD integrated \ -graphics chipsets. The driver supports depths 8, 15, 16 and 24. On \ -some chipsets, the driver supports hardware accelerated 3D via the \ -Direct Rendering Infrastructure (DRI)." - -require recipes-graphics/xorg-driver/xorg-driver-video.inc - -LIC_FILES_CHKSUM = "file://COPYING;md5=aabff1606551f9461ccf567739af63dc" - -DEPENDS += "virtual/libx11 drm dri2proto glproto \ - virtual/libgl xineramaproto libpciaccess \ -" - -PACKAGECONFIG[udev] = "--enable-udev,--disable-udev,udev" -PACKAGECONFIG[glamor] = "--enable-glamor,--disable-glamor" - -SRC_URI_radeon = "git://anongit.freedesktop.org/git/xorg/driver/xf86-video-ati" -SRCREV_radeon = "5cbe1ee8e499e1b6b2646e341946292721d07e69" -PV_radeon = "radeon-7.8.0" -PACKAGECONFIG_append_radeon = " udev glamor" - -SRC_URI_amdgpu = "git://anongit.freedesktop.org/xorg/driver/xf86-video-amdgpu" -SRCREV_amdgpu = "a00032050873fc99f3ceaa3293468dad1d94d4b1" -PV_amdgpu = "amdgpu-1.2.0" -PACKAGECONFIG_append_amdgpu = " udev glamor" - -PV = "git${SRCPV}" - -S = "${WORKDIR}/git" - -RDEPENDS_${PN} += "mesa-driver-radeon \ - mesa-driver-radeonsi \ - mesa-driver-swrast \ -" - -COMPATIBLE_HOST = '(i.86|x86_64).*-linux' - -PACKAGES += "${PN}-conf" -FILES_${PN}-conf = "${datadir}/X11" diff --git a/common/recipes-graphics/xorg-lib/libvdpau_1.1.1.bb b/common/recipes-graphics/xorg-lib/libvdpau_1.1.1.bb deleted file mode 100644 index bfb0dcf1..00000000 --- a/common/recipes-graphics/xorg-lib/libvdpau_1.1.1.bb +++ /dev/null @@ -1,39 +0,0 @@ -DESCRIPTION = "Implements VDPAU library" -HOMEPAGE = "http://people.freedesktop.org" -LICENSE = "MIT" -DEPENDS = "xtrans libx11 libxext libice libsm libxscrnsaver libxt \ - libxmu libxpm libxau libxfixes libxcomposite libxrender \ - libxcursor libxdamage libfontenc libxfont libxft libxi \ - libxinerama libxrandr libxres libxtst libxv libxvmc \ - libxxf86dga libxxf86vm libdmx libpciaccess libxkbfile \ - dri2proto \ - " -LIC_FILES_CHKSUM = "file://COPYING;md5=83af8811a28727a13f04132cc33b7f58" - -SRC_URI = "http://people.freedesktop.org/~aplattner/vdpau/libvdpau-${PV}.tar.gz" -SRC_URI[md5sum] = "ac8b21012035c04fd1ec8a9ae6934264" -SRC_URI[sha256sum] = "5fe093302432ef05086ca2ee429c789b7bf843e166d482d166e56859b08bef55" - -inherit autotools pkgconfig - -S = "${WORKDIR}/libvdpau-${PV}" - -FILES_${PN} += "${libdir}/vdpau/libvdpau_nouveau${SOLIBS} \ - ${libdir}/vdpau/libvdpau_r600${SOLIBS} \ - ${libdir}/vdpau/libvdpau_radeonsi${SOLIBS} \ - ${libdir}/vdpau/libvdpau_trace${SOLIBS} \ - " - -FILES_${PN}-dev += "${libdir}/vdpau/libvdpau_nouveau${SOLIBSDEV} \ - ${libdir}/vdpau/libvdpau_nouveau.la \ - ${libdir}/vdpau/libvdpau_r600${SOLIBSDEV} \ - ${libdir}/vdpau/libvdpau_r600.la \ - ${libdir}/vdpau/libvdpau_radeonsi${SOLIBSDEV} \ - ${libdir}/vdpau/libvdpau_radeonsi.la \ - ${libdir}/vdpau/libvdpau_trace${SOLIBSDEV} \ - ${libdir}/vdpau/libvdpau_trace.la \ - " - -FILES_${PN}-dbg += "${libdir}/vdpau/.debug" - -EXTRA_OECONF += "--enable-dri2" diff --git a/common/recipes-graphics/xorg-xserver/xserver-xf86-config/amd/xorg.conf b/common/recipes-graphics/xorg-xserver/xserver-xf86-config/amd/xorg.conf deleted file mode 100644 index edb7b36a..00000000 --- a/common/recipes-graphics/xorg-xserver/xserver-xf86-config/amd/xorg.conf +++ /dev/null @@ -1,107 +0,0 @@ -Section "Monitor" - Identifier "Monitor0" - VendorName "Monitor Vendor" - ModelName "Monitor Model" -EndSection - -Section "Device" - ### Available Driver options are:- - ### Values: <i>: integer, <f>: float, <bool>: "True"/"False", - ### <string>: "String", <freq>: "<f> Hz/kHz/MHz", - ### <percent>: "<f>%" - ### [arg]: arg optional - #Option "NoAccel" # [<bool>] - #Option "SWcursor" # [<bool>] - #Option "Dac6Bit" # [<bool>] - #Option "Dac8Bit" # [<bool>] - #Option "BusType" # [<str>] - #Option "CPPIOMode" # [<bool>] - #Option "CPusecTimeout" # <i> - #Option "AGPMode" # <i> - #Option "AGPFastWrite" # [<bool>] - #Option "AGPSize" # <i> - #Option "GARTSize" # <i> - #Option "RingSize" # <i> - #Option "BufferSize" # <i> - #Option "EnableDepthMoves" # [<bool>] - #Option "EnablePageFlip" # [<bool>] - #Option "NoBackBuffer" # [<bool>] - #Option "DMAForXv" # [<bool>] - #Option "FBTexPercent" # <i> - #Option "DepthBits" # <i> - #Option "PCIAPERSize" # <i> - #Option "AccelDFS" # [<bool>] - #Option "IgnoreEDID" # [<bool>] - #Option "CustomEDID" # [<str>] - #Option "DisplayPriority" # [<str>] - #Option "PanelSize" # [<str>] - #Option "ForceMinDotClock" # <freq> - #Option "ColorTiling" # [<bool>] - #Option "VideoKey" # <i> - #Option "RageTheatreCrystal" # <i> - #Option "RageTheatreTunerPort" # <i> - #Option "RageTheatreCompositePort" # <i> - #Option "RageTheatreSVideoPort" # <i> - #Option "TunerType" # <i> - #Option "RageTheatreMicrocPath" # <str> - #Option "RageTheatreMicrocType" # <str> - #Option "ScalerWidth" # <i> - #Option "RenderAccel" # [<bool>] - #Option "SubPixelOrder" # [<str>] - #Option "ClockGating" # [<bool>] - #Option "VGAAccess" # [<bool>] - #Option "ReverseDDC" # [<bool>] - #Option "LVDSProbePLL" # [<bool>] - Option "AccelMethod" "glamor" - #Option "DRI" # [<bool>] - #Option "ConnectorTable" # <str> - #Option "DefaultConnectorTable" # [<bool>] - #Option "DefaultTMDSPLL" # [<bool>] - #Option "TVDACLoadDetect" # [<bool>] - #Option "ForceTVOut" # [<bool>] - #Option "TVStandard" # <str> - #Option "IgnoreLidStatus" # [<bool>] - #Option "DefaultTVDACAdj" # [<bool>] - #Option "Int10" # [<bool>] - #Option "EXAVSync" # [<bool>] - #Option "ATOMTVOut" # [<bool>] - #Option "R4xxATOM" # [<bool>] - #Option "ForceLowPowerMode" # [<bool>] - #Option "DynamicPM" # [<bool>] - #Option "NewPLL" # [<bool>] - #Option "ZaphodHeads" # <str> - Identifier "Card0" - Driver "radeon" - BusID "PCI:0:1:0" -EndSection - -Section "Screen" - Identifier "Screen0" - Device "Card0" - Monitor "Monitor0" - SubSection "Display" - Viewport 0 0 - Depth 1 - EndSubSection - SubSection "Display" - Viewport 0 0 - Depth 4 - EndSubSection - SubSection "Display" - Viewport 0 0 - Depth 8 - EndSubSection - SubSection "Display" - Viewport 0 0 - Depth 15 - EndSubSection - SubSection "Display" - Viewport 0 0 - Depth 16 - EndSubSection - SubSection "Display" - Viewport 0 0 - Depth 24 - EndSubSection -EndSection - diff --git a/common/recipes-graphics/xorg-xserver/xserver-xf86-config_0.1.bbappend b/common/recipes-graphics/xorg-xserver/xserver-xf86-config_0.1.bbappend deleted file mode 100644 index 57926ab0..00000000 --- a/common/recipes-graphics/xorg-xserver/xserver-xf86-config_0.1.bbappend +++ /dev/null @@ -1,43 +0,0 @@ -FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" - -# Additional options that you want -# to set in final xorg configuration. -# Convention is option,value. If there's -# no value requred simply skip just -# like DRI3. -AMDGPU_OPTS = "DRI3, TearFree,on" -RADEON_OPTS = "" - -do_install_append_amdgpu () { - if [ "${RT_KERNEL_AMD}" = "yes" ]; then - sed -i -e 's/^\tDriver "radeon"/\tDriver "fbdev"/' ${D}/${sysconfdir}/X11/xorg.conf - sed -i -e 's/^\tDriver "amdgpu"/\tDriver "fbdev"/' ${D}/${sysconfdir}/X11/xorg.conf - else - sed -i -e 's/^\tDriver "radeon"/\tDriver "amdgpu"/' ${D}/${sysconfdir}/X11/xorg.conf - sed -i -e 's/^\tDriver "fbdev"/\tDriver "amdgpu"/' ${D}/${sysconfdir}/X11/xorg.conf - set_xorg_opts "${AMDGPU_OPTS}" - fi -} - -do_install_append_radeon () { - if [ "${RT_KERNEL_AMD}" = "yes" ]; then - sed -i -e 's/^\tDriver "radeon"/\tDriver "fbdev"/' ${D}/${sysconfdir}/X11/xorg.conf - sed -i -e 's/^\tDriver "amdgpu"/\tDriver "fbdev"/' ${D}/${sysconfdir}/X11/xorg.conf - else - sed -i -e 's/^\tDriver "amdgpu"/\tDriver "radeon"/' ${D}/${sysconfdir}/X11/xorg.conf - sed -i -e 's/^\tDriver "fbdev"/\tDriver "radeon"/' ${D}/${sysconfdir}/X11/xorg.conf - set_xorg_opts "${RADEON_OPTS}" - fi -} - -set_xorg_opts() { - for opt_val in ${1}; do - opt=$(echo ${opt_val} | cut -d',' -f1) - val=$(echo ${opt_val} | cut -d',' -f2) - if [ "${val}" = "" ]; then - sed -i -e "/^\tIdentifier \"Card0\"/i \\\tOption \"${opt}\"" ${D}/${sysconfdir}/X11/xorg.conf - else - sed -i -e "/^\tIdentifier \"Card0\"/i \\\tOption \"${opt}\" \"${val}\"" ${D}/${sysconfdir}/X11/xorg.conf - fi - done -} diff --git a/common/recipes-graphics/xorg-xserver/xserver-xorg_%.bbappend b/common/recipes-graphics/xorg-xserver/xserver-xorg_%.bbappend deleted file mode 100644 index 9f8848f4..00000000 --- a/common/recipes-graphics/xorg-xserver/xserver-xorg_%.bbappend +++ /dev/null @@ -1,3 +0,0 @@ -PACKAGECONFIG[glamor] = "--enable-glamor,--disable-glamor,libepoxy" -PACKAGECONFIG_append_amdgpu = " glamor xshmfence dri3" -PACKAGECONFIG_append_radeon = " glamor xshmfence" |