Hello community, here is the log from the commit of package gfxboot for openSUSE:Factory checked in at 2017-09-13 21:35:35 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/gfxboot (Old) and /work/SRC/openSUSE:Factory/.gfxboot.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gfxboot" Wed Sep 13 21:35:35 2017 rev:132 rq:523610 version:4.5.22 Changes: -------- --- /work/SRC/openSUSE:Factory/gfxboot/gfxboot.changes 2017-05-17 10:46:36.060268301 +0200 +++ /work/SRC/openSUSE:Factory/.gfxboot.new/gfxboot.changes 2017-09-13 21:35:56.302891635 +0200 @@ -1,0 +2,18 @@ +Tue Sep 12 08:50:07 UTC 2017 - wfe...@opensuse.org + +- color bits detection: add workaround for broken vbe info +- better fallback video mode selection +- 4.5.22 + +-------------------------------------------------------------------- +Tue Sep 12 08:50:07 UTC 2017 - opensuse-packag...@opensuse.org + +- bincode: Fix coreboot LFB mode + +-------------------------------------------------------------------- +Tue Sep 12 08:50:07 UTC 2017 - wfe...@opensuse.org + +- merge gh#openSUSE/gfxboot#26 +- prefer linear framebuffer modes for drawing (bsc#980570) + +-------------------------------------------------------------------- Old: ---- gfxboot-4.5.21.tar.xz New: ---- gfxboot-4.5.22.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ gfxboot.spec ++++++ --- /var/tmp/diff_new_pack.WX4Vwe/_old 2017-09-13 21:36:14.456337466 +0200 +++ /var/tmp/diff_new_pack.WX4Vwe/_new 2017-09-13 21:36:14.456337466 +0200 @@ -17,7 +17,7 @@ Name: gfxboot -Version: 4.5.21 +Version: 4.5.22 Release: 0 Summary: Graphical Boot Logo for GRUB, LILO and SYSLINUX License: GPL-2.0+ ++++++ KDE.tar.xz ++++++ ++++++ SLED.tar.xz ++++++ ++++++ SLES.tar.xz ++++++ ++++++ examples.tar.xz ++++++ ++++++ gfxboot-4.5.21.tar.xz -> gfxboot-4.5.22.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gfxboot-4.5.21/VERSION new/gfxboot-4.5.22/VERSION --- old/gfxboot-4.5.21/VERSION 2017-05-09 16:34:05.000000000 +0200 +++ new/gfxboot-4.5.22/VERSION 2017-09-12 10:50:07.000000000 +0200 @@ -1 +1 @@ -4.5.21 +4.5.22 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gfxboot-4.5.21/bincode.asm new/gfxboot-4.5.22/bincode.asm --- old/gfxboot-4.5.21/bincode.asm 2017-05-09 16:34:05.000000000 +0200 +++ new/gfxboot-4.5.22/bincode.asm 2017-09-12 10:50:07.000000000 +0200 @@ -312,10 +312,12 @@ gfx_mode dw 3 ; != 0 if we're using a vbe mode (hi byte of gfx_mode) vbe_active equ gfx_mode + 1 -pixel_bits db 0 ; pixel size (8 or 16) -color_bits db 0 ; color bits (8, 15 or 16) +pixel_bits db 0 ; pixel size (8, 16, or 32) +color_bits db 0 ; color bits (8, 15, 16, or 24) pixel_bytes dd 0 ; pixel size in bytes +; framebuffer start +framebuffer dd 0 ; (lin) ; segment address of writeable window window_seg_w dw 0 ; segment address of readable window (= gfx_window_seg_w if 0) @@ -324,6 +326,8 @@ window_inc db 0 ; currently mapped window mapped_window db 0 +; do we use the framebuffer for drawing? +fb_active db 0 ; cursor position gfx_cur equ $ ; both x & y @@ -3394,6 +3398,14 @@ pop word [screen_width] push word [es:edi+14h] pop word [screen_height] + xor eax,eax + test word [gfx_mode],0x4000 + jz set_mode_23 + mov eax,[es:edi+28h] +set_mode_23: + mov [framebuffer],eax + or eax,eax + setnz byte [fb_active] movzx eax,byte [es:edi+1dh] inc eax @@ -3413,6 +3425,14 @@ mov dh,[es:edi+1fh] ; red add dh,[es:edi+21h] ; green add dh,[es:edi+23h] ; blue + mov dl,dh + add dl,[es:edi+25h] ; reserved + + ; workaround for broken VBE info + ; assume pixel size (ah) to be at least r+g+b+reserved bits (dl) + cmp dl,ah + jbe set_mode_40 + mov ah,dl jmp set_mode_40 set_mode_30: cmp al,4 ; PL 8 @@ -3434,6 +3454,11 @@ mov [pixel_bytes],ah mov [color_bits],dh + ; VBE linear framebuffer doesn't use win A / win B segments + ; skip the test and proceed + cmp byte [fb_active],0 + jnz set_mode_60 + ; we check if win A is readable _and_ writable; if not, we want ; at least a writable win A and a readable win B ; other, even more silly variations are not supported @@ -3479,6 +3504,7 @@ jz set_mode_80 mov [window_inc],al mov byte [mapped_window],0ffh +set_mode_60: mov ax,4f02h mov bx,[gfx_mode] int 10h @@ -3501,6 +3527,17 @@ mode_init: ; graphics window selectors + cmp byte [fb_active],0 + jz mode_init_20 + + mov eax,[framebuffer] + mov si,pm_seg.screen_w16 + call set_gdt_base_pm + mov si,pm_seg.screen_r16 + call set_gdt_base_pm + jmp mode_init_40 + +mode_init_20: movzx eax,word [window_seg_w] shl eax,4 mov si,pm_seg.screen_w16 @@ -3508,12 +3545,13 @@ movzx ecx,word [window_seg_r] shl ecx,4 - jz mode_init_05 + jz mode_init_30 mov eax,ecx -mode_init_05: +mode_init_30: mov si,pm_seg.screen_r16 call set_gdt_base_pm +mode_init_40: ; pixel get/set functions mov dword [setpixel],setpixel_8 @@ -7405,6 +7443,25 @@ ret +;; screen.framebuffer - ptr to framebuffer +; +; group: draw +; +; ( -- ptr1 ) +; +; ptr1: ptr to framebuffer or undef if no fb mode is active +; +; example +; screen.framebuffer +; + + bits 32 + +prim_screenframebuffer: + mov eax,[framebuffer] + jmp pr_getptr_or_none + + ;; screen.size - screen size in pixel ; ; group: gfx.screen @@ -9608,10 +9665,23 @@ jmp prim_setmode_80 prim_setmode_30: xchg [gfx_mode],ax + + ; try fb mode first + or byte [gfx_mode + 1],40h + push eax + call set_mode + pop eax + jnc prim_setmode_60 + +prim_setmode_40: + ; fall back to windowed mode + and byte [gfx_mode + 1],~40h push eax call set_mode pop eax jnc prim_setmode_60 + + ; restore last mode xchg [gfx_mode],ax call set_mode stc @@ -12400,6 +12470,32 @@ jz set_win_90 cmp [mapped_window],al jz set_win_90 + cmp byte [fb_active],0 + jz set_win_40 + pusha + mov [mapped_window],al + mov ah,0 + shl eax,10h + add eax,[framebuffer] + mov si,pm_seg.screen_w16 + call set_gdt_base_pm + mov si,pm_seg.screen_r16 + call set_gdt_base_pm + + mov ax,fs + cmp ax,pm_seg.screen_r16 + jnz set_win_10 + mov fs,ax +set_win_10: + mov ax,gs + cmp ax,pm_seg.screen_w16 + jnz set_win_20 + mov gs,ax +set_win_20: + + popa + jmp set_win_90 +set_win_40: pusha mov [mapped_window],al mov ah,[window_inc] @@ -12821,6 +12917,23 @@ movzx eax,word [rm_seg.es] shl eax,4 add eax,ebp + + push eax + mov eax,100h*16 + call calloc + xchg eax,edi + pop eax + + or edi,edi + jz cfont_init_90 + + ; copy font for faster access + mov esi,eax + mov eax,edi + mov ecx,100h*16 + es rep movsb + +cfont_init_90: mov [cfont.lin],eax mov dword [cfont_height],16 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gfxboot-4.5.21/changelog new/gfxboot-4.5.22/changelog --- old/gfxboot-4.5.21/changelog 2017-05-09 16:34:05.000000000 +0200 +++ new/gfxboot-4.5.22/changelog 2017-09-12 10:50:07.000000000 +0200 @@ -1,3 +1,10 @@ +2017-06-21: 4.5.22 + - merge pr gh#openSUSE/gfxboot#26 + - better fallback video mode selection + - color bits detection: add workaround for broken vbe info + - bincode: Fix coreboot LFB mode + - prefer linear framebuffer modes for drawing (bsc #980570) + 2017-05-09: 4.5.21 - merge pr gh#openSUSE/gfxboot#24 - fix UK keyboard setting (bsc #1033202) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gfxboot-4.5.21/mk_vocabulary new/gfxboot-4.5.22/mk_vocabulary --- old/gfxboot-4.5.21/mk_vocabulary 2017-05-09 16:34:05.000000000 +0200 +++ new/gfxboot-4.5.22/mk_vocabulary 2017-09-12 10:50:07.000000000 +0200 @@ -17,7 +17,7 @@ trace dtrace malloc free realloc memsize dumpmem gettype settype - screen.size image.colors vscreen.size monitorsize displaysizes + screen.size image.colors vscreen.size monitorsize displaysizes screen.framebuffer moveto currentpoint lineto setcolor currentcolor putpixel getpixel setfont currentfont fontheight strsize show settextmodecolor image loadpalette setpalette getpalette ++++++ openSUSE.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/themes/openSUSE/src/common.inc new/themes/openSUSE/src/common.inc --- old/themes/openSUSE/src/common.inc 2017-05-09 16:34:05.000000000 +0200 +++ new/themes/openSUSE/src/common.inc 2017-09-12 10:50:07.000000000 +0200 @@ -1599,6 +1599,47 @@ % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +% Set video mode. +% +% Prefer 32 bit mode with fallback to 16 bit. +% +% ( width height -- true|false ) +% +/set_videomode { + over over + 32 findmode setmode { + pop pop true + } { + 16 findmode setmode + } ifelse +} def + + +% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +% Find fallback video mode. +% +% Pick first mode that is at least 640x480. +% +% Return 0 0 if no mode found. +% +% ( -- width height ) +% +/fallback_videomode { + 0 1 videomodes { + videomodeinfo .undef eq { + pop + } { + pop + over 640 ge over 480 ge and { return } if + } ifelse + pop pop + } for + + 0 0 +} def + + +% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % Set global config variables. % @@ -1618,20 +1659,17 @@ /screen.fallback false def -config.screen.width config.screen.height 32 findmode setmode not { - config.screen.width config.screen.height 16 findmode setmode not { - /screen.fallback true def - 640 480 16 findmode setmode not { - 640 480 32 findmode setmode not { - false .end - } if - } if - } if +config.screen.width config.screen.height set_videomode not { + fallback_videomode dup 0 eq { pop pop false .end } if + set_videomode not { false .end } if + /screen.fallback true def } if % prepend fallback section to layout section list screen.fallback { - /gfxconfig.layout [ "640x480" gfxconfig.layout { } forall ] gfxconfig.layout free def + /fb_tmp_buf 64 string def + screen.size exch "%dx%d" fb_tmp_buf sprintf + /gfxconfig.layout [ fb_tmp_buf gfxconfig.layout { } forall ] gfxconfig.layout free def } if ++++++ upstream.tar.xz ++++++