summaryrefslogtreecommitdiff
path: root/src/nvc0_exa.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nvc0_exa.c')
-rw-r--r--src/nvc0_exa.c115
1 files changed, 56 insertions, 59 deletions
diff --git a/src/nvc0_exa.c b/src/nvc0_exa.c
index c553e68..ea01771 100644
--- a/src/nvc0_exa.c
+++ b/src/nvc0_exa.c
@@ -43,9 +43,6 @@ static struct nvc0_exa_state exa_state;
ScrnInfoPtr pScrn = xf86Screens[(p)->drawable.pScreen->myNum]; \
NVPtr pNv = NVPTR(pScrn); \
struct nouveau_channel *chan = pNv->chan; (void)chan; \
- struct nouveau_grobj *m2mf = pNv->NvMemFormat; (void)m2mf; \
- struct nouveau_grobj *eng2d = pNv->Nv2D; (void)eng2d; \
- struct nouveau_grobj *fermi = pNv->Nv3D; (void)fermi; \
struct nvc0_exa_state *state = &exa_state; (void)state
#define BF(f) NV50_BLEND_FACTOR_##f
@@ -99,7 +96,7 @@ static void NVC0EXASetClip(PixmapPtr ppix, int x, int y, int w, int h)
{
NVC0EXA_LOCALS(ppix);
- BEGIN_RING(chan, eng2d, NV50_2D_CLIP_X, 4);
+ BEGIN_NVC0(chan, NV50_2D(CLIP_X), 4);
OUT_RING (chan, x);
OUT_RING (chan, y);
OUT_RING (chan, w);
@@ -121,13 +118,13 @@ NVC0EXAAcquireSurface2D(PixmapPtr ppix, int is_src)
bo_flags |= is_src ? NOUVEAU_BO_RD : NOUVEAU_BO_WR;
if (!nv50_style_tiled_pixmap(ppix)) {
- BEGIN_RING(chan, eng2d, mthd, 2);
+ BEGIN_NVC0(chan, SUBC_2D(mthd), 2);
OUT_RING (chan, fmt);
OUT_RING (chan, 1);
- BEGIN_RING(chan, eng2d, mthd + 0x14, 1);
+ BEGIN_NVC0(chan, SUBC_2D(mthd + 0x14), 1);
OUT_RING (chan, (uint32_t)exaGetPixmapPitch(ppix));
} else {
- BEGIN_RING(chan, eng2d, mthd, 5);
+ BEGIN_NVC0(chan, SUBC_2D(mthd), 5);
OUT_RING (chan, fmt);
OUT_RING (chan, 0);
OUT_RING (chan, bo->tile_mode);
@@ -135,7 +132,7 @@ NVC0EXAAcquireSurface2D(PixmapPtr ppix, int is_src)
OUT_RING (chan, 0);
}
- BEGIN_RING(chan, eng2d, mthd + 0x18, 4);
+ BEGIN_NVC0(chan, SUBC_2D(mthd + 0x18), 4);
OUT_RING (chan, ppix->drawable.width);
OUT_RING (chan, ppix->drawable.height);
if (OUT_RELOCh(chan, bo, 0, bo_flags) ||
@@ -153,7 +150,7 @@ NVC0EXASetPattern(PixmapPtr pdpix, int col0, int col1, int pat0, int pat1)
{
NVC0EXA_LOCALS(pdpix);
- BEGIN_RING(chan, eng2d, NV50_2D_PATTERN_COLOR(0), 4);
+ BEGIN_NVC0(chan, NV50_2D(PATTERN_COLOR(0)), 4);
OUT_RING (chan, col0);
OUT_RING (chan, col1);
OUT_RING (chan, pat0);
@@ -171,7 +168,7 @@ NVC0EXASetROP(PixmapPtr pdpix, int alu, Pixel planemask)
else
rop = NVROP[alu].copy;
- BEGIN_RING(chan, eng2d, NV50_2D_OPERATION, 1);
+ BEGIN_NVC0(chan, NV50_2D(OPERATION), 1);
if (alu == GXcopy && EXA_PM_IS_SOLID(&pdpix->drawable, planemask)) {
OUT_RING (chan, NV50_2D_OPERATION_SRCCOPY);
return;
@@ -179,7 +176,7 @@ NVC0EXASetROP(PixmapPtr pdpix, int alu, Pixel planemask)
OUT_RING (chan, NV50_2D_OPERATION_ROP);
}
- BEGIN_RING(chan, eng2d, NV50_2D_PATTERN_COLOR_FORMAT, 2);
+ BEGIN_NVC0(chan, NV50_2D(PATTERN_COLOR_FORMAT), 2);
switch (pdpix->drawable.bitsPerPixel) {
case 8: OUT_RING (chan, 3); break;
case 15: OUT_RING (chan, 1); break;
@@ -206,7 +203,7 @@ NVC0EXASetROP(PixmapPtr pdpix, int alu, Pixel planemask)
}
if (pNv->currentRop != alu) {
- BEGIN_RING(chan, eng2d, NV50_2D_ROP, 1);
+ BEGIN_NVC0(chan, NV50_2D(ROP), 1);
OUT_RING (chan, rop);
pNv->currentRop = alu;
}
@@ -241,7 +238,7 @@ NVC0EXAPrepareSolid(PixmapPtr pdpix, int alu, Pixel planemask, Pixel fg)
NVC0EXASetROP(pdpix, alu, planemask);
- BEGIN_RING(chan, eng2d, NV50_2D_DRAW_SHAPE, 3);
+ BEGIN_NVC0(chan, NV50_2D(DRAW_SHAPE), 3);
OUT_RING (chan, NV50_2D_DRAW_SHAPE_RECTANGLES);
OUT_RING (chan, fmt);
OUT_RING (chan, fg);
@@ -260,7 +257,7 @@ NVC0EXASolid(PixmapPtr pdpix, int x1, int y1, int x2, int y2)
NVC0EXA_LOCALS(pdpix);
WAIT_RING (chan, 5);
- BEGIN_RING(chan, eng2d, NV50_2D_DRAW_POINT32_X(0), 4);
+ BEGIN_NVC0(chan, NV50_2D(DRAW_POINT32_X(0)), 4);
OUT_RING (chan, x1);
OUT_RING (chan, y1);
OUT_RING (chan, x2);
@@ -325,11 +322,11 @@ NVC0EXACopy(PixmapPtr pdpix, int srcX , int srcY,
NVC0EXA_LOCALS(pdpix);
WAIT_RING (chan, 17);
- BEGIN_RING(chan, eng2d, NV50_GRAPH_SERIALIZE, 1);
+ BEGIN_NVC0(chan, SUBC_2D(NV50_GRAPH_SERIALIZE), 1);
OUT_RING (chan, 0);
- BEGIN_RING(chan, eng2d, 0x088c, 1);
+ BEGIN_NVC0(chan, SUBC_2D(0x088c), 1);
OUT_RING (chan, 0);
- BEGIN_RING(chan, eng2d, NV50_2D_BLIT_DST_X, 12);
+ BEGIN_NVC0(chan, NV50_2D(BLIT_DST_X), 12);
OUT_RING (chan, dstX);
OUT_RING (chan, dstY);
OUT_RING (chan, width);
@@ -393,12 +390,12 @@ NVC0EXAUploadSIFC(const char *src, int src_pitch,
*/
NVC0EXASetClip(pdpix, x, y, w, h);
- BEGIN_RING(chan, eng2d, NV50_2D_OPERATION, 1);
+ BEGIN_NVC0(chan, NV50_2D(OPERATION), 1);
OUT_RING (chan, NV50_2D_OPERATION_SRCCOPY);
- BEGIN_RING(chan, eng2d, NV50_2D_SIFC_BITMAP_ENABLE, 2);
+ BEGIN_NVC0(chan, NV50_2D(SIFC_BITMAP_ENABLE), 2);
OUT_RING (chan, 0);
OUT_RING (chan, sifc_fmt);
- BEGIN_RING(chan, eng2d, NV50_2D_SIFC_WIDTH, 10);
+ BEGIN_NVC0(chan, NV50_2D(SIFC_WIDTH), 10);
OUT_RING (chan, (line_dwords * 4) / cpp);
OUT_RING (chan, h);
OUT_RING (chan, 0); /* SIFC_DX,Y_DU,V_FRACT,INT */
@@ -421,7 +418,7 @@ NVC0EXAUploadSIFC(const char *src, int src_pitch,
int size = count > 1792 ? 1792 : count;
WAIT_RING (chan, size + 1);
- BEGIN_RING_NI(chan, eng2d, NV50_2D_SIFC_DATA, size);
+ BEGIN_NIC0(chan, NV50_2D(SIFC_DATA), size);
OUT_RINGp (chan, ptr, size);
ptr += size * 4;
@@ -498,7 +495,7 @@ NVC0EXARenderTarget(PixmapPtr ppix, PicturePtr ppict)
NOUVEAU_FALLBACK("invalid picture format\n");
}
- BEGIN_RING(chan, fermi, NVC0_3D_RT_ADDRESS_HIGH(0), 8);
+ BEGIN_NVC0(chan, NVC0_3D(RT_ADDRESS_HIGH(0)), 8);
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;
@@ -591,24 +588,24 @@ NVC0EXATexture(PixmapPtr ppix, PicturePtr ppict, unsigned unit)
if (!nv50_style_tiled_pixmap(ppix))
NOUVEAU_FALLBACK("pixmap is scanout buffer\n");
- BEGIN_RING(chan, fermi, NVC0_3D_TIC_ADDRESS_HIGH, 3);
+ BEGIN_NVC0(chan, NVC0_3D(TIC_ADDRESS_HIGH), 3);
if (OUT_RELOCh(chan, pNv->tesla_scratch, TIC_OFFSET, tcb_flags) ||
OUT_RELOCl(chan, pNv->tesla_scratch, TIC_OFFSET, tcb_flags))
return FALSE;
OUT_RING (chan, 15);
- BEGIN_RING(chan, m2mf, NVC0_M2MF_OFFSET_OUT_HIGH, 2);
+ BEGIN_NVC0(chan, NVC0_M2MF(OFFSET_OUT_HIGH), 2);
if (OUT_RELOCh(chan, pNv->tesla_scratch,
TIC_OFFSET + unit * 32, tcb_flags) ||
OUT_RELOCl(chan, pNv->tesla_scratch,
TIC_OFFSET + unit * 32, tcb_flags))
return FALSE;
- BEGIN_RING(chan, m2mf, NVC0_M2MF_LINE_LENGTH_IN, 2);
+ BEGIN_NVC0(chan, NVC0_M2MF(LINE_LENGTH_IN), 2);
OUT_RING (chan, 8 * 4);
OUT_RING (chan, 1);
- BEGIN_RING(chan, m2mf, NVC0_M2MF_EXEC, 1);
+ BEGIN_NVC0(chan, NVC0_M2MF(EXEC), 1);
OUT_RING (chan, 0x100111);
- BEGIN_RING_NI(chan, m2mf, NVC0_M2MF_DATA, 8);
+ BEGIN_NIC0(chan, NVC0_M2MF(DATA), 8);
switch (ppict->format) {
case PICT_a8r8g8b8:
@@ -690,24 +687,24 @@ NVC0EXATexture(PixmapPtr ppix, PicturePtr ppict, unsigned unit)
OUT_RING (chan, 0x03000000);
OUT_RING (chan, 0x00000000);
- BEGIN_RING(chan, fermi, NVC0_3D_TSC_ADDRESS_HIGH, 3);
+ BEGIN_NVC0(chan, NVC0_3D(TSC_ADDRESS_HIGH), 3);
if (OUT_RELOCh(chan, pNv->tesla_scratch, TSC_OFFSET, tcb_flags) ||
OUT_RELOCl(chan, pNv->tesla_scratch, TSC_OFFSET, tcb_flags))
return FALSE;
OUT_RING (chan, 0);
- BEGIN_RING(chan, m2mf, NVC0_M2MF_OFFSET_OUT_HIGH, 2);
+ BEGIN_NVC0(chan, NVC0_M2MF(OFFSET_OUT_HIGH), 2);
if (OUT_RELOCh(chan, pNv->tesla_scratch,
TSC_OFFSET + unit * 32, tcb_flags) ||
OUT_RELOCl(chan, pNv->tesla_scratch,
TSC_OFFSET + unit * 32, tcb_flags))
return FALSE;
- BEGIN_RING(chan, m2mf, NVC0_M2MF_LINE_LENGTH_IN, 2);
+ BEGIN_NVC0(chan, NVC0_M2MF(LINE_LENGTH_IN), 2);
OUT_RING (chan, 8 * 4);
OUT_RING (chan, 1);
- BEGIN_RING(chan, m2mf, NVC0_M2MF_EXEC, 1);
+ BEGIN_NVC0(chan, NVC0_M2MF(EXEC), 1);
OUT_RING (chan, 0x100111);
- BEGIN_RING_NI(chan, m2mf, NVC0_M2MF_DATA, 8);
+ BEGIN_NIC0(chan, NVC0_M2MF(DATA), 8);
if (ppict->repeat) {
switch (ppict->repeatType) {
@@ -794,18 +791,18 @@ NVC0EXABlend(PixmapPtr ppix, PicturePtr ppict, int op, int component_alpha)
}
if (sblend == BF(ONE) && dblend == BF(ZERO)) {
- BEGIN_RING(chan, fermi, NVC0_3D_BLEND_ENABLE(0), 1);
+ BEGIN_NVC0(chan, NVC0_3D(BLEND_ENABLE(0)), 1);
OUT_RING (chan, 0);
} else {
- BEGIN_RING(chan, fermi, NVC0_3D_BLEND_ENABLE(0), 1);
+ BEGIN_NVC0(chan, NVC0_3D(BLEND_ENABLE(0)), 1);
OUT_RING (chan, 1);
- BEGIN_RING(chan, fermi, NVC0_3D_BLEND_EQUATION_RGB, 5);
+ BEGIN_NVC0(chan, NVC0_3D(BLEND_EQUATION_RGB), 5);
OUT_RING (chan, NVC0_3D_BLEND_EQUATION_RGB_FUNC_ADD);
OUT_RING (chan, sblend);
OUT_RING (chan, dblend);
OUT_RING (chan, NVC0_3D_BLEND_EQUATION_ALPHA_FUNC_ADD);
OUT_RING (chan, sblend);
- BEGIN_RING(chan, fermi, NVC0_3D_BLEND_FUNC_DST_ALPHA, 1);
+ BEGIN_NVC0(chan, NVC0_3D(BLEND_FUNC_DST_ALPHA), 1);
OUT_RING (chan, dblend);
}
}
@@ -864,7 +861,7 @@ NVC0EXAPrepareComposite(int op,
NOUVEAU_FALLBACK("comp-alpha");
*/
- BEGIN_RING(chan, eng2d, NV50_GRAPH_SERIALIZE, 1);
+ BEGIN_NVC0(chan, SUBC_2D(NV50_GRAPH_SERIALIZE), 1);
OUT_RING (chan, 0);
if (!NVC0EXARenderTarget(pdpix, pdpict)) {
@@ -875,7 +872,7 @@ NVC0EXAPrepareComposite(int op,
NVC0EXABlend(pdpix, pdpict, op, pmpict && pmpict->componentAlpha &&
PICT_FORMAT_RGB(pmpict->format));
- BEGIN_RING(chan, fermi, NVC0_3D_CODE_ADDRESS_HIGH, 2);
+ BEGIN_NVC0(chan, NVC0_3D(CODE_ADDRESS_HIGH), 2);
if (OUT_RELOCh(chan, pNv->tesla_scratch, CODE_OFFSET, shd_flags) ||
OUT_RELOCl(chan, pNv->tesla_scratch, CODE_OFFSET, shd_flags)) {
MARK_UNDO(chan);
@@ -886,7 +883,7 @@ NVC0EXAPrepareComposite(int op,
MARK_UNDO(chan);
NOUVEAU_FALLBACK("src picture invalid\n");
}
- BEGIN_RING(chan, fermi, NVC0_3D_BIND_TIC(4), 1);
+ BEGIN_NVC0(chan, NVC0_3D(BIND_TIC(4)), 1);
OUT_RING (chan, (0 << 9) | (0 << 1) | NVC0_3D_BIND_TIC_ACTIVE);
if (pmpict) {
@@ -896,10 +893,10 @@ NVC0EXAPrepareComposite(int op,
}
state->have_mask = TRUE;
- BEGIN_RING(chan, fermi, NVC0_3D_BIND_TIC(4), 1);
+ BEGIN_NVC0(chan, NVC0_3D(BIND_TIC(4)), 1);
OUT_RING (chan, (1 << 9) | (1 << 1) | NVC0_3D_BIND_TIC_ACTIVE);
- BEGIN_RING(chan, fermi, NVC0_3D_SP_START_ID(5), 1);
+ BEGIN_NVC0(chan, NVC0_3D(SP_START_ID(5)), 1);
if (pdpict->format == PICT_a8) {
OUT_RING (chan, PFP_C_A8);
} else {
@@ -916,21 +913,21 @@ NVC0EXAPrepareComposite(int op,
} else {
state->have_mask = FALSE;
- BEGIN_RING(chan, fermi, NVC0_3D_BIND_TIC(4), 1);
+ BEGIN_NVC0(chan, NVC0_3D(BIND_TIC(4)), 1);
OUT_RING (chan, (1 << 1) | 0);
- BEGIN_RING(chan, fermi, NVC0_3D_SP_START_ID(5), 1);
+ BEGIN_NVC0(chan, NVC0_3D(SP_START_ID(5)), 1);
if (pdpict->format == PICT_a8)
OUT_RING (chan, PFP_S_A8);
else
OUT_RING (chan, PFP_S);
}
- BEGIN_RING(chan, fermi, NVC0_3D_TSC_FLUSH, 1);
+ BEGIN_NVC0(chan, NVC0_3D(TSC_FLUSH), 1);
OUT_RING (chan, 0);
- BEGIN_RING(chan, fermi, NVC0_3D_TIC_FLUSH, 1);
+ BEGIN_NVC0(chan, NVC0_3D(TIC_FLUSH), 1);
OUT_RING (chan, 0);
- BEGIN_RING(chan, fermi, NVC0_3D_TEX_CACHE_CTL, 1);
+ BEGIN_NVC0(chan, NVC0_3D(TEX_CACHE_CTL), 1);
OUT_RING (chan, 0);
pNv->alu = op;
@@ -975,10 +972,10 @@ NVC0EXAComposite(PixmapPtr pdpix,
float sX0, sX1, sX2, sY0, sY1, sY2;
WAIT_RING (chan, 64);
- BEGIN_RING(chan, fermi, NVC0_3D_SCISSOR_HORIZ(0), 2);
+ BEGIN_NVC0(chan, NVC0_3D(SCISSOR_HORIZ(0)), 2);
OUT_RING (chan, ((dx + w) << 16) | dx);
OUT_RING (chan, ((dy + h) << 16) | dy);
- BEGIN_RING(chan, fermi, NVC0_3D_VERTEX_BEGIN_GL, 1);
+ BEGIN_NVC0(chan, NVC0_3D(VERTEX_BEGIN_GL), 1);
OUT_RING (chan, NVC0_3D_VERTEX_BEGIN_GL_PRIMITIVE_TRIANGLES);
NVC0EXATransform(state->unit[0].transform, sx, sy + (h * 2),
@@ -1013,7 +1010,7 @@ NVC0EXAComposite(PixmapPtr pdpix,
VTX1s(pNv, sX2, sY2, dx + (w * 2), dy);
}
- BEGIN_RING(chan, fermi, NVC0_3D_VERTEX_END_GL, 1);
+ BEGIN_NVC0(chan, NVC0_3D(VERTEX_END_GL), 1);
OUT_RING (chan, 0);
}
@@ -1037,28 +1034,28 @@ NVC0EXARectM2MF(NVPtr pNv, int w, int h, int cpp,
unsigned exec = 0;
if (src->tile_flags & NOUVEAU_BO_TILE_LAYOUT_MASK) {
- BEGIN_RING(chan, m2mf, NVC0_M2MF_TILING_MODE_IN, 5);
+ BEGIN_NVC0(chan, NVC0_M2MF(TILING_MODE_IN), 5);
OUT_RING (chan, src->tile_mode);
OUT_RING (chan, src_pitch);
OUT_RING (chan, src_h);
OUT_RING (chan, 1);
OUT_RING (chan, 0);
} else {
- BEGIN_RING(chan, m2mf, NVC0_M2MF_PITCH_IN, 1);
+ BEGIN_NVC0(chan, NVC0_M2MF(PITCH_IN), 1);
OUT_RING (chan, src_pitch);
exec |= NVC0_M2MF_EXEC_LINEAR_IN;
}
if (dst->tile_flags & NOUVEAU_BO_TILE_LAYOUT_MASK) {
- BEGIN_RING(chan, m2mf, NVC0_M2MF_TILING_MODE_OUT, 5);
+ BEGIN_NVC0(chan, NVC0_M2MF(TILING_MODE_OUT), 5);
OUT_RING (chan, dst->tile_mode);
OUT_RING (chan, dst_pitch);
OUT_RING (chan, dst_h);
OUT_RING (chan, 1);
OUT_RING (chan, 0);
} else {
- BEGIN_RING(chan, m2mf, NVC0_M2MF_PITCH_OUT, 1);
+ BEGIN_NVC0(chan, NVC0_M2MF(PITCH_OUT), 1);
OUT_RING (chan, dst_pitch);
exec |= NVC0_M2MF_EXEC_LINEAR_OUT;
@@ -1073,7 +1070,7 @@ NVC0EXARectM2MF(NVPtr pNv, int w, int h, int cpp,
return FALSE;
if (src->tile_flags & NOUVEAU_BO_TILE_LAYOUT_MASK) {
- BEGIN_RING(chan, m2mf, NVC0_M2MF_TILING_POSITION_IN_X, 2);
+ BEGIN_NVC0(chan, NVC0_M2MF(TILING_POSITION_IN_X), 2);
OUT_RING (chan, src_x * cpp);
OUT_RING (chan, src_y);
} else {
@@ -1081,31 +1078,31 @@ NVC0EXARectM2MF(NVPtr pNv, int w, int h, int cpp,
}
if (dst->tile_flags & NOUVEAU_BO_TILE_LAYOUT_MASK) {
- BEGIN_RING(chan, m2mf, NVC0_M2MF_TILING_POSITION_OUT_X, 2);
+ BEGIN_NVC0(chan, NVC0_M2MF(TILING_POSITION_OUT_X), 2);
OUT_RING (chan, dst_x * cpp);
OUT_RING (chan, dst_y);
} else {
dst_off = dst_y * dst_pitch + dst_x * cpp;
}
- BEGIN_RING(chan, m2mf, NVC0_M2MF_OFFSET_OUT_HIGH, 2);
+ BEGIN_NVC0(chan, NVC0_M2MF(OFFSET_OUT_HIGH), 2);
if (OUT_RELOCh(chan, dst, dst_off, dst_dom | NOUVEAU_BO_WR) ||
OUT_RELOCl(chan, dst, dst_off, dst_dom | NOUVEAU_BO_WR)) {
MARK_UNDO(chan);
return FALSE;
}
- BEGIN_RING(chan, m2mf, NVC0_M2MF_OFFSET_IN_HIGH, 2);
+ BEGIN_NVC0(chan, NVC0_M2MF(OFFSET_IN_HIGH), 2);
if (OUT_RELOCh(chan, src, src_off, src_dom | NOUVEAU_BO_RD) ||
OUT_RELOCl(chan, src, src_off, src_dom | NOUVEAU_BO_RD)) {
MARK_UNDO(chan);
return FALSE;
}
- BEGIN_RING(chan, m2mf, NVC0_M2MF_LINE_LENGTH_IN, 2);
+ BEGIN_NVC0(chan, NVC0_M2MF(LINE_LENGTH_IN), 2);
OUT_RING (chan, w * cpp);
OUT_RING (chan, line_count);
- BEGIN_RING(chan, m2mf, NVC0_M2MF_EXEC, 1);
+ BEGIN_NVC0(chan, NVC0_M2MF(EXEC), 1);
OUT_RING (chan, NVC0_M2MF_EXEC_QUERY_SHORT | exec);
src_y += line_count;