Reviewed-by: Feng Tian
Thanks
Feng
-Original Message-
From: Ni, Ruiyu
Sent: Monday, January 23, 2017 2:12 PM
To: edk2-devel@lists.01.org
Cc: Tian, Feng
Subject: [PATCH 2/3] MdeModulePkg/FrameBufferBltLib: Use dynamic allocated line
buffer
https://bugzilla.tianocore.org/show_bug.cgi?id=339
The patch uses dynamic allocated line buffer to reduce memory usage of frame
buffer configure. (Original implementation uses 0x4000 bytes for line buffer.)
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ruiyu Ni
Cc: Feng Tian
---
.../Library/FrameBufferBltLib/FrameBufferBltLib.c | 24 +++---
1 file changed, 12 insertions(+), 12 deletions(-)
diff --git a/MdeModulePkg/Library/FrameBufferBltLib/FrameBufferBltLib.c
b/MdeModulePkg/Library/FrameBufferBltLib/FrameBufferBltLib.c
index 5f6eddc..011d9c5 100644
--- a/MdeModulePkg/Library/FrameBufferBltLib/FrameBufferBltLib.c
+++ b/MdeModulePkg/Library/FrameBufferBltLib/FrameBufferBltLib.c
@@ -26,12 +26,12 @@ struct FRAME_BUFFER_CONFIGURE {
UINTN BytesPerPixel;
UINTN WidthInPixels;
UINTN Height;
- UINT8 LineBuffer[SIZE_4KB * sizeof
(EFI_GRAPHICS_OUTPUT_BLT_PIXEL)];
UINT8 *FrameBuffer;
EFI_GRAPHICS_PIXEL_FORMAT PixelFormat;
EFI_PIXEL_BITMASK PixelMasks;
INT8PixelShl[4]; // R-G-B-Rsvd
INT8PixelShr[4]; // R-G-B-Rsvd
+ UINT8 LineBuffer[0];
};
CONST EFI_PIXEL_BITMASK mRgbPixelMasks = { @@ -123,15 +123,6 @@
FrameBufferBltConfigure (
return RETURN_INVALID_PARAMETER;
}
- if (*ConfigureSize < sizeof (FRAME_BUFFER_CONFIGURE)) {
-*ConfigureSize = sizeof (FRAME_BUFFER_CONFIGURE);
-return RETURN_BUFFER_TOO_SMALL;
- }
-
- if (Configure == NULL) {
-return RETURN_INVALID_PARAMETER;
- }
-
switch (FrameBufferInfo->PixelFormat) {
case PixelRedGreenBlueReserved8BitPerColor:
BitMask =
@@ -156,6 +147,17 @@ FrameBufferBltConfigure (
FrameBufferBltLibConfigurePixelFormat (BitMask, , PixelShl,
PixelShr);
+ if (*ConfigureSize < sizeof (FRAME_BUFFER_CONFIGURE)
+ + FrameBufferInfo->HorizontalResolution * BytesPerPixel) {
+*ConfigureSize = sizeof (FRAME_BUFFER_CONFIGURE)
+ + FrameBufferInfo->HorizontalResolution * BytesPerPixel;
+return RETURN_BUFFER_TOO_SMALL;
+ }
+
+ if (Configure == NULL) {
+return RETURN_INVALID_PARAMETER;
+ }
+
CopyMem (>PixelMasks, BitMask, sizeof (*BitMask));
CopyMem (Configure->PixelShl,PixelShl, sizeof (PixelShl));
CopyMem (Configure->PixelShr,PixelShr, sizeof (PixelShr));
@@ -166,8 +168,6 @@ FrameBufferBltConfigure (
Configure->Height= (UINTN) FrameBufferInfo->VerticalResolution;
Configure->WidthInBytes = Configure->WidthInPixels *
Configure->BytesPerPixel;
- ASSERT (Configure->WidthInBytes < sizeof (Configure->LineBuffer));
-
return RETURN_SUCCESS;
}
--
2.9.0.windows.1
___
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel