diff options
-rw-r--r-- | src/nvc0_accel.c | 80 | ||||
-rw-r--r-- | src/nvc0_accel.h | 15 | ||||
-rw-r--r-- | src/nvc0_exa.c | 24 | ||||
-rw-r--r-- | src/nvc0_xv.c | 20 |
4 files changed, 27 insertions, 112 deletions
diff --git a/src/nvc0_accel.c b/src/nvc0_accel.c index 6a3e711..d92dff1 100644 --- a/src/nvc0_accel.c +++ b/src/nvc0_accel.c @@ -203,15 +203,7 @@ NVAccelInit3D_NVC0(ScrnInfoPtr pScrn) PUSH_DATA (push, (bo->offset + CODE_OFFSET) >> 32); PUSH_DATA (push, (bo->offset + CODE_OFFSET)); - BEGIN_NVC0(push, NVC0_M2MF(OFFSET_OUT_HIGH), 2); - PUSH_DATA (push, (bo->offset + PVP_PASS) >> 32); - PUSH_DATA (push, (bo->offset + PVP_PASS)); - BEGIN_NVC0(push, NVC0_M2MF(LINE_LENGTH_IN), 2); - PUSH_DATA (push, 7 * 8 + 20 * 4); - PUSH_DATA (push, 1); - BEGIN_NVC0(push, NVC0_M2MF(EXEC), 1); - PUSH_DATA (push, 0x100111); - BEGIN_NIC0(push, NVC0_M2MF(DATA), 7 * 2 + 20); + PUSH_DATAu(push, bo, PVP_PASS, 20 + 7 * 2); PUSH_DATA (push, 0x00020461); PUSH_DATA (push, 0); PUSH_DATA (push, 0); @@ -257,15 +249,7 @@ NVAccelInit3D_NVC0(ScrnInfoPtr pScrn) BEGIN_NVC0(push, SUBC_3D(0x2600), 1); PUSH_DATA (push, 1); - BEGIN_NVC0(push, NVC0_M2MF(OFFSET_OUT_HIGH), 2); - PUSH_DATA (push, (bo->offset + PFP_S) >> 32); - PUSH_DATA (push, (bo->offset + PFP_S)); - BEGIN_NVC0(push, NVC0_M2MF(LINE_LENGTH_IN), 2); - PUSH_DATA (push, 6 * 8 + 20 * 4); - PUSH_DATA (push, 1); - BEGIN_NVC0(push, NVC0_M2MF(EXEC), 1); - PUSH_DATA (push, 0x100111); - BEGIN_NIC0(push, NVC0_M2MF(DATA), 6 * 2 + 20); + PUSH_DATAu(push, bo, PFP_S, 20 + 6 * 2); PUSH_DATA (push, 0x00021462); PUSH_DATA (push, 0x00000000); PUSH_DATA (push, 0x00000000); @@ -299,15 +283,7 @@ NVAccelInit3D_NVC0(ScrnInfoPtr pScrn) PUSH_DATA (push, 0x00001de7); PUSH_DATA (push, 0x80000000); /* exit */ - BEGIN_NVC0(push, NVC0_M2MF(OFFSET_OUT_HIGH), 2); - PUSH_DATA (push, (bo->offset + PFP_C) >> 32); - PUSH_DATA (push, (bo->offset + PFP_C)); - BEGIN_NVC0(push, NVC0_M2MF(LINE_LENGTH_IN), 2); - PUSH_DATA (push, 13 * 8 + 20 * 4); - PUSH_DATA (push, 1); - BEGIN_NVC0(push, NVC0_M2MF(EXEC), 1); - PUSH_DATA (push, 0x100111); - BEGIN_NIC0(push, NVC0_M2MF(DATA), 13 * 2 + 20); + PUSH_DATAu(push, bo, PFP_C, 20 + 13 * 2); PUSH_DATA (push, 0x00021462); PUSH_DATA (push, 0x00000000); PUSH_DATA (push, 0x00000000); @@ -355,15 +331,7 @@ NVAccelInit3D_NVC0(ScrnInfoPtr pScrn) PUSH_DATA (push, 0x00001de7); PUSH_DATA (push, 0x80000000); /* exit */ - BEGIN_NVC0(push, NVC0_M2MF(OFFSET_OUT_HIGH), 2); - PUSH_DATA (push, (bo->offset + PFP_CCA) >> 32); - PUSH_DATA (push, (bo->offset + PFP_CCA)); - BEGIN_NVC0(push, NVC0_M2MF(LINE_LENGTH_IN), 2); - PUSH_DATA (push, 13 * 8 + 20 * 4); - PUSH_DATA (push, 1); - BEGIN_NVC0(push, NVC0_M2MF(EXEC), 1); - PUSH_DATA (push, 0x100111); - BEGIN_NIC0(push, NVC0_M2MF(DATA), 13 * 2 + 20); + PUSH_DATAu(push, bo, PFP_CCA, 20 + 13 * 2); PUSH_DATA (push, 0x00021462); /* 0x0000c000 = USES_KIL, MULTI_COLORS */ PUSH_DATA (push, 0x00000000); PUSH_DATA (push, 0x00000000); @@ -411,15 +379,7 @@ NVAccelInit3D_NVC0(ScrnInfoPtr pScrn) PUSH_DATA (push, 0x00001de7); PUSH_DATA (push, 0x80000000); /* exit */ - BEGIN_NVC0(push, NVC0_M2MF(OFFSET_OUT_HIGH), 2); - PUSH_DATA (push, (bo->offset + PFP_CCASA) >> 32); - PUSH_DATA (push, (bo->offset + PFP_CCASA)); - BEGIN_NVC0(push, NVC0_M2MF(LINE_LENGTH_IN), 2); - PUSH_DATA (push, 13 * 8 + 20 * 4); - PUSH_DATA (push, 1); - BEGIN_NVC0(push, NVC0_M2MF(EXEC), 1); - PUSH_DATA (push, 0x100111); - BEGIN_NIC0(push, NVC0_M2MF(DATA), 13 * 2 + 20); + PUSH_DATAu(push, bo, PFP_CCASA, 20 + 13 * 2); PUSH_DATA (push, 0x00021462); PUSH_DATA (push, 0x00000000); PUSH_DATA (push, 0x00000000); @@ -467,15 +427,7 @@ NVAccelInit3D_NVC0(ScrnInfoPtr pScrn) PUSH_DATA (push, 0x00001de7); PUSH_DATA (push, 0x80000000); /* exit */ - BEGIN_NVC0(push, NVC0_M2MF(OFFSET_OUT_HIGH), 2); - PUSH_DATA (push, (bo->offset + PFP_S_A8) >> 32); - PUSH_DATA (push, (bo->offset + PFP_S_A8)); - BEGIN_NVC0(push, NVC0_M2MF(LINE_LENGTH_IN), 2); - PUSH_DATA (push, 9 * 8 + 20 * 4); - PUSH_DATA (push, 1); - BEGIN_NVC0(push, NVC0_M2MF(EXEC), 1); - PUSH_DATA (push, 0x100111); - BEGIN_NIC0(push, NVC0_M2MF(DATA), 9 * 2 + 20); + PUSH_DATAu(push, bo, PFP_S_A8, 20 + 9 * 2); PUSH_DATA (push, 0x00021462); PUSH_DATA (push, 0x00000000); PUSH_DATA (push, 0x00000000); @@ -515,15 +467,7 @@ NVAccelInit3D_NVC0(ScrnInfoPtr pScrn) PUSH_DATA (push, 0x00001de7); PUSH_DATA (push, 0x80000000); /* exit */ - BEGIN_NVC0(push, NVC0_M2MF(OFFSET_OUT_HIGH), 2); - PUSH_DATA (push, (bo->offset + PFP_C_A8) >> 32); - PUSH_DATA (push, (bo->offset + PFP_C_A8)); - BEGIN_NVC0(push, NVC0_M2MF(LINE_LENGTH_IN), 2); - PUSH_DATA (push, 13 * 8 + 20 * 4); - PUSH_DATA (push, 1); - BEGIN_NVC0(push, NVC0_M2MF(EXEC), 1); - PUSH_DATA (push, 0x100111); - BEGIN_NIC0(push, NVC0_M2MF(DATA), 13 * 2 + 20); + PUSH_DATAu(push, bo, PFP_C_A8, 20 + 13 * 2); PUSH_DATA (push, 0x00021462); PUSH_DATA (push, 0x00000000); PUSH_DATA (push, 0x00000000); @@ -571,15 +515,7 @@ NVAccelInit3D_NVC0(ScrnInfoPtr pScrn) PUSH_DATA (push, 0x00001de7); PUSH_DATA (push, 0x80000000); /* exit */ - BEGIN_NVC0(push, NVC0_M2MF(OFFSET_OUT_HIGH), 2); - PUSH_DATA (push, (bo->offset + PFP_NV12) >> 32); - PUSH_DATA (push, (bo->offset + PFP_NV12)); - BEGIN_NVC0(push, NVC0_M2MF(LINE_LENGTH_IN), 2); - PUSH_DATA (push, 19 * 8 + 20 * 4); - PUSH_DATA (push, 1); - BEGIN_NVC0(push, NVC0_M2MF(EXEC), 1); - PUSH_DATA (push, 0x100111); - BEGIN_NIC0(push, NVC0_M2MF(DATA), 19 * 2 + 20); + PUSH_DATAu(push, bo, PFP_NV12, 20 + 19 * 2); PUSH_DATA (push, 0x00021462); PUSH_DATA (push, 0x00000000); PUSH_DATA (push, 0x00000000); diff --git a/src/nvc0_accel.h b/src/nvc0_accel.h index 7e1fd00..bdd7677 100644 --- a/src/nvc0_accel.h +++ b/src/nvc0_accel.h @@ -94,4 +94,19 @@ VTX2s(NVPtr pNv, float s1x, float s1y, float s2x, float s2y, #endif } +static __inline__ void +PUSH_DATAu(struct nouveau_pushbuf *push, struct nouveau_bo *bo, + unsigned delta, unsigned dwords) +{ + BEGIN_NVC0(push, NVC0_M2MF(OFFSET_OUT_HIGH), 2); + PUSH_DATA (push, (bo->offset + delta) >> 32); + PUSH_DATA (push, (bo->offset + delta)); + BEGIN_NVC0(push, NVC0_M2MF(LINE_LENGTH_IN), 2); + PUSH_DATA (push, dwords * 4); + PUSH_DATA (push, 1); + BEGIN_NVC0(push, NVC0_M2MF(EXEC), 1); + PUSH_DATA (push, 0x100111); + BEGIN_NIC0(push, NVC0_M2MF(DATA), dwords); +} + #endif diff --git a/src/nvc0_exa.c b/src/nvc0_exa.c index a8713da..ae2a523 100644 --- a/src/nvc0_exa.c +++ b/src/nvc0_exa.c @@ -540,24 +540,13 @@ NVC0EXATexture(PixmapPtr ppix, PicturePtr ppict, unsigned unit) { NVC0EXA_LOCALS(ppix); struct nouveau_bo *bo = nouveau_pixmap_bo(ppix); - uint64_t tic = pNv->tesla_scratch->offset + TIC_OFFSET + (unit * 32); - uint64_t tsc = pNv->tesla_scratch->offset + TSC_OFFSET + (unit * 32); uint32_t mode; /* XXX: maybe add support for linear textures at some point */ if (!nv50_style_tiled_pixmap(ppix)) NOUVEAU_FALLBACK("pixmap is scanout buffer\n"); - BEGIN_NVC0(push, NVC0_M2MF(OFFSET_OUT_HIGH), 2); - PUSH_DATA (push, tic >> 32); - PUSH_DATA (push, tic); - BEGIN_NVC0(push, NVC0_M2MF(LINE_LENGTH_IN), 2); - PUSH_DATA (push, 8 * 4); - PUSH_DATA (push, 1); - BEGIN_NVC0(push, NVC0_M2MF(EXEC), 1); - PUSH_DATA (push, 0x100111); - BEGIN_NIC0(push, NVC0_M2MF(DATA), 8); - + PUSH_DATAu(push, pNv->tesla_scratch, TIC_OFFSET + (unit * 32), 8); switch (ppict->format) { case PICT_a8r8g8b8: PUSH_DATA (push, _(B_C0, G_C1, R_C2, A_C3, 8_8_8_8)); @@ -637,16 +626,7 @@ NVC0EXATexture(PixmapPtr ppix, PicturePtr ppict, unsigned unit) PUSH_DATA (push, 0x03000000); PUSH_DATA (push, 0x00000000); - BEGIN_NVC0(push, NVC0_M2MF(OFFSET_OUT_HIGH), 2); - PUSH_DATA (push, tsc >> 32); - PUSH_DATA (push, tsc); - BEGIN_NVC0(push, NVC0_M2MF(LINE_LENGTH_IN), 2); - PUSH_DATA (push, 8 * 4); - PUSH_DATA (push, 1); - BEGIN_NVC0(push, NVC0_M2MF(EXEC), 1); - PUSH_DATA (push, 0x100111); - BEGIN_NIC0(push, NVC0_M2MF(DATA), 8); - + PUSH_DATAu(push, pNv->tesla_scratch, TSC_OFFSET + (unit * 32), 8); if (ppict->repeat) { switch (ppict->repeatType) { case RepeatPad: diff --git a/src/nvc0_xv.c b/src/nvc0_xv.c index 96ae223..1378170 100644 --- a/src/nvc0_xv.c +++ b/src/nvc0_xv.c @@ -103,15 +103,7 @@ nvc0_xv_image_put(ScrnInfoPtr pScrn, BEGIN_NVC0(push, NVC0_3D(BLEND_ENABLE(0)), 1); PUSH_DATA (push, 0); - BEGIN_NVC0(push, NVC0_M2MF(OFFSET_OUT_HIGH), 2); - PUSH_DATA (push, (pNv->tesla_scratch->offset + TIC_OFFSET) >> 32); - PUSH_DATA (push, (pNv->tesla_scratch->offset + TIC_OFFSET)); - BEGIN_NVC0(push, NVC0_M2MF(LINE_LENGTH_IN), 2); - PUSH_DATA (push, 16 * 4); - PUSH_DATA (push, 1); - BEGIN_NVC0(push, NVC0_M2MF(EXEC), 1); - PUSH_DATA (push, 0x00100111); - BEGIN_NIC0(push, NVC0_M2MF(DATA), 16); + PUSH_DATAu(push, pNv->tesla_scratch, TIC_OFFSET, 16); if (id == FOURCC_YV12 || id == FOURCC_I420) { PUSH_DATA (push, NV50TIC_0_0_MAPA_C0 | NV50TIC_0_0_TYPEA_UNORM | NV50TIC_0_0_MAPB_ZERO | NV50TIC_0_0_TYPEB_UNORM | @@ -180,15 +172,7 @@ nvc0_xv_image_put(ScrnInfoPtr pScrn, PUSH_DATA (push, 0x00000000); } - BEGIN_NVC0(push, NVC0_M2MF(OFFSET_OUT_HIGH), 2); - PUSH_DATA (push, (pNv->tesla_scratch->offset + TSC_OFFSET) >> 32); - PUSH_DATA (push, (pNv->tesla_scratch->offset + TSC_OFFSET)); - BEGIN_NVC0(push, NVC0_M2MF(LINE_LENGTH_IN), 2); - PUSH_DATA (push, 16 * 4); - PUSH_DATA (push, 1); - BEGIN_NVC0(push, NVC0_M2MF(EXEC), 1); - PUSH_DATA (push, 0x00100111); - BEGIN_NIC0(push, NVC0_M2MF(DATA), 16); + PUSH_DATAu(push, pNv->tesla_scratch, TSC_OFFSET, 16); PUSH_DATA (push, NV50TSC_1_0_WRAPS_CLAMP_TO_EDGE | NV50TSC_1_0_WRAPT_CLAMP_TO_EDGE | NV50TSC_1_0_WRAPR_CLAMP_TO_EDGE); |