[PATCH 1/4] modesetting: Allocate and destroy shadow_fb in drmmode_display
Jason Ekstrand
jason at jlekstrand.net
Fri Dec 19 14:12:42 PST 2014
This way all of the buffer allocation/destruction is in the same file.
Signed-off-by: Jason Ekstrand <jason.ekstrand at intel.com>
---
hw/xfree86/drivers/modesetting/driver.c | 16 +---------------
hw/xfree86/drivers/modesetting/drmmode_display.c | 19 ++++++++++++++++++-
hw/xfree86/drivers/modesetting/drmmode_display.h | 2 +-
3 files changed, 20 insertions(+), 17 deletions(-)
diff --git a/hw/xfree86/drivers/modesetting/driver.c b/hw/xfree86/drivers/modesetting/driver.c
index 5dda96b..77da2cc 100644
--- a/hw/xfree86/drivers/modesetting/driver.c
+++ b/hw/xfree86/drivers/modesetting/driver.c
@@ -993,15 +993,6 @@ ScreenInit(ScreenPtr pScreen, int argc, char **argv)
if (!drmmode_create_initial_bos(pScrn, &ms->drmmode))
return FALSE;
- if (ms->drmmode.shadow_enable) {
- ms->drmmode.shadow_fb =
- calloc(1,
- pScrn->displayWidth * pScrn->virtualY *
- ((pScrn->bitsPerPixel + 7) >> 3));
- if (!ms->drmmode.shadow_fb)
- ms->drmmode.shadow_enable = FALSE;
- }
-
miClearVisualTypes();
if (!miSetVisualTypes(pScrn->depth,
@@ -1200,14 +1191,9 @@ CloseScreen(ScreenPtr pScreen)
ms->damage = NULL;
}
- if (ms->drmmode.shadow_enable) {
- shadowRemove(pScreen, pScreen->GetScreenPixmap(pScreen));
- free(ms->drmmode.shadow_fb);
- ms->drmmode.shadow_fb = NULL;
- }
drmmode_uevent_fini(pScrn, &ms->drmmode);
- drmmode_free_bos(pScrn, &ms->drmmode);
+ drmmode_free_bos(pScreen, &ms->drmmode);
if (pScrn->vtSema) {
LeaveVT(pScrn);
diff --git a/hw/xfree86/drivers/modesetting/drmmode_display.c b/hw/xfree86/drivers/modesetting/drmmode_display.c
index 824500b..30ee79d 100644
--- a/hw/xfree86/drivers/modesetting/drmmode_display.c
+++ b/hw/xfree86/drivers/modesetting/drmmode_display.c
@@ -39,6 +39,7 @@
#include "micmap.h"
#include "xf86cmap.h"
#include "xf86DDC.h"
+#include "shadow.h"
#include <xf86drm.h>
#include "xf86Crtc.h"
@@ -1539,6 +1540,15 @@ drmmode_create_initial_bos(ScrnInfoPtr pScrn, drmmode_ptr drmmode)
return FALSE;
pScrn->displayWidth = drmmode_bo_get_pitch(&drmmode->front_bo) / cpp;
+ if (drmmode->shadow_enable) {
+ drmmode->shadow_fb =
+ calloc(1,
+ pScrn->displayWidth * pScrn->virtualY *
+ ((pScrn->bitsPerPixel + 7) >> 3));
+ if (!drmmode->shadow_fb)
+ drmmode->shadow_enable = FALSE;
+ }
+
width = ms->cursor_width;
height = ms->cursor_height;
bpp = 32;
@@ -1601,8 +1611,9 @@ drmmode_map_cursor_bos(ScrnInfoPtr pScrn, drmmode_ptr drmmode)
}
void
-drmmode_free_bos(ScrnInfoPtr pScrn, drmmode_ptr drmmode)
+drmmode_free_bos(ScreenPtr pScreen, drmmode_ptr drmmode)
{
+ ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(pScrn);
int i;
@@ -1611,6 +1622,12 @@ drmmode_free_bos(ScrnInfoPtr pScrn, drmmode_ptr drmmode)
drmmode->fb_id = 0;
}
+ if (drmmode->shadow_enable) {
+ shadowRemove(pScreen, pScreen->GetScreenPixmap(pScreen));
+ free(drmmode->shadow_fb);
+ drmmode->shadow_fb = NULL;
+ }
+
drmmode_bo_destroy(drmmode, &drmmode->front_bo);
for (i = 0; i < xf86_config->num_crtc; i++) {
diff --git a/hw/xfree86/drivers/modesetting/drmmode_display.h b/hw/xfree86/drivers/modesetting/drmmode_display.h
index 66d0ca2..c67809b 100644
--- a/hw/xfree86/drivers/modesetting/drmmode_display.h
+++ b/hw/xfree86/drivers/modesetting/drmmode_display.h
@@ -155,7 +155,7 @@ extern void drmmode_uevent_fini(ScrnInfoPtr scrn, drmmode_ptr drmmode);
Bool drmmode_create_initial_bos(ScrnInfoPtr pScrn, drmmode_ptr drmmode);
void *drmmode_map_front_bo(drmmode_ptr drmmode);
Bool drmmode_map_cursor_bos(ScrnInfoPtr pScrn, drmmode_ptr drmmode);
-void drmmode_free_bos(ScrnInfoPtr pScrn, drmmode_ptr drmmode);
+void drmmode_free_bos(ScreenPtr pScreen, drmmode_ptr drmmode);
void drmmode_get_default_bpp(ScrnInfoPtr pScrn, drmmode_ptr drmmmode,
int *depth, int *bpp);
--
2.2.0
More information about the xorg-devel
mailing list