diff options
author | Michel Dänzer <michel.daenzer@amd.com> | 2017-08-29 16:46:33 +0900 |
---|---|---|
committer | Michel Dänzer <michel.daenzer@amd.com> | 2017-08-29 16:46:33 +0900 |
commit | 1afd4a526c97e77ec882988e35d4977880b9d16c (patch) | |
tree | 5493dd3114bfe655cfba565a8d8a56db4c497ff5 /src | |
parent | 0de05767adb79d417284dae83e9a77857633fd80 (diff) |
Create amdgpu_pixmap_clear helper
Preparatory, no functional change intended yet.
(Ported from radeon commit 3f6210ca2c8ef60d59efc8139151d3b9838bb875)
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/amdgpu_bo_helper.c | 20 | ||||
-rw-r--r-- | src/amdgpu_bo_helper.h | 2 | ||||
-rw-r--r-- | src/drmmode_display.c | 14 |
3 files changed, 23 insertions, 13 deletions
diff --git a/src/amdgpu_bo_helper.c b/src/amdgpu_bo_helper.c index 7acd005..ee52e0c 100644 --- a/src/amdgpu_bo_helper.c +++ b/src/amdgpu_bo_helper.c @@ -120,6 +120,26 @@ struct amdgpu_buffer *amdgpu_alloc_pixmap_bo(ScrnInfoPtr pScrn, int width, return pixmap_buffer; } +/* Clear the pixmap contents to black */ +void +amdgpu_pixmap_clear(PixmapPtr pixmap) +{ + ScreenPtr screen = pixmap->drawable.pScreen; + AMDGPUInfoPtr info = AMDGPUPTR(xf86ScreenToScrn(screen)); + GCPtr gc = GetScratchGC(pixmap->drawable.depth, screen); + xRectangle rect; + + ValidateGC(&pixmap->drawable, gc); + rect.x = 0; + rect.y = 0; + rect.width = pixmap->drawable.width; + rect.height = pixmap->drawable.height; + info->force_accel = TRUE; + gc->ops->PolyFillRect(&pixmap->drawable, gc, 1, &rect); + info->force_accel = FALSE; + FreeScratchGC(gc); +} + Bool amdgpu_bo_get_handle(struct amdgpu_buffer *bo, uint32_t *handle) { if (bo->flags & AMDGPU_BO_FLAGS_GBM) { diff --git a/src/amdgpu_bo_helper.h b/src/amdgpu_bo_helper.h index 26fca16..4f6b628 100644 --- a/src/amdgpu_bo_helper.h +++ b/src/amdgpu_bo_helper.h @@ -29,6 +29,8 @@ extern struct amdgpu_buffer *amdgpu_alloc_pixmap_bo(ScrnInfoPtr pScrn, int width int height, int depth, int usage_hint, int bitsPerPixel, int *new_pitch); +extern void amdgpu_pixmap_clear(PixmapPtr pixmap); + extern Bool amdgpu_bo_get_handle(struct amdgpu_buffer *bo, uint32_t *handle); extern uint64_t amdgpu_pixmap_get_tiling_info(PixmapPtr pixmap); diff --git a/src/drmmode_display.c b/src/drmmode_display.c index 17efde8..285eb0a 100644 --- a/src/drmmode_display.c +++ b/src/drmmode_display.c @@ -2116,8 +2116,6 @@ static Bool drmmode_xf86crtc_resize(ScrnInfoPtr scrn, int width, int height) PixmapPtr ppix = screen->GetScreenPixmap(screen); void *fb_shadow; int hint = 0; - xRectangle rect; - GCPtr gc; if (scrn->virtualX == width && scrn->virtualY == height) return TRUE; @@ -2181,17 +2179,7 @@ static Bool drmmode_xf86crtc_resize(ScrnInfoPtr scrn, int width, int height) goto fail; } - /* Clear new buffer */ - gc = GetScratchGC(ppix->drawable.depth, scrn->pScreen); - ValidateGC(&ppix->drawable, gc); - rect.x = 0; - rect.y = 0; - rect.width = width; - rect.height = height; - info->force_accel = TRUE; - (*gc->ops->PolyFillRect)(&ppix->drawable, gc, 1, &rect); - info->force_accel = FALSE; - FreeScratchGC(gc); + amdgpu_pixmap_clear(ppix); amdgpu_glamor_finish(scrn); for (i = 0; i < xf86_config->num_crtc; i++) { |