HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
VEX_VexTypes.h
Go to the documentation of this file.
1 /*
2  * PROPRIETARY INFORMATION. This software is proprietary to
3  * Side Effects Software Inc., and is not to be reproduced,
4  * transmitted, or disclosed in any way without written permission.
5  *
6  * NAME: VEX_VexTypes.h ( VEX Library, C++)
7  *
8  * COMMENTS: Data types for VEX variables
9  */
10 
11 #ifndef __VEX_VexTypes__
12 #define __VEX_VexTypes__
13 
14 #include "VEX_API.h"
15 #include <UT/UT_Array.h>
16 
17 /// VEX variable types.
19 {
20  VEX_TYPE_UNDEF, // Unknown type
21 
22  VEX_TYPE_VECTOR4, // Four scalars
23  VEX_TYPE_VECTOR, // Three scalars
24  VEX_TYPE_FLOAT, // A single scalar value
25  VEX_TYPE_INTEGER, // A single integer value
26  VEX_TYPE_STRING, // A character string
27  VEX_TYPE_MATRIX3, // A 3x3 (rotation) matrix
28  VEX_TYPE_MATRIX4, // A 4x4 (transform) matrix
29  VEX_TYPE_BSDF, // A BSDF
30  VEX_TYPE_VECTOR2, // Two scalars
31  VEX_TYPE_MATRIX2, // A 2x2 matrix.
32  VEX_TYPE_DICT, // An untyped dictionary
33 
34  VEX_MAX_TYPES // Sentinel
35 
36 };
37 
39 {
40  VEX_SURFACE_CONTEXT_ENUM, // Surface shading context
41  VEX_DISPLACE_CONTEXT_ENUM, // Displacement shading context
42  VEX_LIGHT_CONTEXT_ENUM, // Light shading context
43  VEX_SHADOW_CONTEXT_ENUM, // Shadow shading context
44  VEX_FOG_CONTEXT_ENUM, // Fog shading context
45  VEX_CHOP_CONTEXT_ENUM, // CHOP operator context
46  VEX_SOP_CONTEXT_ENUM, // SOP operator context
47  VEX_COP2_CONTEXT_ENUM, // COP operator context
48  VEX_I3D_CONTEXT_ENUM, // Image3D context
49  VEX_CVEX_CONTEXT_ENUM, // CVEX context
50  VEX_KVEX_CONTEXT_ENUM, // KVEX context
51 
53 };
55 
56 /// VEX is used in various contexts. Each context has its own set of functions
57 /// and variables available. The enum::VEX_ContextType can be used to limit
58 /// the VEX operator to a specific set of contexts. Contexts can be or'ed
59 /// together.
60 #define ENUM_TO_MASK(TOKEN) TOKEN = (1 << TOKEN##_ENUM)
62 {
64  ENUM_TO_MASK(VEX_SURFACE_CONTEXT),
65  ENUM_TO_MASK(VEX_DISPLACE_CONTEXT),
66  ENUM_TO_MASK(VEX_LIGHT_CONTEXT),
67  ENUM_TO_MASK(VEX_SHADOW_CONTEXT),
68  ENUM_TO_MASK(VEX_FOG_CONTEXT),
69  ENUM_TO_MASK(VEX_CHOP_CONTEXT),
70  ENUM_TO_MASK(VEX_SOP_CONTEXT),
71  ENUM_TO_MASK(VEX_COP2_CONTEXT),
72  ENUM_TO_MASK(VEX_I3D_CONTEXT),
73  ENUM_TO_MASK(VEX_CVEX_CONTEXT),
74  ENUM_TO_MASK(VEX_KVEX_CONTEXT)
75 };
76 
78 
79 /// @def VEX_SHADING_CONTEXT Shading Contexts for mantra
80 #define VEX_SHADING_CONTEXT ( VEX_SURFACE_CONTEXT \
81  | VEX_DISPLACE_CONTEXT \
82  | VEX_LIGHT_CONTEXT \
83  | VEX_SHADOW_CONTEXT \
84  | VEX_FOG_CONTEXT \
85  )
86 
87 /// @def VEX_OP_CONTEXT OP Contexts
88 #define VEX_OP_CONTEXT ( VEX_CHOP_CONTEXT \
89  | VEX_SOP_CONTEXT \
90  | VEX_COP2_CONTEXT \
91  )
92 
93 /// @def VEX_ALL_CONTEXT All contexts (shading, operator, i3d and CVEX)
94 #define VEX_ALL_CONTEXT ( VEX_SHADING_CONTEXT \
95  | VEX_OP_CONTEXT \
96  | VEX_I3D_CONTEXT \
97  | VEX_CVEX_CONTEXT \
98  | VEX_KVEX_CONTEXT \
99  )
100 
102 {
103  /// Don't write out #pragmas
105 
106  /// Add line hints for determining the generator node of each code section.
108 
109  /// Don't add extra comments to the code (header, origin markers, etc.)
111 
112  /// Generate shader calls for encapsulated shaders. The encapsulated shaders
113  /// are not a part of the resulting code from VEX_VexResolver::getVflCode.
114  /// Instead, call VEX_VexResolver::getDependencies to get the list of
115  /// shaders that will be called.
116  /// If this flag is not used, the encapsulated code will be embedded in
117  /// the resulting code and a direct function call used instead.
119 
120  /// Don't output empty boilerplate code if the real code generation failed.
122 
123  /// Don't add any header comment to the code.
125 
126  /// Don't add any shader #defines to the code.
128 
129  /// Ignore any errors in the VOP network when generating the code.
131 
132  /// Don't check if the imported shader actually exists.
134 
135  /// Promote any file path literals to a shader function parameter.
137 
139 };
141 
142 /// VEX code generation flags when calling VEX_VexResolver::getVflCode
144 {
146 
147  ENUM_TO_MASK(VEX_CG_OMIT_PRAGMAS),
148  ENUM_TO_MASK(VEX_CG_ADD_NODE_LINE_HINTS),
149  ENUM_TO_MASK(VEX_CG_OMIT_COMMENTS),
150  ENUM_TO_MASK(VEX_CG_CALL_ENCAPSULATED_SHADERS),
151  ENUM_TO_MASK(VEX_CG_NO_EMPTY_CODE),
152  ENUM_TO_MASK(VEX_CG_OMIT_HEADER_COMMENT),
153  ENUM_TO_MASK(VEX_CG_OMIT_SHADER_DEFINES),
154  ENUM_TO_MASK(VEX_CG_IGNORE_ERRORS),
155  ENUM_TO_MASK(VEX_CG_NO_SHADER_IMPORT_CHECK),
156  ENUM_TO_MASK(VEX_CG_AUTO_PROMOTE_FILE_VARS),
157 };
158 
159 /// Convenience operator to merge two VEX_CodeGenFlags enum values into one.
160 static inline VEX_CodeGenFlags
162 {
163  return VEX_CodeGenFlags(uint(a)|uint(b));
164 }
165 
167 {
168  VEX_SPECIALIZE_SPECIALIZING_ENUM, // Specializing code
169  VEX_SPECIALIZE_SHADOW_ENUM, // Specialize for shadow shader
172  VEX_SPECIALIZE_ENABLE_LOOP_UNSWITCH_ENUM, // Enable loop unswitching
173  VEX_SPECIALIZE_LPE_ENUM, // Specialize for LPE
174  VEX_SPECIALIZE_KARMA_ENUM, // Specialize shading for karma
175 
177 };
179 
181 {
183  ENUM_TO_MASK(VEX_SPECIALIZE_SPECIALIZING),
184  ENUM_TO_MASK(VEX_SPECIALIZE_SHADOW),
185  ENUM_TO_MASK(VEX_SPECIALIZE_DISABLE_JIT),
186  ENUM_TO_MASK(VEX_SPECIALIZE_DISABLE_JUMP_THREADING),
187  ENUM_TO_MASK(VEX_SPECIALIZE_ENABLE_LOOP_UNSWITCH),
188  ENUM_TO_MASK(VEX_SPECIALIZE_LPE),
189  ENUM_TO_MASK(VEX_SPECIALIZE_KARMA),
190 };
191 /// Convenience operator to merge two VEX_SpecializeFlags enum values into one.
192 static inline VEX_SpecializeFlags
194 {
195  return VEX_SpecializeFlags(uint(a)|uint(b));
196 }
197 
198 
199 #undef ENUM_TO_MASK
200 
201 #endif
202 
VEX_Type
VEX variable types.
Definition: VEX_VexTypes.h:18
VEX_CodeGenFlagsEnum
Definition: VEX_VexTypes.h:101
VEX_SpecializeFlags
Definition: VEX_VexTypes.h:180
Ignore any errors in the VOP network when generating the code.
Definition: VEX_VexTypes.h:130
GLboolean GLboolean GLboolean GLboolean a
Definition: glcorearb.h:1222
Don't add any header comment to the code.
Definition: VEX_VexTypes.h:124
Promote any file path literals to a shader function parameter.
Definition: VEX_VexTypes.h:136
Don't add extra comments to the code (header, origin markers, etc.)
Definition: VEX_VexTypes.h:110
SYS_STATIC_ASSERT(VEX_MAX_CONTEXT_ENUM<=32)
Add line hints for determining the generator node of each code section.
Definition: VEX_VexTypes.h:107
VEX_SpecializeFlagsEnum
Definition: VEX_VexTypes.h:166
const TypeMask operator|(const TypeMask &m1, const TypeMask &m2)
Definition: GA_PrimCompat.h:79
GLboolean GLboolean GLboolean b
Definition: glcorearb.h:1222
VEX_ContextTypeEnum
Definition: VEX_VexTypes.h:38
VEX_CodeGenFlags
VEX code generation flags when calling VEX_VexResolver::getVflCode.
Definition: VEX_VexTypes.h:143
Don't check if the imported shader actually exists.
Definition: VEX_VexTypes.h:133
Don't output empty boilerplate code if the real code generation failed.
Definition: VEX_VexTypes.h:121
Don't write out #pragmas.
Definition: VEX_VexTypes.h:104
VEX_ContextType
Definition: VEX_VexTypes.h:61
Don't add any shader #defines to the code.
Definition: VEX_VexTypes.h:127
unsigned int uint
Definition: SYS_Types.h:45
#define ENUM_TO_MASK(TOKEN)
Definition: VEX_VexTypes.h:60