diff options
Diffstat (limited to 'src/nvc0_accel.h')
-rw-r--r-- | src/nvc0_accel.h | 54 |
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 |