From 7a617f78813fcbae635caea8f078fb173b6ae15a Mon Sep 17 00:00:00 2001 From: twilen Date: Wed, 24 Oct 2012 18:29:43 +0000 Subject: [PATCH] Fixed RTG modes that have non-32 pixel divisible width, for example 1366x768. git-svn-id: https://svn.aros.org/svn/aros/trunk/AROS@45946 fb15a70f-31f2-0310-bbcc-cdcc74a49acc --- arch/m68k-amiga/hidd/uaegfx/uaegfxbitmap.c | 12 ++++++++---- arch/m68k-amiga/hidd/uaegfx/uaegfxbitmap.h | 2 +- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/arch/m68k-amiga/hidd/uaegfx/uaegfxbitmap.c b/arch/m68k-amiga/hidd/uaegfx/uaegfxbitmap.c index 7ba832623a..742d9142d4 100644 --- a/arch/m68k-amiga/hidd/uaegfx/uaegfxbitmap.c +++ b/arch/m68k-amiga/hidd/uaegfx/uaegfxbitmap.c @@ -206,8 +206,8 @@ OOP_Object *UAEGFXBitmap__Root__New(OOP_Class *cl, OOP_Object *o, struct pRoot_N data->rgbformat = getrtgformat(csd, data->pixfmtobj); data->width = width; - if (!displayable) - width = (width + 16 - 1) & ~(16 - 1); + data->align = displayable ? 32 : 16; + width = (width + data->align - 1) & ~(data->align - 1); width = CalculateBytesPerRow(csd, width, data->rgbformat); data->bytesperline = width; data->height = height; @@ -305,7 +305,8 @@ VOID UAEGFXBitmap__Root__Set(OOP_Class *cl, OOP_Object *o, struct pRoot_Set *msg modeinfo = getrtgmodeinfo(csd, sync, pf, csd->fakemodeinfo); csd->modeinfo = modeinfo; csd->rgbformat = data->rgbformat; - pw(csd->bitmapextra + PSSO_BitMapExtra_Width, width); + /* PSSO_BitMapExtra_Width needs to be aligned */ + pw(csd->bitmapextra + PSSO_BitMapExtra_Width, (width + data->align - 1) & ~(data->align - 1)); pw(csd->bitmapextra + PSSO_BitMapExtra_Height, height); D(bug("Show %p: (%p:%d) %dx%dx%d (%dx%d) BF=%08x\n", data, data->VideoData, data->memsize, @@ -385,8 +386,11 @@ VOID UAEGFXBitmap__Root__Get(OOP_Class *cl, OOP_Object *o, struct pRoot_Get *msg *msg->storage = csd->disp == data; return; case aoHidd_BitMap_Align: - *msg->storage = 16; + *msg->storage = data->align; return; + case aoHidd_BitMap_BytesPerRow: + *msg->storage = data->bytesperline; + return; case aoHidd_BitMap_IsLinearMem: *msg->storage = TRUE; return; diff --git a/arch/m68k-amiga/hidd/uaegfx/uaegfxbitmap.h b/arch/m68k-amiga/hidd/uaegfx/uaegfxbitmap.h index 89e56afc58..04730c78bc 100644 --- a/arch/m68k-amiga/hidd/uaegfx/uaegfxbitmap.h +++ b/arch/m68k-amiga/hidd/uaegfx/uaegfxbitmap.h @@ -21,7 +21,7 @@ struct bm_data UBYTE *VideoData; ULONG memsize; BOOL invram; - WORD width, height; + WORD width, height, align; WORD disp_width, disp_height; WORD bytesperpixel; WORD bytesperline; -- 2.11.4.GIT