Michal Krol | 2861e73 | 2004-03-29 11:09:34 +0000 | [diff] [blame] | 1 | /* |
| 2 | * Mesa 3-D graphics library |
Brian Paul | 61e694f | 2005-07-22 02:53:38 +0000 | [diff] [blame] | 3 | * Version: 6.3.1 |
Michal Krol | 2861e73 | 2004-03-29 11:09:34 +0000 | [diff] [blame] | 4 | * |
Brian Paul | 61e694f | 2005-07-22 02:53:38 +0000 | [diff] [blame] | 5 | * Copyright (C) 1999-2005 Brian Paul All Rights Reserved. |
Michal Krol | 2861e73 | 2004-03-29 11:09:34 +0000 | [diff] [blame] | 6 | * |
| 7 | * Permission is hereby granted, free of charge, to any person obtaining a |
| 8 | * copy of this software and associated documentation files (the "Software"), |
| 9 | * to deal in the Software without restriction, including without limitation |
| 10 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, |
| 11 | * and/or sell copies of the Software, and to permit persons to whom the |
| 12 | * Software is furnished to do so, subject to the following conditions: |
| 13 | * |
| 14 | * The above copyright notice and this permission notice shall be included |
| 15 | * in all copies or substantial portions of the Software. |
| 16 | * |
| 17 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
| 18 | * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
| 19 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL |
| 20 | * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN |
| 21 | * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
| 22 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
| 23 | */ |
| 24 | |
| 25 | |
| 26 | /* Private vertex program types and constants only used by files |
| 27 | * related to vertex programs. |
| 28 | * |
| 29 | * XXX TO-DO: Rename this file "vertprog.h" since it's not NV-specific. |
| 30 | */ |
| 31 | |
| 32 | |
| 33 | #ifndef NVVERTPROG_H |
| 34 | #define NVVERTPROG_H |
| 35 | |
| 36 | |
| 37 | /* Vertex program opcodes */ |
| 38 | enum vp_opcode |
| 39 | { |
Keith Whitwell | 7c26b61 | 2005-04-21 14:46:57 +0000 | [diff] [blame] | 40 | VP_OPCODE_ABS, |
Michal Krol | 2861e73 | 2004-03-29 11:09:34 +0000 | [diff] [blame] | 41 | VP_OPCODE_ADD, |
Keith Whitwell | 7c26b61 | 2005-04-21 14:46:57 +0000 | [diff] [blame] | 42 | VP_OPCODE_ARL, |
Michal Krol | 2861e73 | 2004-03-29 11:09:34 +0000 | [diff] [blame] | 43 | VP_OPCODE_DP3, |
| 44 | VP_OPCODE_DP4, |
Michal Krol | 2861e73 | 2004-03-29 11:09:34 +0000 | [diff] [blame] | 45 | VP_OPCODE_DPH, |
Keith Whitwell | 7c26b61 | 2005-04-21 14:46:57 +0000 | [diff] [blame] | 46 | VP_OPCODE_DST, |
| 47 | VP_OPCODE_END, /* Placeholder */ |
| 48 | VP_OPCODE_EX2, /* ARB only */ |
| 49 | VP_OPCODE_EXP, |
| 50 | VP_OPCODE_FLR, /* ARB */ |
| 51 | VP_OPCODE_FRC, /* ARB */ |
| 52 | VP_OPCODE_LG2, /* ARB only */ |
| 53 | VP_OPCODE_LIT, |
| 54 | VP_OPCODE_LOG, |
| 55 | VP_OPCODE_MAD, |
| 56 | VP_OPCODE_MAX, |
| 57 | VP_OPCODE_MIN, |
| 58 | VP_OPCODE_MOV, |
| 59 | VP_OPCODE_MUL, |
| 60 | VP_OPCODE_POW, /* ARB only */ |
| 61 | VP_OPCODE_PRINT, /* Mesa only */ |
Michal Krol | 2861e73 | 2004-03-29 11:09:34 +0000 | [diff] [blame] | 62 | VP_OPCODE_RCC, |
Keith Whitwell | 7c26b61 | 2005-04-21 14:46:57 +0000 | [diff] [blame] | 63 | VP_OPCODE_RCP, |
| 64 | VP_OPCODE_RSQ, |
| 65 | VP_OPCODE_SGE, |
| 66 | VP_OPCODE_SLT, |
Michal Krol | 2861e73 | 2004-03-29 11:09:34 +0000 | [diff] [blame] | 67 | VP_OPCODE_SUB, |
Keith Whitwell | 7c26b61 | 2005-04-21 14:46:57 +0000 | [diff] [blame] | 68 | VP_OPCODE_SWZ, /* ARB only */ |
Keith Whitwell | 17d249d | 2005-06-07 10:56:17 +0000 | [diff] [blame] | 69 | VP_OPCODE_XPD, /* ARB only */ |
| 70 | |
| 71 | VP_MAX_OPCODE |
Michal Krol | 2861e73 | 2004-03-29 11:09:34 +0000 | [diff] [blame] | 72 | }; |
| 73 | |
| 74 | |
| 75 | |
| 76 | /* Instruction source register */ |
| 77 | struct vp_src_register |
| 78 | { |
Brian Paul | 61e694f | 2005-07-22 02:53:38 +0000 | [diff] [blame] | 79 | GLuint File:4; /* one of the PROGRAM_* register file values */ |
| 80 | GLint Index:9; /* may be negative for relative addressing */ |
Keith Whitwell | 7c26b61 | 2005-04-21 14:46:57 +0000 | [diff] [blame] | 81 | GLuint Swizzle:12; |
| 82 | GLuint Negate:4; /* ARB requires component-wise negation. */ |
| 83 | GLuint RelAddr:1; |
Brian Paul | 61e694f | 2005-07-22 02:53:38 +0000 | [diff] [blame] | 84 | GLuint pad:2; |
Michal Krol | 2861e73 | 2004-03-29 11:09:34 +0000 | [diff] [blame] | 85 | }; |
| 86 | |
| 87 | |
| 88 | /* Instruction destination register */ |
| 89 | struct vp_dst_register |
| 90 | { |
Brian Paul | 61e694f | 2005-07-22 02:53:38 +0000 | [diff] [blame] | 91 | GLuint File:4; /* one of the PROGRAM_* register file values */ |
Keith Whitwell | 7c26b61 | 2005-04-21 14:46:57 +0000 | [diff] [blame] | 92 | GLuint Index:8; |
| 93 | GLuint WriteMask:4; |
| 94 | GLuint pad:16; |
Michal Krol | 2861e73 | 2004-03-29 11:09:34 +0000 | [diff] [blame] | 95 | }; |
| 96 | |
| 97 | |
| 98 | /* Vertex program instruction */ |
| 99 | struct vp_instruction |
| 100 | { |
Keith Whitwell | 7c26b61 | 2005-04-21 14:46:57 +0000 | [diff] [blame] | 101 | GLshort Opcode; |
Michal Krol | 2861e73 | 2004-03-29 11:09:34 +0000 | [diff] [blame] | 102 | #if FEATURE_MESA_program_debug |
Keith Whitwell | 7c26b61 | 2005-04-21 14:46:57 +0000 | [diff] [blame] | 103 | GLshort StringPos; |
Michal Krol | 2861e73 | 2004-03-29 11:09:34 +0000 | [diff] [blame] | 104 | #endif |
Brian Paul | 575700f | 2004-12-16 03:07:18 +0000 | [diff] [blame] | 105 | void *Data; /* some arbitrary data, only used for PRINT instruction now */ |
Keith Whitwell | 7c26b61 | 2005-04-21 14:46:57 +0000 | [diff] [blame] | 106 | struct vp_src_register SrcReg[3]; |
| 107 | struct vp_dst_register DstReg; |
Michal Krol | 2861e73 | 2004-03-29 11:09:34 +0000 | [diff] [blame] | 108 | }; |
| 109 | |
| 110 | |
Brian Paul | 7aebaf3 | 2005-10-30 21:23:23 +0000 | [diff] [blame^] | 111 | extern void |
| 112 | _mesa_init_vp_instruction(struct vp_instruction *inst); |
| 113 | |
| 114 | |
Michal Krol | 2861e73 | 2004-03-29 11:09:34 +0000 | [diff] [blame] | 115 | #endif /* VERTPROG_H */ |