From fe484a9b635ad56afec7be086a56c692b00dd6d1 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Wed, 13 Jan 2010 16:14:41 +1000 Subject: exa: remove nouveau_pixmap_offset() Completely useless now we don't have to try and support non-driver pixmaps. Signed-off-by: Ben Skeggs --- src/nouveau_exa.c | 6 ++---- src/nv04_exa.c | 18 ++++++------------ src/nv04_xv_blit.c | 5 ++--- src/nv10_exa.c | 6 ++---- src/nv30_exa.c | 6 ++---- src/nv30_xv_tex.c | 3 +-- src/nv40_exa.c | 6 ++---- src/nv40_xv_tex.c | 3 +-- src/nv50_exa.c | 15 ++++++--------- src/nv50_xv.c | 5 ++--- src/nv_type.h | 6 ------ 11 files changed, 26 insertions(+), 53 deletions(-) diff --git a/src/nouveau_exa.c b/src/nouveau_exa.c index e6a9fda..964bc73 100644 --- a/src/nouveau_exa.c +++ b/src/nouveau_exa.c @@ -49,10 +49,9 @@ NVAccelDownloadM2MF(PixmapPtr pspix, int x, int y, int w, int h, struct nouveau_channel *chan = pNv->chan; struct nouveau_grobj *m2mf = pNv->NvMemFormat; struct nouveau_bo *bo = nouveau_pixmap_bo(pspix); - unsigned src_offset = nouveau_pixmap_offset(pspix); unsigned cpp = pspix->drawable.bitsPerPixel / 8; unsigned line_len = w * cpp; - unsigned src_pitch = 0, linear = 0; + unsigned src_offset = 0, src_pitch = 0, linear = 0; if (!nv50_style_tiled_pixmap(pspix)) { linear = 1; @@ -167,10 +166,9 @@ NVAccelUploadM2MF(PixmapPtr pdpix, int x, int y, int w, int h, struct nouveau_channel *chan = pNv->chan; struct nouveau_grobj *m2mf = pNv->NvMemFormat; struct nouveau_bo *bo = nouveau_pixmap_bo(pdpix); - unsigned dst_offset = nouveau_pixmap_offset(pdpix); unsigned cpp = pdpix->drawable.bitsPerPixel / 8; unsigned line_len = w * cpp; - unsigned dst_pitch = 0, linear = 0; + unsigned dst_offset = 0, dst_pitch = 0, linear = 0; if (!nv50_style_tiled_pixmap(pdpix)) { linear = 1; diff --git a/src/nv04_exa.c b/src/nv04_exa.c index f4966a4..11b975c 100644 --- a/src/nv04_exa.c +++ b/src/nv04_exa.c @@ -80,7 +80,6 @@ NV04EXAPrepareSolid(PixmapPtr pPixmap, int alu, Pixel planemask, Pixel fg) struct nouveau_grobj *surf2d = pNv->NvContextSurfaces; struct nouveau_grobj *rect = pNv->NvRectangle; struct nouveau_bo *bo = nouveau_pixmap_bo(pPixmap); - unsigned delta = nouveau_pixmap_offset(pPixmap); unsigned int fmt, pitch, fmt2 = NV04_GDI_RECTANGLE_TEXT_COLOR_FORMAT_A8R8G8B8; if (MARK_RING(chan, 64, 2)) @@ -120,8 +119,8 @@ NV04EXAPrepareSolid(PixmapPtr pPixmap, int alu, Pixel planemask, Pixel fg) BEGIN_RING(chan, surf2d, NV04_CONTEXT_SURFACES_2D_FORMAT, 4); OUT_RING (chan, fmt); OUT_RING (chan, (pitch << 16) | pitch); - if (OUT_RELOCl(chan, bo, delta, NOUVEAU_BO_VRAM | NOUVEAU_BO_WR) || - OUT_RELOCl(chan, bo, delta, NOUVEAU_BO_VRAM | NOUVEAU_BO_WR)) { + if (OUT_RELOCl(chan, bo, 0, NOUVEAU_BO_VRAM | NOUVEAU_BO_WR) || + OUT_RELOCl(chan, bo, 0, NOUVEAU_BO_VRAM | NOUVEAU_BO_WR)) { MARK_UNDO(chan); return FALSE; } @@ -188,9 +187,7 @@ NV04EXAPrepareCopy(PixmapPtr pSrcPixmap, PixmapPtr pDstPixmap, int dx, int dy, struct nouveau_grobj *surf2d = pNv->NvContextSurfaces; struct nouveau_grobj *blit = pNv->NvImageBlit; struct nouveau_bo *src_bo = nouveau_pixmap_bo(pSrcPixmap); - unsigned src_delta = nouveau_pixmap_offset(pSrcPixmap); struct nouveau_bo *dst_bo = nouveau_pixmap_bo(pDstPixmap); - unsigned dst_delta = nouveau_pixmap_offset(pDstPixmap); int fmt; if (pSrcPixmap->drawable.bitsPerPixel != @@ -227,10 +224,8 @@ NV04EXAPrepareCopy(PixmapPtr pSrcPixmap, PixmapPtr pDstPixmap, int dx, int dy, OUT_RING (chan, fmt); OUT_RING (chan, (exaGetPixmapPitch(pDstPixmap) << 16) | (exaGetPixmapPitch(pSrcPixmap))); - if (OUT_RELOCl(chan, src_bo, src_delta, - NOUVEAU_BO_VRAM | NOUVEAU_BO_RD) || - OUT_RELOCl(chan, dst_bo, dst_delta, - NOUVEAU_BO_VRAM | NOUVEAU_BO_WR)) { + if (OUT_RELOCl(chan, src_bo, 0, NOUVEAU_BO_VRAM | NOUVEAU_BO_RD) || + OUT_RELOCl(chan, dst_bo, 0, NOUVEAU_BO_VRAM | NOUVEAU_BO_WR)) { MARK_UNDO(chan); return FALSE; } @@ -279,7 +274,6 @@ NV04EXAStateIFCSubmit(struct nouveau_channel *chan) struct nouveau_grobj *surf2d = pNv->NvContextSurfaces; struct nouveau_grobj *ifc = pNv->NvImageFromCpu; struct nouveau_bo *bo = nouveau_pixmap_bo(pNv->pdpix); - unsigned delta = nouveau_pixmap_offset(pNv->pdpix); int surf_fmt; NVAccelGetCtxSurf2DFormatFromPixmap(pNv->pdpix, &surf_fmt); @@ -291,8 +285,8 @@ NV04EXAStateIFCSubmit(struct nouveau_channel *chan) OUT_RING (chan, surf_fmt); OUT_RING (chan, (exaGetPixmapPitch(pNv->pdpix) << 16) | exaGetPixmapPitch(pNv->pdpix)); - if (OUT_RELOCl(chan, bo, delta, NOUVEAU_BO_VRAM | NOUVEAU_BO_WR) || - OUT_RELOCl(chan, bo, delta, NOUVEAU_BO_VRAM | NOUVEAU_BO_WR)) { + if (OUT_RELOCl(chan, bo, 0, NOUVEAU_BO_VRAM | NOUVEAU_BO_WR) || + OUT_RELOCl(chan, bo, 0, NOUVEAU_BO_VRAM | NOUVEAU_BO_WR)) { MARK_UNDO(chan); return FALSE; } diff --git a/src/nv04_xv_blit.c b/src/nv04_xv_blit.c index 54bfe91..6359215 100644 --- a/src/nv04_xv_blit.c +++ b/src/nv04_xv_blit.c @@ -82,7 +82,6 @@ NVPutBlitImage(ScrnInfoPtr pScrn, struct nouveau_bo *src, int src_offset, struct nouveau_grobj *rect = pNv->NvRectangle; struct nouveau_grobj *sifm = pNv->NvScaledImage; struct nouveau_bo *bo = nouveau_pixmap_bo(ppix); - unsigned delta = nouveau_pixmap_offset(ppix); unsigned int crtcs; int dst_format; @@ -95,8 +94,8 @@ NVPutBlitImage(ScrnInfoPtr pScrn, struct nouveau_bo *src, int src_offset, BEGIN_RING(chan, surf2d, NV04_CONTEXT_SURFACES_2D_FORMAT, 4); OUT_RING (chan, dst_format); OUT_RING (chan, (exaGetPixmapPitch(ppix) << 16) | exaGetPixmapPitch(ppix)); - if (OUT_RELOCl(chan, bo, delta, NOUVEAU_BO_VRAM | NOUVEAU_BO_WR) || - OUT_RELOCl(chan, bo, delta, NOUVEAU_BO_VRAM | NOUVEAU_BO_WR)) { + if (OUT_RELOCl(chan, bo, 0, NOUVEAU_BO_VRAM | NOUVEAU_BO_WR) || + OUT_RELOCl(chan, bo, 0, NOUVEAU_BO_VRAM | NOUVEAU_BO_WR)) { MARK_UNDO(chan); return BadImplementation; } diff --git a/src/nv10_exa.c b/src/nv10_exa.c index ecf743b..adf276a 100644 --- a/src/nv10_exa.c +++ b/src/nv10_exa.c @@ -374,7 +374,6 @@ setup_texture(NVPtr pNv, int unit, PicturePtr pict, PixmapPtr pixmap) struct nouveau_channel *chan = pNv->chan; struct nouveau_grobj *celsius = pNv->Nv3D; struct nouveau_bo *bo = nouveau_pixmap_bo(pixmap); - unsigned delta = nouveau_pixmap_offset(pixmap); unsigned tex_reloc = NOUVEAU_BO_VRAM | NOUVEAU_BO_GART | NOUVEAU_BO_RD; long w = pict->pDrawable->width, h = pict->pDrawable->height; @@ -387,7 +386,7 @@ setup_texture(NVPtr pNv, int unit, PicturePtr pict, PixmapPtr pixmap) 0x50 /* UNK */; BEGIN_RING(chan, celsius, NV10TCL_TX_OFFSET(unit), 1); - if (OUT_RELOCl(chan, bo, delta, tex_reloc)) + if (OUT_RELOCl(chan, bo, 0, tex_reloc)) return FALSE; if (pict->repeat == RepeatNone) { @@ -431,7 +430,6 @@ setup_render_target(NVPtr pNv, PicturePtr pict, PixmapPtr pixmap) struct nouveau_channel *chan = pNv->chan; struct nouveau_grobj *celsius = pNv->Nv3D; struct nouveau_bo *bo = nouveau_pixmap_bo(pixmap); - unsigned delta = nouveau_pixmap_offset(pixmap); BEGIN_RING(chan, celsius, NV10TCL_RT_FORMAT, 2); OUT_RING (chan, get_rt_format(pict)); @@ -439,7 +437,7 @@ setup_render_target(NVPtr pNv, PicturePtr pict, PixmapPtr pixmap) exaGetPixmapPitch(pixmap))); BEGIN_RING(chan, celsius, NV10TCL_COLOR_OFFSET, 1); - if (OUT_RELOCl(chan, bo, delta, NOUVEAU_BO_VRAM | NOUVEAU_BO_WR)) + if (OUT_RELOCl(chan, bo, 0, NOUVEAU_BO_VRAM | NOUVEAU_BO_WR)) return FALSE; return TRUE; diff --git a/src/nv30_exa.c b/src/nv30_exa.c index 4c1d56d..b736fb3 100644 --- a/src/nv30_exa.c +++ b/src/nv30_exa.c @@ -305,7 +305,6 @@ NV30EXATexture(ScrnInfoPtr pScrn, PixmapPtr pPix, PicturePtr pPict, int unit) struct nouveau_channel *chan = pNv->chan; struct nouveau_grobj *rankine = pNv->Nv3D; struct nouveau_bo *bo = nouveau_pixmap_bo(pPix); - unsigned delta = nouveau_pixmap_offset(pPix); nv_pict_texture_format_t *fmt; uint32_t card_filter, card_repeat; uint32_t tex_reloc = NOUVEAU_BO_VRAM | NOUVEAU_BO_GART | NOUVEAU_BO_RD; @@ -323,7 +322,7 @@ NV30EXATexture(ScrnInfoPtr pScrn, PixmapPtr pPix, PicturePtr pPict, int unit) card_filter = 1; BEGIN_RING(chan, rankine, NV34TCL_TX_OFFSET(unit), 8); - if (OUT_RELOCl(chan, bo, delta, tex_reloc) || + if (OUT_RELOCl(chan, bo, 0, tex_reloc) || OUT_RELOCd(chan, bo, NV34TCL_TX_FORMAT_DIMS_2D | (1 << 16) | 8 | (fmt->card_fmt << NV34TCL_TX_FORMAT_FORMAT_SHIFT) | (log2i(pPix->drawable.width) << @@ -360,7 +359,6 @@ NV30_SetupSurface(ScrnInfoPtr pScrn, PixmapPtr pPix, PicturePtr pPict) struct nouveau_channel *chan = pNv->chan; struct nouveau_grobj *rankine = pNv->Nv3D; struct nouveau_bo *bo = nouveau_pixmap_bo(pPix); - unsigned delta = nouveau_pixmap_offset(pPix); nv_pict_surface_format_t *fmt; fmt = NV30_GetPictSurfaceFormat(pPict->format); @@ -374,7 +372,7 @@ NV30_SetupSurface(ScrnInfoPtr pScrn, PixmapPtr pPix, PicturePtr pPict) BEGIN_RING(chan, rankine, NV34TCL_RT_FORMAT, 3); OUT_RING (chan, fmt->card_fmt); /* format */ OUT_RING (chan, pitch << 16 | pitch); - if (OUT_RELOCl(chan, bo, delta, NOUVEAU_BO_VRAM | NOUVEAU_BO_WR)) + if (OUT_RELOCl(chan, bo, 0, NOUVEAU_BO_VRAM | NOUVEAU_BO_WR)) return FALSE; return TRUE; diff --git a/src/nv30_xv_tex.c b/src/nv30_xv_tex.c index ae28f91..7e79267 100644 --- a/src/nv30_xv_tex.c +++ b/src/nv30_xv_tex.c @@ -258,7 +258,6 @@ NV30PutTextureImage(ScrnInfoPtr pScrn, struct nouveau_bo *src, int src_offset, struct nouveau_channel *chan = pNv->chan; struct nouveau_grobj *rankine = pNv->Nv3D; struct nouveau_bo *bo = nouveau_pixmap_bo(ppix); - unsigned delta = nouveau_pixmap_offset(ppix); Bool redirected = FALSE; float X1, X2, Y1, Y2; BoxPtr pbox; @@ -298,7 +297,7 @@ NV30PutTextureImage(ScrnInfoPtr pScrn, struct nouveau_bo *src, int src_offset, dst_format); OUT_RING (chan, (exaGetPixmapPitch(ppix) << 16) | exaGetPixmapPitch(ppix)); - if (OUT_RELOCl(chan, bo, delta, NOUVEAU_BO_VRAM | NOUVEAU_BO_WR)) { + if (OUT_RELOCl(chan, bo, 0, NOUVEAU_BO_VRAM | NOUVEAU_BO_WR)) { MARK_UNDO(chan); return BadImplementation; } diff --git a/src/nv40_exa.c b/src/nv40_exa.c index 9b0d2c7..c2717f7 100644 --- a/src/nv40_exa.c +++ b/src/nv40_exa.c @@ -239,7 +239,6 @@ NV40EXATexture(ScrnInfoPtr pScrn, PixmapPtr pPix, PicturePtr pPict, int unit) struct nouveau_channel *chan = pNv->chan; struct nouveau_grobj *curie = pNv->Nv3D; struct nouveau_bo *bo = nouveau_pixmap_bo(pPix); - unsigned delta = nouveau_pixmap_offset(pPix); unsigned tex_reloc = NOUVEAU_BO_VRAM | NOUVEAU_BO_GART | NOUVEAU_BO_RD; nv_pict_texture_format_t *fmt; NV40EXA_STATE; @@ -249,7 +248,7 @@ NV40EXATexture(ScrnInfoPtr pScrn, PixmapPtr pPix, PicturePtr pPict, int unit) return FALSE; BEGIN_RING(chan, curie, NV40TCL_TEX_OFFSET(unit), 8); - if (OUT_RELOCl(chan, bo, delta, tex_reloc) || + if (OUT_RELOCl(chan, bo, 0, tex_reloc) || OUT_RELOCd(chan, bo, fmt->card_fmt | NV40TCL_TEX_FORMAT_LINEAR | NV40TCL_TEX_FORMAT_DIMS_2D | 0x8000 | NV40TCL_TEX_FORMAT_NO_BORDER | @@ -310,7 +309,6 @@ NV40_SetupSurface(ScrnInfoPtr pScrn, PixmapPtr pPix, PictFormatShort format) struct nouveau_channel *chan = pNv->chan; struct nouveau_grobj *curie = pNv->Nv3D; struct nouveau_bo *bo = nouveau_pixmap_bo(pPix); - unsigned delta = nouveau_pixmap_offset(pPix); nv_pict_surface_format_t *fmt; fmt = NV40_GetPictSurfaceFormat(format); @@ -324,7 +322,7 @@ NV40_SetupSurface(ScrnInfoPtr pScrn, PixmapPtr pPix, PictFormatShort format) NV40TCL_RT_FORMAT_ZETA_Z24S8 | fmt->card_fmt); OUT_RING (chan, exaGetPixmapPitch(pPix)); - if (OUT_RELOCl(chan, bo, delta, NOUVEAU_BO_VRAM | NOUVEAU_BO_WR)) + if (OUT_RELOCl(chan, bo, 0, NOUVEAU_BO_VRAM | NOUVEAU_BO_WR)) return FALSE; return TRUE; diff --git a/src/nv40_xv_tex.c b/src/nv40_xv_tex.c index 7679019..3a5d439 100644 --- a/src/nv40_xv_tex.c +++ b/src/nv40_xv_tex.c @@ -262,7 +262,6 @@ NV40PutTextureImage(ScrnInfoPtr pScrn, struct nouveau_channel *chan = pNv->chan; struct nouveau_grobj *curie = pNv->Nv3D; struct nouveau_bo *bo = nouveau_pixmap_bo(ppix); - unsigned delta = nouveau_pixmap_offset(ppix); Bool redirected = FALSE; float X1, X2, Y1, Y2; BoxPtr pbox; @@ -300,7 +299,7 @@ NV40PutTextureImage(ScrnInfoPtr pScrn, OUT_RING (chan, NV40TCL_RT_FORMAT_TYPE_LINEAR | NV40TCL_RT_FORMAT_ZETA_Z24S8 | dst_format); OUT_RING (chan, exaGetPixmapPitch(ppix)); - if (OUT_RELOCl(chan, bo, delta, NOUVEAU_BO_VRAM | NOUVEAU_BO_WR)) { + if (OUT_RELOCl(chan, bo, 0, NOUVEAU_BO_VRAM | NOUVEAU_BO_WR)) { MARK_UNDO(chan); return BadImplementation; } diff --git a/src/nv50_exa.c b/src/nv50_exa.c index 59c198f..495c0d7 100644 --- a/src/nv50_exa.c +++ b/src/nv50_exa.c @@ -109,7 +109,6 @@ NV50EXAAcquireSurface2D(PixmapPtr ppix, int is_src) { NV50EXA_LOCALS(ppix); struct nouveau_bo *bo = nouveau_pixmap_bo(ppix); - unsigned delta = nouveau_pixmap_offset(ppix); int mthd = is_src ? NV50_2D_SRC_FORMAT : NV50_2D_DST_FORMAT; uint32_t fmt, bo_flags; @@ -137,8 +136,8 @@ NV50EXAAcquireSurface2D(PixmapPtr ppix, int is_src) BEGIN_RING(chan, eng2d, mthd + 0x18, 4); OUT_RING (chan, ppix->drawable.width); OUT_RING (chan, ppix->drawable.height); - if (OUT_RELOCh(chan, bo, delta, bo_flags) || - OUT_RELOCl(chan, bo, delta, bo_flags)) + if (OUT_RELOCh(chan, bo, 0, bo_flags) || + OUT_RELOCl(chan, bo, 0, bo_flags)) return FALSE; if (is_src == 0) @@ -485,7 +484,6 @@ NV50EXARenderTarget(PixmapPtr ppix, PicturePtr ppict) { NV50EXA_LOCALS(ppix); struct nouveau_bo *bo = nouveau_pixmap_bo(ppix); - unsigned delta = nouveau_pixmap_offset(ppix); unsigned format; /*XXX: Scanout buffer not tiled, someone needs to figure it out */ @@ -515,8 +513,8 @@ NV50EXARenderTarget(PixmapPtr ppix, PicturePtr ppict) } BEGIN_RING(chan, tesla, NV50TCL_RT_ADDRESS_HIGH(0), 5); - if (OUT_RELOCh(chan, bo, delta, NOUVEAU_BO_VRAM | NOUVEAU_BO_WR) || - OUT_RELOCl(chan, bo, delta, NOUVEAU_BO_VRAM | NOUVEAU_BO_WR)) + if (OUT_RELOCh(chan, bo, 0, NOUVEAU_BO_VRAM | NOUVEAU_BO_WR) || + OUT_RELOCl(chan, bo, 0, NOUVEAU_BO_VRAM | NOUVEAU_BO_WR)) return FALSE; OUT_RING (chan, format); OUT_RING (chan, bo->tile_mode << 4); @@ -599,7 +597,6 @@ NV50EXATexture(PixmapPtr ppix, PicturePtr ppict, unsigned unit) { NV50EXA_LOCALS(ppix); struct nouveau_bo *bo = nouveau_pixmap_bo(ppix); - unsigned delta = nouveau_pixmap_offset(ppix); const unsigned tcb_flags = NOUVEAU_BO_RDWR | NOUVEAU_BO_VRAM; /*XXX: Scanout buffer not tiled, someone needs to figure it out */ @@ -689,14 +686,14 @@ NV50EXATexture(PixmapPtr ppix, PicturePtr ppict, unsigned unit) } #undef _ - if (OUT_RELOCl(chan, bo, delta, NOUVEAU_BO_VRAM | NOUVEAU_BO_RD)) + if (OUT_RELOCl(chan, bo, 0, NOUVEAU_BO_VRAM | NOUVEAU_BO_RD)) return FALSE; OUT_RING (chan, 0xd0005000 | (bo->tile_mode << 22)); OUT_RING (chan, 0x00300000); OUT_RING (chan, ppix->drawable.width); OUT_RING (chan, (1 << NV50TIC_0_5_DEPTH_SHIFT) | ppix->drawable.height); OUT_RING (chan, 0x03000000); - if (OUT_RELOCh(chan, bo, delta, NOUVEAU_BO_VRAM | NOUVEAU_BO_RD)) + if (OUT_RELOCh(chan, bo, 0, NOUVEAU_BO_VRAM | NOUVEAU_BO_RD)) return FALSE; BEGIN_RING(chan, tesla, NV50TCL_TSC_ADDRESS_HIGH, 3); diff --git a/src/nv50_xv.c b/src/nv50_xv.c index 6778ebd..c042b6e 100644 --- a/src/nv50_xv.c +++ b/src/nv50_xv.c @@ -66,7 +66,6 @@ nv50_xv_state_emit(PixmapPtr ppix, int id, struct nouveau_bo *src, struct nouveau_channel *chan = pNv->chan; struct nouveau_grobj *tesla = pNv->Nv3D; struct nouveau_bo *bo = nouveau_pixmap_bo(ppix); - unsigned delta = nouveau_pixmap_offset(ppix); const unsigned shd_flags = NOUVEAU_BO_RD | NOUVEAU_BO_VRAM; const unsigned tcb_flags = NOUVEAU_BO_RDWR | NOUVEAU_BO_VRAM; @@ -74,8 +73,8 @@ nv50_xv_state_emit(PixmapPtr ppix, int id, struct nouveau_bo *src, return FALSE; BEGIN_RING(chan, tesla, NV50TCL_RT_ADDRESS_HIGH(0), 5); - if (OUT_RELOCh(chan, bo, delta, NOUVEAU_BO_VRAM | NOUVEAU_BO_WR) || - OUT_RELOCl(chan, bo, delta, NOUVEAU_BO_VRAM | NOUVEAU_BO_WR)) { + if (OUT_RELOCh(chan, bo, 0, NOUVEAU_BO_VRAM | NOUVEAU_BO_WR) || + OUT_RELOCl(chan, bo, 0, NOUVEAU_BO_VRAM | NOUVEAU_BO_WR)) { MARK_UNDO(chan); return FALSE; } diff --git a/src/nv_type.h b/src/nv_type.h index 5644c11..dd10a45 100644 --- a/src/nv_type.h +++ b/src/nv_type.h @@ -176,12 +176,6 @@ nouveau_pixmap_bo(PixmapPtr ppix) return nvpix ? nvpix->bo : NULL; } -static inline unsigned -nouveau_pixmap_offset(PixmapPtr ppix) -{ - return 0; -} - static inline uint32_t nv_pitch_align(NVPtr pNv, uint32_t width, int bpp) { -- cgit v1.2.3