summaryrefslogtreecommitdiff
path: root/src/nvc0_accel.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/nvc0_accel.h')
-rw-r--r--src/nvc0_accel.h54
1 files changed, 34 insertions, 20 deletions
diff --git a/src/nvc0_accel.h b/src/nvc0_accel.h
index 9a7475a..3b838ea 100644
--- a/src/nvc0_accel.h
+++ b/src/nvc0_accel.h
@@ -13,10 +13,12 @@
#define SUBC_3D(mthd) 0, (mthd)
#define NVC0_3D(mthd) SUBC_3D(NVC0_3D_##mthd)
#define SUBC_M2MF(mthd) 2, (mthd)
+#define SUBC_P2MF(mthd) 2, (mthd)
#define NVC0_M2MF(mthd) SUBC_M2MF(NVC0_M2MF_##mthd)
#define SUBC_2D(mthd) 3, (mthd)
#define NV50_2D(mthd) SUBC_2D(NV50_2D_##mthd)
#define NVC0_2D(mthd) SUBC_2D(NVC0_2D_##mthd)
+#define SUBC_COPY(mthd) 4, (mthd)
#define SUBC_NVSW(mthd) 5, (mthd)
/* scratch buffer offsets */
@@ -26,21 +28,23 @@
#define NTFY_OFFSET 0x08000
#define MISC_OFFSET 0x10000
-/* fragment programs */
-#define PFP_S 0x0000 /* (src) */
-#define PFP_C 0x0100 /* (src IN mask) */
-#define PFP_CCA 0x0200 /* (src IN mask) component-alpha */
-#define PFP_CCASA 0x0300 /* (src IN mask) component-alpha src-alpha */
-#define PFP_S_A8 0x0400 /* (src) a8 rt */
-#define PFP_C_A8 0x0500 /* (src IN mask) a8 rt - same for CA and CA_SA */
-#define PFP_NV12 0x0600 /* NV12 YUV->RGB */
-
-/* vertex programs */
-#define PVP_PASS 0x0700 /* vertex pass-through shader */
+/* vertex/fragment programs */
+#define SPO ((pNv->Architecture < NV_ARCH_E0) ? 0x0000 : 0x0030)
+#define PVP_PASS (0x0000 + SPO) /* vertex pass-through shader */
+#define PFP_S (0x0200 + SPO) /* (src) */
+#define PFP_C (0x0400 + SPO) /* (src IN mask) */
+#define PFP_CCA (0x0600 + SPO) /* (src IN mask) component-alpha */
+#define PFP_CCASA (0x0800 + SPO) /* (src IN mask) component-alpha src-alpha */
+#define PFP_S_A8 (0x0a00 + SPO) /* (src) a8 rt */
+#define PFP_C_A8 (0x0c00 + SPO) /* (src IN mask) a8 rt - same for CCA/CCASA */
+#define PFP_NV12 (0x0e00 + SPO) /* NV12 YUV->RGB */
/* shader constants */
#define CB_OFFSET 0x1000
+/* texture bindings (kepler) */
+#define TB_OFFSET 0x1800
+
#define VTX_ATTR(a, c, t, s) \
((NVC0_3D_VTX_ATTR_DEFINE_TYPE_##t) | \
((a) << NVC0_3D_VTX_ATTR_DEFINE_ATTR__SHIFT) | \
@@ -98,15 +102,25 @@ 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);
+ if (push->client->device->chipset < 0xe0) {
+ 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);
+ } else {
+ BEGIN_NVC0(push, SUBC_P2MF(0x0180), 4);
+ PUSH_DATA (push, dwords * 4);
+ PUSH_DATA (push, 1);
+ PUSH_DATA (push, (bo->offset + delta) >> 32);
+ PUSH_DATA (push, (bo->offset + delta));
+ BEGIN_1IC0(push, SUBC_P2MF(0x01b0), 1 + dwords);
+ PUSH_DATA (push, 0x001001);
+ }
}
#endif