diff options
author | Aapo Tahkola <aet@rasterburn.org> | 2006-01-09 22:53:38 +0000 |
---|---|---|
committer | Aapo Tahkola <aet@rasterburn.org> | 2006-01-09 22:53:38 +0000 |
commit | 2d4ff6a8cf83ca3a829021482b08b95bea7aa31a (patch) | |
tree | 38917d4645330e519ffa0a3cacfcf2a6f90fe280 /src/mesa/drivers/dri/r300/r300_fragprog.h | |
parent | c217d5a3a84cd55456e3312873933db80ba00d67 (diff) |
Missing patch from Ben Skeggs:
Lots of changes, and fixes for some badness on my behalf.
1. Disposable data used during fp compile is now per-context,
rather than per-program to save memory.
2. Track usage of INPUT/TEMP registers from Mesa program, free
them when no longer required so the hw temps can be re-used.
3. Changed LAST_NODE to OUTPUT_COLOR (see r300_reg.h)
4. Implemented remaining ARB_f_p instructions, with the exception
of the trig/LIT opcodes.
5. Treat ZERO/ONE swizzles the same way as other native swizzles.
6. emit_arith changes, basically a complete re-write. Should
produce cleaner instructions, but no real functional changes.
internal reg -> hw reg routines shared with emit_tex. A bit
messy still.
Diffstat (limited to 'src/mesa/drivers/dri/r300/r300_fragprog.h')
-rw-r--r-- | src/mesa/drivers/dri/r300/r300_fragprog.h | 33 |
1 files changed, 30 insertions, 3 deletions
diff --git a/src/mesa/drivers/dri/r300/r300_fragprog.h b/src/mesa/drivers/dri/r300/r300_fragprog.h index fb9d067f71..2bcc23d514 100644 --- a/src/mesa/drivers/dri/r300/r300_fragprog.h +++ b/src/mesa/drivers/dri/r300/r300_fragprog.h @@ -21,6 +21,8 @@ typedef struct _pfs_reg_t { GLuint v_swz:5; GLuint s_swz:5; GLuint negate:1; //XXX: we need to handle negate individually + GLuint absolute:1; + GLboolean no_use:1; GLboolean valid:1; } pfs_reg_t; @@ -38,12 +40,37 @@ typedef struct _pfs_reg_t { #define PFS_OP_RSQ 10 #define PFS_OP_REPL_ALPHA 11 #define MAX_PFS_OP 11 -#define OP(n) PFS_OP_##n #define PFS_FLAG_SAT (1 << 0) #define PFS_FLAG_ABS (1 << 1) -extern void translate_fragment_shader(struct r300_fragment_program *rp); +#define ARG_NEG (1 << 5) +#define ARG_ABS (1 << 6) +#define ARG_MASK (127 << 0) +#define ARG_STRIDE 7 +#define SRC_CONST (1 << 5) +#define SRC_MASK (63 << 0) +#define SRC_STRIDE 6 -#endif /* __R300_FRAGPROG_H_ */ +#define NOP_INST0 ( \ + (R300_FPI0_OUTC_MAD) | \ + (R300_FPI0_ARGC_ZERO << R300_FPI0_ARG0C_SHIFT) | \ + (R300_FPI0_ARGC_ZERO << R300_FPI0_ARG1C_SHIFT) | \ + (R300_FPI0_ARGC_ZERO << R300_FPI0_ARG2C_SHIFT)) +#define NOP_INST1 ( \ + ((0 | SRC_CONST) << R300_FPI1_SRC0C_SHIFT) | \ + ((0 | SRC_CONST) << R300_FPI1_SRC1C_SHIFT) | \ + ((0 | SRC_CONST) << R300_FPI1_SRC2C_SHIFT)) +#define NOP_INST2 ( \ + (R300_FPI2_OUTA_MAD) | \ + (R300_FPI2_ARGA_ZERO << R300_FPI2_ARG0A_SHIFT) | \ + (R300_FPI2_ARGA_ZERO << R300_FPI2_ARG1A_SHIFT) | \ + (R300_FPI2_ARGA_ZERO << R300_FPI2_ARG2A_SHIFT)) +#define NOP_INST3 ( \ + ((0 | SRC_CONST) << R300_FPI3_SRC0A_SHIFT) | \ + ((0 | SRC_CONST) << R300_FPI3_SRC1A_SHIFT) | \ + ((0 | SRC_CONST) << R300_FPI3_SRC2A_SHIFT)) + + +#endif |