mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-25 13:00:09 +01:00
st/xorg: Add a possibility to prune modes and limit fb allocation size based on max fb size.
Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com>
This commit is contained in:
parent
2299ff4c6b
commit
a7a126bdfa
3 changed files with 23 additions and 0 deletions
|
|
@ -190,6 +190,7 @@ drv_crtc_resize(ScrnInfoPtr pScrn, int width, int height)
|
|||
{
|
||||
xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(pScrn);
|
||||
modesettingPtr ms = modesettingPTR(pScrn);
|
||||
CustomizerPtr cust = ms->cust;
|
||||
ScreenPtr pScreen = pScrn->pScreen;
|
||||
int old_width, old_height;
|
||||
PixmapPtr rootPixmap;
|
||||
|
|
@ -198,6 +199,16 @@ drv_crtc_resize(ScrnInfoPtr pScrn, int width, int height)
|
|||
if (width == pScrn->virtualX && height == pScrn->virtualY)
|
||||
return TRUE;
|
||||
|
||||
if (cust && cust->winsys_check_fb_size &&
|
||||
!cust->winsys_check_fb_size(cust, width*pScrn->bitsPerPixel / 8,
|
||||
height)) {
|
||||
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
|
||||
"Requested framebuffer size %dx%dx%d will not fit "
|
||||
"in display memory.\n",
|
||||
width, height, pScrn->bitsPerPixel);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
old_width = pScrn->virtualX;
|
||||
old_height = pScrn->virtualY;
|
||||
pScrn->virtualX = width;
|
||||
|
|
|
|||
|
|
@ -162,6 +162,15 @@ output_get_modes(xf86OutputPtr output)
|
|||
static int
|
||||
output_mode_valid(xf86OutputPtr output, DisplayModePtr pMode)
|
||||
{
|
||||
modesettingPtr ms = modesettingPTR(output->scrn);
|
||||
CustomizerPtr cust = ms->cust;
|
||||
|
||||
if (cust && cust->winsys_check_fb_size &&
|
||||
!cust->winsys_check_fb_size(cust, pMode->HDisplay *
|
||||
output->scrn->bitsPerPixel / 8,
|
||||
pMode->VDisplay))
|
||||
return MODE_BAD;
|
||||
|
||||
return MODE_OK;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -83,6 +83,9 @@ typedef struct _CustomizerRec
|
|||
void (*winsys_context_throttle)(struct _CustomizerRec *cust,
|
||||
struct pipe_context *pipe,
|
||||
enum xorg_throttling_reason reason);
|
||||
Bool (*winsys_check_fb_size) (struct _CustomizerRec *cust,
|
||||
unsigned long pitch,
|
||||
unsigned long height);
|
||||
} CustomizerRec, *CustomizerPtr;
|
||||
|
||||
typedef struct _modesettingRec
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue