まさしく、ただのメモ書き(忘れないように)
いつの頃から不明だがつ上使用している xscreensaver (GL-Text)の表示が
デフォルトでシステム情報表示になっていて、個人的に好みではないことから修正。
{HOME]/.xscreensaver ファイルの該当行を以下のように修正。
GL: gltext -root -text "`cat /etc/slackware-version && uname -r -o`" \n\
バイクとLinuxに戯れる日々
diff --git a/kernel/common/inc/nv-linux.h b/kernel/common/inc/nv-linux.h index 0d7e516..dae9c09 100644 --- a/kernel/common/inc/nv-linux.h +++ b/kernel/common/inc/nv-linux.h @@ -115,7 +115,9 @@ #include <linux/moduleparam.h> /* module_param() */ #include <asm/tlbflush.h> /* flush_tlb(), flush_tlb_all() */ +#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 11, 0)) #include <asm/kmap_types.h> /* page table entry lookup */ +#endif #include <linux/pci.h> /* pci_find_class, etc */ #include <linux/interrupt.h> /* tasklets, interrupt helpers */ diff --git a/kernel/conftest.sh b/kernel/conftest.sh index 23aca36..cc9543b 100755 --- a/kernel/conftest.sh +++ b/kernel/conftest.sh @@ -1729,6 +1729,8 @@ compile_test() { # Determine if the DRM subsystem is usable # CODE=" + #include <linux/version.h> + #if defined(NV_DRM_DRMP_H_PRESENT) #include <drm/drmP.h> #endif @@ -1737,6 +1739,10 @@ compile_test() { #include <drm/drm_drv.h> #endif + #if defined(NV_DRM_DRM_GEM_H_PRESENT) + #include <drm/drm_gem.h> + #endif + #if defined(NV_DRM_DRM_PRIME_H_PRESENT) #include <drm/drm_prime.h> #endif @@ -1746,13 +1752,22 @@ compile_test() { #endif void conftest_drm_available(void) { - struct drm_driver drv; /* 2013-01-15 89177644a7b6306e6084a89eab7e290f4bfef397 */ +#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 11, 0)) + // Avoid failure due to all the changes in torvalds/linux commit d693def4fd1c23f1ca5aed1afb9993b3a2069ad2 + struct drm_driver drv; drv.gem_prime_pin = 0; drv.gem_prime_get_sg_table = 0; drv.gem_prime_vmap = 0; drv.gem_prime_vunmap = 0; +#else + struct drm_gem_object_funcs gem; + gem.pin = 0; + gem.get_sg_table = 0; + gem.vmap = 0; + gem.vunmap = 0; +#endif (void)drm_gem_prime_import; (void)drm_gem_prime_export; diff --git a/kernel/nvidia-drm/nvidia-drm-crtc.c b/kernel/nvidia-drm/nvidia-drm-crtc.c index 780df0e..35eb1e4 100644 --- a/kernel/nvidia-drm/nvidia-drm-crtc.c +++ b/kernel/nvidia-drm/nvidia-drm-crtc.c @@ -20,6 +20,7 @@ * DEALINGS IN THE SOFTWARE. */ +#include <linux/version.h> #include "nvidia-drm-conftest.h" /* NV_DRM_ATOMIC_MODESET_AVAILABLE */ #if defined(NV_DRM_ATOMIC_MODESET_AVAILABLE) @@ -336,9 +337,19 @@ static int head_modeset_config_attach_connector( * the 'nv_drm_crtc_state::req_config', that is fine becase 'nv_drm_crtc_state' * will be discarded if ->atomic_check() fails. */ +#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 11, 0)) static int nv_drm_crtc_atomic_check(struct drm_crtc *crtc, struct drm_crtc_state *crtc_state) +#else +// Changes in torvalds/linux commit d693def4fd1c23f1ca5aed1afb9993b3a2069ad2 +static int nv_drm_crtc_atomic_check(struct drm_crtc *crtc, + struct drm_atomic_state *atomic_state) +#endif { +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 11, 0)) + // Changes in torvalds/linux commit d693def4fd1c23f1ca5aed1afb9993b3a2069ad2 + struct drm_crtc_state *crtc_state = drm_atomic_get_new_crtc_state(atomic_state, crtc); +#endif struct nv_drm_crtc_state *nv_crtc_state = to_nv_crtc_state(crtc_state); struct NvKmsKapiHeadRequestedConfig *req_config = &nv_crtc_state->req_config; @@ -408,8 +419,14 @@ static void nv_drm_crtc_disable(struct drm_crtc *crtc) } #ifdef NV_DRM_CRTC_HELPER_FUNCS_HAS_ATOMIC_ENABLE +#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 11, 0)) static void nv_drm_crtc_atomic_enable(struct drm_crtc *crtc, struct drm_crtc_state *old_crtc_state) +#else +// Changes in torvalds/linux commit d693def4fd1c23f1ca5aed1afb9993b3a2069ad2 +static void nv_drm_crtc_atomic_enable(struct drm_crtc *crtc, + struct drm_atomic_state *old_atomic_state) +#endif { } diff --git a/kernel/nvidia-drm/nvidia-drm-drv.c b/kernel/nvidia-drm/nvidia-drm-drv.c index 1b4cc6d..0c26646 100644 --- a/kernel/nvidia-drm/nvidia-drm-drv.c +++ b/kernel/nvidia-drm/nvidia-drm-drv.c @@ -20,6 +20,7 @@ * DEALINGS IN THE SOFTWARE. */ +#include <linux/version.h> #include "nvidia-drm-conftest.h" /* NV_DRM_AVAILABLE and NV_DRM_DRM_GEM_H_PRESENT */ #include "nvidia-drm-priv.h" @@ -700,10 +701,13 @@ static struct drm_driver nv_drm_driver = { .num_ioctls = ARRAY_SIZE(nv_drm_ioctls), .prime_handle_to_fd = drm_gem_prime_handle_to_fd, +#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 11, 0)) + // Deprecated in favour of equivalent in drm_get_object in torvalds/linux commit d693def4fd1c23f1ca5aed1afb9993b3a2069ad2 .gem_prime_export = nv_drm_gem_prime_export, .gem_prime_get_sg_table = nv_drm_gem_prime_get_sg_table, .gem_prime_vmap = nv_drm_gem_prime_vmap, .gem_prime_vunmap = nv_drm_gem_prime_vunmap, +#endif #if defined(NV_DRM_DRIVER_HAS_GEM_PRIME_RES_OBJ) .gem_prime_res_obj = nv_drm_gem_prime_res_obj, @@ -727,11 +731,14 @@ static struct drm_driver nv_drm_driver = { .desc = "NVIDIA DRM driver", .date = "20160202", +#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 11, 0)) + // This is now behind a CONFIG_DRM_LEGACY Kconfig flag.(torvalds/linux commit 57bb1ee6034046be70aed33fd6d447bb2b7261fa) #if defined(NV_DRM_DRIVER_HAS_LEGACY_DEV_LIST) .legacy_dev_list = LIST_HEAD_INIT(nv_drm_driver.legacy_dev_list), #else .device_list = LIST_HEAD_INIT(nv_drm_driver.device_list), #endif +#endif }; @@ -758,8 +765,6 @@ static void nv_drm_update_drm_driver_features(void) nv_drm_driver.dumb_create = nv_drm_dumb_create; nv_drm_driver.dumb_map_offset = nv_drm_dumb_map_offset; nv_drm_driver.dumb_destroy = drm_gem_dumb_destroy; - - nv_drm_driver.gem_vm_ops = &nv_drm_gem_vma_ops; #endif /* NV_DRM_ATOMIC_MODESET_AVAILABLE */ } diff --git a/kernel/nvidia-drm/nvidia-drm-gem-user-memory.c b/kernel/nvidia-drm/nvidia-drm-gem-user-memory.c index 4ac4559..28ef84c 100644 --- a/kernel/nvidia-drm/nvidia-drm-gem-user-memory.c +++ b/kernel/nvidia-drm/nvidia-drm-gem-user-memory.c @@ -20,6 +20,7 @@ * DEALINGS IN THE SOFTWARE. */ +#include <linux/version.h> #include "nvidia-drm-conftest.h" #if defined(NV_DRM_AVAILABLE) @@ -32,6 +33,8 @@ #include "nvidia-drm-helper.h" #include "nvidia-drm-ioctl.h" +#include "linux/dma-buf.h" + static inline void __nv_drm_gem_user_memory_free(struct nv_drm_gem_object *nv_gem) { @@ -54,6 +57,7 @@ static struct sg_table *__nv_drm_gem_user_memory_prime_get_sg_table( nv_user_memory->pages_count); } +#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 11, 0)) static void *__nv_drm_gem_user_memory_prime_vmap( struct nv_drm_gem_object *nv_gem) { @@ -69,6 +73,28 @@ static void __nv_drm_gem_user_memory_prime_vunmap( { nv_drm_vunmap(address); } +#else +// Updated vmap/vunmap operations to use struct dma_buf_map instead of raw pointers +// See torvalds/linux commits ccc22d41bd9acec58cdc7c3b012e1887aba40af4, 6619ccf1bb1d0ebb071f758111efa83918b216fc +static int __nv_drm_gem_user_memory_prime_vmap( + struct nv_drm_gem_object *nv_gem, + struct dma_buf_map *map) +{ + struct nv_drm_gem_user_memory *nv_user_memory = to_nv_user_memory(nv_gem); + + map->vaddr = nv_drm_vmap(nv_user_memory->pages, + nv_user_memory->pages_count); + map->is_iomem = false; + return 0; +} + +static void __nv_drm_gem_user_memory_prime_vunmap( + struct nv_drm_gem_object *gem, + struct dma_buf_map *map) +{ + nv_drm_vunmap(map->vaddr); +} +#endif static struct nv_drm_gem_object_funcs __nv_gem_user_memory_ops = { .free = __nv_drm_gem_user_memory_free, diff --git a/kernel/nvidia-drm/nvidia-drm-gem.c b/kernel/nvidia-drm/nvidia-drm-gem.c index 4ab8b36..9556993 100644 --- a/kernel/nvidia-drm/nvidia-drm-gem.c +++ b/kernel/nvidia-drm/nvidia-drm-gem.c @@ -20,6 +20,7 @@ * DEALINGS IN THE SOFTWARE. */ +#include <linux/version.h> #include "nvidia-drm-conftest.h" #if defined(NV_DRM_AVAILABLE) @@ -29,6 +30,7 @@ #include "nvidia-drm-prime-fence.h" #include "nvidia-drm-gem.h" #include "nvidia-dma-resv-helper.h" +#include "nvidia-drm-gem-nvkms-memory.h" #if defined(NV_DRM_DRM_PRIME_H_PRESENT) #include <drm/drm_prime.h> @@ -56,6 +58,13 @@ void nv_drm_gem_free(struct drm_gem_object *gem) static struct drm_gem_object_funcs nv_drm_gem_funcs = { .free = nv_drm_gem_free, .get_sg_table = nv_drm_gem_prime_get_sg_table, +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 11, 0)) + // New functions moved from drm_driver because of torvalds/linux commit d693def4fd1c23f1ca5aed1afb9993b3a2069ad2 + .export = drm_gem_prime_export, + .vmap = nv_drm_gem_prime_vmap, + .vunmap = nv_drm_gem_prime_vunmap, + .vm_ops = &nv_drm_gem_vma_ops, +#endif }; #endif @@ -124,6 +133,7 @@ struct sg_table *nv_drm_gem_prime_get_sg_table(struct drm_gem_object *gem) return ERR_PTR(-ENOTSUPP); } +#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 11, 0)) void *nv_drm_gem_prime_vmap(struct drm_gem_object *gem) { struct nv_drm_gem_object *nv_gem = to_nv_gem_object(gem); @@ -143,6 +153,29 @@ void nv_drm_gem_prime_vunmap(struct drm_gem_object *gem, void *address) nv_gem->ops->prime_vunmap(nv_gem, address); } } +#else +// Updated vmap/vunmap operations to use struct dma_buf_map instead of raw pointers +// See torvalds/linux commits ccc22d41bd9acec58cdc7c3b012e1887aba40af4, 6619ccf1bb1d0ebb071f758111efa83918b216fc +int nv_drm_gem_prime_vmap(struct drm_gem_object *gem, struct dma_buf_map *map) +{ + struct nv_drm_gem_object *nv_gem = to_nv_gem_object(gem); + + if (nv_gem->ops->prime_vmap != NULL) { + return nv_gem->ops->prime_vmap(nv_gem, map); + } + + return -ENOTSUPP; +} + +void nv_drm_gem_prime_vunmap(struct drm_gem_object *gem, struct dma_buf_map *map) +{ + struct nv_drm_gem_object *nv_gem = to_nv_gem_object(gem); + + if (nv_gem->ops->prime_vunmap != NULL) { + nv_gem->ops->prime_vunmap(nv_gem, map); + } +} +#endif #if defined(NV_DRM_DRIVER_HAS_GEM_PRIME_RES_OBJ) nv_dma_resv_t* nv_drm_gem_prime_res_obj(struct drm_gem_object *obj) diff --git a/kernel/nvidia-drm/nvidia-drm-gem.h b/kernel/nvidia-drm/nvidia-drm-gem.h index fd64b2d..e12fafb 100644 --- a/kernel/nvidia-drm/nvidia-drm-gem.h +++ b/kernel/nvidia-drm/nvidia-drm-gem.h @@ -23,6 +23,7 @@ #ifndef __NVIDIA_DRM_GEM_H__ #define __NVIDIA_DRM_GEM_H__ +#include <linux/version.h> #include "nvidia-drm-conftest.h" #if defined(NV_DRM_AVAILABLE) @@ -44,13 +45,22 @@ #include "nvidia-dma-resv-helper.h" #endif +#include "linux/dma-buf.h" + struct nv_drm_gem_object; struct nv_drm_gem_object_funcs { void (*free)(struct nv_drm_gem_object *nv_gem); struct sg_table *(*prime_get_sg_table)(struct nv_drm_gem_object *nv_gem); +#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 11, 0)) void *(*prime_vmap)(struct nv_drm_gem_object *nv_gem); void (*prime_vunmap)(struct nv_drm_gem_object *nv_gem, void *address); +#else + // Updated vmap/vunmap operations to use struct dma_buf_map instead of raw pointers + // See torvalds/linux commits ccc22d41bd9acec58cdc7c3b012e1887aba40af4, 6619ccf1bb1d0ebb071f758111efa83918b216fc + int (*prime_vmap)(struct nv_drm_gem_object *nv_gem, struct dma_buf_map *map); + void (*prime_vunmap)(struct nv_drm_gem_object *nv_gem, struct dma_buf_map *map); +#endif }; struct nv_drm_gem_object { @@ -185,9 +195,17 @@ void nv_drm_gem_object_init(struct nv_drm_device *nv_dev, struct sg_table *nv_drm_gem_prime_get_sg_table(struct drm_gem_object *gem); +#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 11, 0)) void *nv_drm_gem_prime_vmap(struct drm_gem_object *gem); void nv_drm_gem_prime_vunmap(struct drm_gem_object *gem, void *address); +#else +// Updated vmap/vunmap operations to use struct dma_buf_map instead of raw pointers +// See torvalds/linux commits ccc22d41bd9acec58cdc7c3b012e1887aba40af4, 6619ccf1bb1d0ebb071f758111efa83918b216fc +int nv_drm_gem_prime_vmap(struct drm_gem_object *gem, struct dma_buf_map *map); + +void nv_drm_gem_prime_vunmap(struct drm_gem_object *gem, struct dma_buf_map *map); +#endif #if defined(NV_DRM_DRIVER_HAS_GEM_PRIME_RES_OBJ) nv_dma_resv_t* nv_drm_gem_prime_res_obj(struct drm_gem_object *obj); |
Index: NVIDIA-Linux-x86_64-390.141-no-compat32/kernel/nvidia-drm/nvidia-drm-drv.c =================================================================== --- NVIDIA-Linux-x86_64-390.141-no-compat32.orig/kernel/nvidia-drm/nvidia-drm-drv.c +++ NVIDIA-Linux-x86_64-390.141-no-compat32/kernel/nvidia-drm/nvidia-drm-drv.c @@ -741,6 +741,17 @@ static struct drm_driver nv_drm_driver = #endif }; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 12, 0) +/* Starting with kernel 5.12, drm_gem_dumb_destroy() is no longer exported. + * For that reason, we need to supply a replacement version. + */ +int replace_dumb_destroy(struct drm_file *file, + struct drm_device *dev, + u32 handle) +{ + return drm_gem_handle_delete(file, handle); +} +#endif /* * Update the global nv_drm_driver for the intended features. @@ -764,7 +775,11 @@ static void nv_drm_update_drm_driver_fea nv_drm_driver.dumb_create = nv_drm_dumb_create; nv_drm_driver.dumb_map_offset = nv_drm_dumb_map_offset; +#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 12, 0) nv_drm_driver.dumb_destroy = drm_gem_dumb_destroy; +#else + nv_drm_driver.dumb_destroy = replace_dumb_destroy; +#endif #endif /* NV_DRM_ATOMIC_MODESET_AVAILABLE */ } |
#!/bin/bash # Copyright 2015, 2016, 2018 Patrick J. Volkerding, Sebeka, Minnesota, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is # permitted provided that the following conditions are met: # # 1. Redistributions of this script must retain the above copyright # notice, this list of conditions and the following disclaimer. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. cd $(dirname $0) ; CWD=$(pwd) PKGNAM=libjpeg-turbo VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z | rev | cut -f 3- -d . | cut -f 1 -d - | rev)} BUILD=${BUILD:-1jw} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then case "$(uname -m)" in i?86) ARCH=i586 ;; arm*) readelf /usr/bin/file -A | egrep -q "Tag_CPU.*[4,5]" && ARCH=arm || ARCH=armv7hl ;; # Unless $ARCH is already set, use uname -m for all other archs: *) ARCH=$(uname -m) ;; esac export ARCH fi # If the variable PRINT_PACKAGE_NAME is set, then this script will report what # the name of the created package would be, and then exit. This information # could be useful to other scripts. if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then echo "$PKGNAM-$VERSION-$ARCH-$BUILD.txz" exit 0 fi NUMJOBS=${NUMJOBS:-" -j$(expr $(nproc) + 1) "} if [ "$ARCH" = "i386" ]; then SLKCFLAGS="-O2 -march=i386 -mcpu=i686" LIBDIRSUFFIX="" elif [ "$ARCH" = "i486" ]; then SLKCFLAGS="-O2 -march=i486 -mtune=i686" LIBDIRSUFFIX="" elif [ "$ARCH" = "i586" ]; then SLKCFLAGS="-O2 -march=i586 -mtune=i686" LIBDIRSUFFIX="" elif [ "$ARCH" = "i686" ]; then SLKCFLAGS="-O2 -march=i686" LIBDIRSUFFIX="" elif [ "$ARCH" = "s390" ]; then SLKCFLAGS="-O2" LIBDIRSUFFIX="" elif [ "$ARCH" = "x86_64" ]; then SLKCFLAGS="-O2 -fPIC" LIBDIRSUFFIX="64" elif [ "$ARCH" = "armv7hl" ]; then SLKCFLAGS="-O3 -march=armv7-a -mfpu=vfpv3-d16" LIBDIRSUFFIX="" else SLKCFLAGS="-O2" LIBDIRSUFFIX="" fi TMP=${TMP:-/tmp} PKG=$TMP/package-$PKGNAM rm -rf $PKG mkdir -p $TMP $PKG cd $TMP rm -rf $PKGNAM-$VERSION tar xvf $CWD/$PKGNAM-$VERSION.tar.?z || exit 1 cd $PKGNAM-$VERSION || exit 1 chown -R root:root . find . \ \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \ -exec chmod 755 {} \; -o \ \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ -exec chmod 644 {} \; # Configure, build, and install: mkdir build cd build cmake \ -DCMAKE_C_FLAGS="$SLKCFLAGS" \ -DCMAKE_CXX_FLAGS="$SLKCFLAGS" \ -DCMAKE_INSTALL_PREFIX=/usr \ -DLIB_SUFFIX="$LIBDIRSUFFIX" \ -DCMAKE_INSTALL_DOCDIR=/usr/doc/libjpeg-turbo-${VERSION} \ -DCMAKE_INSTALL_MANDIR=/usr/man \ -DENABLE_STATIC=ON \ .. || exit 1 make $NUMJOBS || make || exit 1 make install DESTDIR=$PKG || exit 1 cd .. # Don't ship .la files: rm -f $PKG/{,usr/}lib${LIBDIRSUFFIX}/*.la # Strip binaries: ( cd $PKG find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null ) # Add a documentation directory: mkdir -p $PKG/usr/doc/${PKGNAM}-$VERSION cp -a \ BUILDING.md ChangeLog.md LICENSE.md README* \ example.c libjpeg.txt structure.txt usage.txt wizard.txt \ $PKG/usr/doc/${PKGNAM}-$VERSION chmod 644 $PKG/usr/doc/${PKGNAM}-$VERSION/* # Compress and if needed symlink the man pages: if [ -d $PKG/usr/man ]; then ( cd $PKG/usr/man for manpagedir in $(find . -type d -name "man*") ; do ( cd $manpagedir for eachpage in $( find . -type l -maxdepth 1) ; do ln -s $( readlink $eachpage ).gz $eachpage.gz rm $eachpage done gzip -9 *.? ) done ) fi # If there's a ChangeLog, installing at least part of the recent history # is useful, but don't let it get totally out of control: if [ -r ChangeLog.md ]; then DOCSDIR=$(echo $PKG/usr/doc/${PKGNAM}-$VERSION) cat ChangeLog.md | head -n 1000 > $DOCSDIR/ChangeLog.md touch -r ChangeLog.md $DOCSDIR/ChangeLog.md fi cp $CWD/${PKGNAM}.SlackBuild $PKG/usr/doc/${PKGNAM}-$VERSION/ mkdir -p $PKG/install cat $CWD/slack-desc > $PKG/install/slack-desc cd $PKG /sbin/makepkg -l y -c n $TMP/$PKGNAM-$VERSION-$ARCH-$BUILD.txz |
--- mpv-0.33.1/video/out/placebo/ra_pl.c 2021-04-06 01:45:41.000000000 +0900 +++ mpv-0.33.1.new/video/out/placebo/ra_pl.c 2021-04-21 23:37:11.084000636 +0900 @@ -22,9 +22,7 @@ return ra->fns == &ra_fns_pl ? get_gpu(ra) : NULL; } -#if PL_API_VER >= 60 static struct pl_timer *get_active_timer(const struct ra *ra); -#endif struct ra *ra_create_pl(const struct pl_gpu *gpu, struct mp_log *log) { @@ -144,8 +142,14 @@ .blit_dst = pltex->params.blit_dst, .host_mutable = pltex->params.host_writable, .downloadable = pltex->params.host_readable, +#if PL_API_VER >= 103 + // These don't exist upstream, so just pick something reasonable + .src_linear = pltex->params.format->caps & PL_FMT_CAP_LINEAR, + .src_repeat = false, +#else .src_linear = pltex->params.sample_mode == PL_TEX_SAMPLE_LINEAR, .src_repeat = pltex->params.address_mode == PL_TEX_ADDRESS_REPEAT, +#endif }, .priv = (void *) pltex, }; @@ -157,32 +161,6 @@ const struct ra_tex_params *params) { const struct pl_gpu *gpu = get_gpu(ra); - - // Check size limits - bool ok = false; - switch (params->dimensions) { - case 1: - ok = params->w <= gpu->limits.max_tex_1d_dim; - break; - - case 2: - ok = params->w <= gpu->limits.max_tex_2d_dim && - params->h <= gpu->limits.max_tex_2d_dim; - break; - - case 3: - ok = params->w <= gpu->limits.max_tex_2d_dim && - params->h <= gpu->limits.max_tex_2d_dim && - params->d <= gpu->limits.max_tex_2d_dim; - break; - }; - - if (!ok) { - MP_ERR(ra, "Texture size %dx%dx%d exceeds dimension limits!\n", - params->w, params->h, params->d); - return NULL; - } - const struct pl_tex *pltex = pl_tex_create(gpu, &(struct pl_tex_params) { .w = params->w, .h = params->dimensions >= 2 ? params->h : 0, @@ -195,10 +173,12 @@ .blit_dst = params->blit_dst || params->render_dst, .host_writable = params->host_mutable, .host_readable = params->downloadable, +#if PL_API_VER < 103 .sample_mode = params->src_linear ? PL_TEX_SAMPLE_LINEAR : PL_TEX_SAMPLE_NEAREST, .address_mode = params->src_repeat ? PL_TEX_ADDRESS_REPEAT : PL_TEX_ADDRESS_CLAMP, +#endif .initial_data = params->initial_data, }); @@ -209,6 +189,10 @@ return NULL; } + // Keep track of these, so we can correctly bind them later + ratex->params.src_repeat = params->src_repeat; + ratex->params.src_linear = params->src_linear; + return ratex; } @@ -230,9 +214,7 @@ .buf = params->buf ? params->buf->priv : NULL, .buf_offset = params->buf_offset, .ptr = (void *) params->src, -#if PL_API_VER >= 60 .timer = get_active_timer(ra), -#endif }; const struct pl_buf *staging = NULL; @@ -285,9 +267,7 @@ .tex = tex, .ptr = params->dst, .stride_w = params->stride / texel_size, -#if PL_API_VER >= 60 .timer = get_active_timer(ra), -#endif }; uint8_t *staging = NULL; @@ -320,19 +300,7 @@ [RA_BUF_TYPE_SHARED_MEMORY] = 0, }; - const struct pl_gpu *gpu = get_gpu(ra); - size_t max_size[] = { - [PL_BUF_TEX_TRANSFER] = gpu->limits.max_xfer_size, - [PL_BUF_UNIFORM] = gpu->limits.max_ubo_size, - [PL_BUF_STORAGE] = gpu->limits.max_ssbo_size, - }; - - if (params->size > max_size[buf_type[params->type]]) { - MP_ERR(ra, "Buffer size %zu exceeds size limits!\n", params->size); - return NULL; - } - - const struct pl_buf *plbuf = pl_buf_create(gpu, &(struct pl_buf_params) { + const struct pl_buf *plbuf = pl_buf_create(get_gpu(ra), &(struct pl_buf_params) { .type = buf_type[params->type], .size = params->size, .host_mapped = params->host_mapped, @@ -399,7 +367,18 @@ pldst.y1 = MPMIN(MPMAX(dst_rc->y1, 0), dst->params.h); } +#if PL_API_VER >= 103 + pl_tex_blit(get_gpu(ra), &(struct pl_tex_blit_params) { + .src = src->priv, + .dst = dst->priv, + .src_rc = plsrc, + .dst_rc = pldst, + .sample_mode = src->params.src_linear ? PL_TEX_SAMPLE_LINEAR + : PL_TEX_SAMPLE_NEAREST, + }); +#else pl_tex_blit(get_gpu(ra), dst->priv, src->priv, pldst, plsrc); +#endif } static const enum pl_var_type var_type[RA_VARTYPE_COUNT] = { @@ -627,9 +606,17 @@ struct pl_desc_binding bind; switch (inp->type) { case RA_VARTYPE_TEX: - case RA_VARTYPE_IMG_W: - bind.object = (* (struct ra_tex **) val->data)->priv; + case RA_VARTYPE_IMG_W: { + struct ra_tex *tex = *((struct ra_tex **) val->data); + bind.object = tex->priv; +#if PL_API_VER >= 103 + bind.sample_mode = tex->params.src_linear ? PL_TEX_SAMPLE_LINEAR + : PL_TEX_SAMPLE_NEAREST; + bind.address_mode = tex->params.src_repeat ? PL_TEX_ADDRESS_REPEAT + : PL_TEX_ADDRESS_CLAMP; +#endif break; + } case RA_VARTYPE_BUF_RO: case RA_VARTYPE_BUF_RW: bind.object = (* (struct ra_buf **) val->data)->priv; @@ -666,8 +653,6 @@ pl_pass_run(get_gpu(ra), &pl_params); } -#if PL_API_VER >= 60 - struct ra_timer_pl { // Because libpplacebo only supports one operation per timer, we need // to use multiple pl_timers to sum up multiple passes/transfers @@ -739,8 +724,6 @@ return t->timers[t->idx_timers++]; } -#endif // PL_API_VER >= 60 - static struct ra_fns ra_fns_pl = { .destroy = destroy_ra_pl, .tex_create = tex_create_pl, @@ -759,11 +742,9 @@ .renderpass_create = renderpass_create_pl, .renderpass_destroy = renderpass_destroy_pl, .renderpass_run = renderpass_run_pl, -#if PL_API_VER >= 60 .timer_create = timer_create_pl, .timer_destroy = timer_destroy_pl, .timer_start = timer_start_pl, .timer_stop = timer_stop_pl, -#endif }; |
MEGAcmdの使用例は以下のような感じです。 ・仮想コンソール起動 ・$ mega-cmd で対話形式の表示になります。
・MEGA CMD > help で使用できるコマンドが表示されます。
・MEGAにログイン MEGA CMD > login [登録したメールアドレス] [パスワード] ・ローカルドライブのファイルをアップロードするには put [PATH/TO/アップロードしたいファイル] [MEGAドライブの転送先ディレクトリ] ・MEGAからファイルをダウンロードするには getコマンドを使います。 例えば MEGAドライブに Videosディレクトリがあったとして、そこの test.mp4 ファイルをローカルの /home/foo/Videos/ にダウンロードする場合、 get Videos/test.mp4 /home/foo/Videos/ ・ログアウトするには logout ・MEGAcmdを終了するには quit MEGAcmdはブラウザを起動しなくてもファイル操作でき、slackware的で個人的には気に入ってます。