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.c48
1 files changed, 45 insertions, 3 deletions
diff --git a/src/nvc0_exa.c b/src/nvc0_exa.c
index 6add60b..d3fd316 100644
--- a/src/nvc0_exa.c
+++ b/src/nvc0_exa.c
@@ -914,14 +914,56 @@ NVC0EXAComposite(PixmapPtr pdpix,
if (!PUSH_SPACE(push, 64))
return;
+ if (pNv->dev->chipset >= 0x110) {
+ BEGIN_NVC0(push, NVC0_3D(CB_SIZE), 3);
+ PUSH_DATA (push, 256);
+ PUSH_DATA (push, (pNv->scratch->offset + PVP_DATA) >> 32);
+ PUSH_DATA (push, (pNv->scratch->offset + PVP_DATA));
+ BEGIN_1IC0(push, NVC0_3D(CB_POS), 24 + 1);
+ PUSH_DATA (push, 0x80);
+
+ PUSH_DATAf(push, dx);
+ PUSH_DATAf(push, dy + (h * 2));
+ PUSH_DATAf(push, 0);
+ PUSH_DATAf(push, 1);
+ PUSH_DATAf(push, sx);
+ PUSH_DATAf(push, sy + (h * 2));
+ PUSH_DATAf(push, mx);
+ PUSH_DATAf(push, my + (h * 2));
+
+ PUSH_DATAf(push, dx);
+ PUSH_DATAf(push, dy);
+ PUSH_DATAf(push, 0);
+ PUSH_DATAf(push, 1);
+ PUSH_DATAf(push, sx);
+ PUSH_DATAf(push, sy);
+ PUSH_DATAf(push, mx);
+ PUSH_DATAf(push, my);
+
+ PUSH_DATAf(push, dx + (w * 2));
+ PUSH_DATAf(push, dy);
+ PUSH_DATAf(push, 0);
+ PUSH_DATAf(push, 1);
+ PUSH_DATAf(push, sx + (w * 2));
+ PUSH_DATAf(push, sy);
+ PUSH_DATAf(push, mx + (w * 2));
+ PUSH_DATAf(push, my);
+ }
+
BEGIN_NVC0(push, NVC0_3D(SCISSOR_HORIZ(0)), 2);
PUSH_DATA (push, ((dx + w) << 16) | dx);
PUSH_DATA (push, ((dy + h) << 16) | dy);
BEGIN_NVC0(push, NVC0_3D(VERTEX_BEGIN_GL), 1);
PUSH_DATA (push, NVC0_3D_VERTEX_BEGIN_GL_PRIMITIVE_TRIANGLES);
- PUSH_VTX2s(push, sx, sy + (h * 2), mx, my + (h * 2), dx, dy + (h * 2));
- PUSH_VTX2s(push, sx, sy, mx, my, dx, dy);
- PUSH_VTX2s(push, sx + (w * 2), sy, mx + (w * 2), my, dx + (w * 2), dy);
+ if (pNv->dev->chipset < 0x110) {
+ PUSH_VTX2s(push, sx, sy + (h * 2), mx, my + (h * 2), dx, dy + (h * 2));
+ PUSH_VTX2s(push, sx, sy, mx, my, dx, dy);
+ PUSH_VTX2s(push, sx + (w * 2), sy, mx + (w * 2), my, dx + (w * 2), dy);
+ } else {
+ BEGIN_NVC0(push, NVC0_3D(VERTEX_BUFFER_FIRST), 2);
+ PUSH_DATA (push, 0);
+ PUSH_DATA (push, 3);
+ }
BEGIN_NVC0(push, NVC0_3D(VERTEX_END_GL), 1);
PUSH_DATA (push, 0);
}