1 /***********************************************************************\ 2 * d3d10shader.d * 3 * * 4 * Windows API header module * 5 * * 6 * Placed into public domain * 7 \***********************************************************************/ 8 module win32.directx.d3d10shader; 9 10 private import win32.windows; 11 private import win32.directx.d3d10; 12 13 14 uint D3D10_TX_VERSION(uint _Major, uint _Minor) { 15 return ('T' << 24) | ('X' << 16) | (_Major << 8) | _Minor; 16 } 17 18 const D3D10_SHADER_DEBUG = 1 << 0; 19 const D3D10_SHADER_SKIP_VALIDATION = 1 << 1; 20 const D3D10_SHADER_SKIP_OPTIMIZATION = 1 << 2; 21 const D3D10_SHADER_PACK_MATRIX_ROW_MAJOR = 1 << 3; 22 const D3D10_SHADER_PACK_MATRIX_COLUMN_MAJOR = 1 << 4; 23 const D3D10_SHADER_PARTIAL_PRECISION = 1 << 5; 24 const D3D10_SHADER_FORCE_VS_SOFTWARE_NO_OPT = 1 << 6; 25 const D3D10_SHADER_FORCE_PS_SOFTWARE_NO_OPT = 1 << 7; 26 const D3D10_SHADER_NO_PRESHADER = 1 << 8; 27 const D3D10_SHADER_AVOID_FLOW_CONTROL = 1 << 9; 28 const D3D10_SHADER_PREFER_FLOW_CONTROL = 1 << 10; 29 const D3D10_SHADER_ENABLE_STRICTNESS = 1 << 11; 30 const D3D10_SHADER_ENABLE_BACKWARDS_COMPATIBILITY = 1 << 12; 31 const D3D10_SHADER_IEEE_STRICTNESS = 1 << 13; 32 const D3D10_SHADER_OPTIMIZATION_LEVEL0 = 1 << 14; 33 const D3D10_SHADER_OPTIMIZATION_LEVEL1 = 0; 34 const D3D10_SHADER_OPTIMIZATION_LEVEL2 = (1 << 14) | (1 << 15); 35 const D3D10_SHADER_OPTIMIZATION_LEVEL3 = 1 << 15; 36 37 struct D3D10_SHADER_MACRO { 38 LPCSTR Name; 39 LPCSTR Definition; 40 } 41 42 enum D3D10_SHADER_VARIABLE_CLASS { 43 D3D10_SVC_SCALAR, 44 D3D10_SVC_VECTOR, 45 D3D10_SVC_MATRIX_ROWS, 46 D3D10_SVC_MATRIX_COLUMNS, 47 D3D10_SVC_OBJECT, 48 D3D10_SVC_STRUCT, 49 D3D10_SVC_FORCE_DWORD = 0x7fffffff 50 } 51 52 enum D3D10_SHADER_VARIABLE_FLAGS { 53 D3D10_SVF_USERPACKED = 1, 54 D3D10_SVF_USED = 2, 55 D3D10_SVF_FORCE_DWORD = 0x7fffffff 56 } 57 58 enum D3D10_SHADER_VARIABLE_TYPE { 59 D3D10_SVT_VOID = 0, 60 D3D10_SVT_BOOL = 1, 61 D3D10_SVT_INT = 2, 62 D3D10_SVT_FLOAT = 3, 63 D3D10_SVT_STRING = 4, 64 D3D10_SVT_TEXTURE = 5, 65 D3D10_SVT_TEXTURE1D = 6, 66 D3D10_SVT_TEXTURE2D = 7, 67 D3D10_SVT_TEXTURE3D = 8, 68 D3D10_SVT_TEXTURECUBE = 9, 69 D3D10_SVT_SAMPLER = 10, 70 D3D10_SVT_PIXELSHADER = 15, 71 D3D10_SVT_VERTEXSHADER = 16, 72 D3D10_SVT_UINT = 19, 73 D3D10_SVT_UINT8 = 20, 74 D3D10_SVT_GEOMETRYSHADER = 21, 75 D3D10_SVT_RASTERIZER = 22, 76 D3D10_SVT_DEPTHSTENCIL = 23, 77 D3D10_SVT_BLEND = 24, 78 D3D10_SVT_BUFFER = 25, 79 D3D10_SVT_CBUFFER = 26, 80 D3D10_SVT_TBUFFER = 27, 81 D3D10_SVT_TEXTURE1DARRAY = 28, 82 D3D10_SVT_TEXTURE2DARRAY = 29, 83 D3D10_SVT_RENDERTARGETVIEW = 30, 84 D3D10_SVT_DEPTHSTENCILVIEW = 31, 85 D3D10_SVT_TEXTURE2DMS = 32, 86 D3D10_SVT_TEXTURE2DMSARRAY = 33, 87 D3D10_SVT_TEXTURECUBEARRAY = 34, 88 D3D10_SVT_FORCE_DWORD = 0x7fffffff 89 } 90 91 enum D3D10_SHADER_INPUT_FLAGS { 92 D3D10_SIF_USERPACKED = 1, 93 D3D10_SIF_COMPARISON_SAMPLER = 2, 94 D3D10_SIF_TEXTURE_COMPONENT_0 = 4, 95 D3D10_SIF_TEXTURE_COMPONENT_1 = 8, 96 D3D10_SIF_TEXTURE_COMPONENTS = 12, 97 D3D10_SIF_FORCE_DWORD = 0x7fffffff 98 } 99 100 enum D3D10_SHADER_INPUT_TYPE { 101 D3D10_SIT_CBUFFER, 102 D3D10_SIT_TBUFFER, 103 D3D10_SIT_TEXTURE, 104 D3D10_SIT_SAMPLER 105 } 106 107 enum D3D10_SHADER_CBUFFER_FLAGS { 108 D3D10_CBF_USERPACKED = 1, 109 D3D10_CBF_FORCE_DWORD = 0x7fffffff 110 } 111 112 enum D3D10_CBUFFER_TYPE { 113 D3D10_CT_CBUFFER, 114 D3D10_CT_TBUFFER 115 } 116 117 enum D3D10_NAME { 118 D3D10_NAME_UNDEFINED = 0, 119 D3D10_NAME_POSITION = 1, 120 D3D10_NAME_CLIP_DISTANCE = 2, 121 D3D10_NAME_CULL_DISTANCE = 3, 122 D3D10_NAME_RENDER_TARGET_ARRAY_INDEX = 4, 123 D3D10_NAME_VIEWPORT_ARRAY_INDEX = 5, 124 D3D10_NAME_VERTEX_ID = 6, 125 D3D10_NAME_PRIMITIVE_ID = 7, 126 D3D10_NAME_INSTANCE_ID = 8, 127 D3D10_NAME_IS_FRONT_FACE = 9, 128 D3D10_NAME_SAMPLE_INDEX = 10, 129 D3D10_NAME_TARGET = 64, 130 D3D10_NAME_DEPTH = 65, 131 D3D10_NAME_COVERAGE = 66 132 } 133 134 enum D3D10_RESOURCE_RETURN_TYPE { 135 D3D10_RETURN_TYPE_UNORM = 1, 136 D3D10_RETURN_TYPE_SNORM, 137 D3D10_RETURN_TYPE_SINT, 138 D3D10_RETURN_TYPE_UINT, 139 D3D10_RETURN_TYPE_FLOAT, 140 D3D10_RETURN_TYPE_MIXED 141 } 142 143 enum D3D10_REGISTER_COMPONENT_TYPE { 144 D3D10_REGISTER_COMPONENT_UNKNOWN = 0, 145 D3D10_REGISTER_COMPONENT_UINT32, 146 D3D10_REGISTER_COMPONENT_SINT32, 147 D3D10_REGISTER_COMPONENT_FLOAT32 148 } 149 150 enum D3D10_INCLUDE_TYPE { 151 D3D10_INCLUDE_LOCAL, 152 D3D10_INCLUDE_SYSTEM, 153 D3D10_INCLUDE_FORCE_DWORD = 0x7fffffff 154 } 155 156 interface ID3D10Include { 157 /* TODO: fix vtbl[0] bug 158 extern(Windows) : 159 HRESULT Open(D3D10_INCLUDE_TYPE IncludeType, LPCSTR pFileName, LPCVOID pParentData, LPCVOID* ppData, UINT* pBytes); 160 HRESULT Close(LPCVOID pData); 161 */ 162 } 163 164 struct D3D10_SHADER_DESC { 165 UINT Version; 166 LPCSTR Creator; 167 UINT Flags; 168 UINT ConstantBuffers; 169 UINT BoundResources; 170 UINT InputParameters; 171 UINT OutputParameters; 172 UINT InstructionCount; 173 UINT TempRegisterCount; 174 UINT TempArrayCount; 175 UINT DefCount; 176 UINT DclCount; 177 UINT TextureNormalInstructions; 178 UINT TextureLoadInstructions; 179 UINT TextureCompInstructions; 180 UINT TextureBiasInstructions; 181 UINT TextureGradientInstructions; 182 UINT FloatInstructionCount; 183 UINT IntInstructionCount; 184 UINT UintInstructionCount; 185 UINT StaticFlowControlCount; 186 UINT DynamicFlowControlCount; 187 UINT MacroInstructionCount; 188 UINT ArrayInstructionCount; 189 UINT CutInstructionCount; 190 UINT EmitInstructionCount; 191 D3D10_PRIMITIVE_TOPOLOGY GSOutputTopology; 192 UINT GSMaxOutputVertexCount; 193 } 194 195 struct D3D10_SHADER_BUFFER_DESC { 196 LPCSTR Name; 197 D3D10_CBUFFER_TYPE Type; 198 UINT Variables; 199 UINT Size; 200 UINT uFlags; 201 } 202 203 struct D3D10_SHADER_VARIABLE_DESC { 204 LPCSTR Name; 205 UINT StartOffset; 206 UINT Size; 207 UINT uFlags; 208 LPVOID DefaultValue; 209 } 210 211 struct D3D10_SHADER_TYPE_DESC { 212 D3D10_SHADER_VARIABLE_CLASS Class; 213 D3D10_SHADER_VARIABLE_TYPE Type; 214 UINT Rows; 215 UINT Columns; 216 UINT Elements; 217 UINT Members; 218 UINT Offset; 219 } 220 221 struct D3D10_SHADER_INPUT_BIND_DESC { 222 LPCSTR Name; 223 D3D10_SHADER_INPUT_TYPE Type; 224 UINT BindPoint; 225 UINT BindCount; 226 UINT uFlags; 227 D3D10_RESOURCE_RETURN_TYPE ReturnType; 228 D3D10_SRV_DIMENSION Dimension; 229 UINT NumSamples; 230 } 231 232 struct D3D10_SIGNATURE_PARAMETER_DESC { 233 LPCSTR SemanticName; 234 UINT SemanticIndex; 235 UINT Register; 236 D3D10_NAME SystemValueType; 237 D3D10_REGISTER_COMPONENT_TYPE ComponentType; 238 BYTE Mask; 239 BYTE ReadWriteMask; 240 } 241 242 extern(C) const GUID IID_ID3D10ShaderReflectionType = {0xc530ad7d, 0x9b16, 0x4395, [0xa9, 0x79, 0xba, 0x2e, 0xcf, 0xf8, 0x3a, 0xdd]}; 243 244 interface ID3D10ShaderReflectionType { 245 /* TODO: fix vtbl[0] bug 246 extern(Windows) : 247 HRESULT GetDesc(D3D10_SHADER_TYPE_DESC* pDesc); 248 ID3D10ShaderReflectionType* GetMemberTypeByIndex(UINT Index); 249 ID3D10ShaderReflectionType* GetMemberTypeByName(LPCSTR Name); 250 LPCSTR GetMemberTypeName(UINT Index); 251 */ 252 } 253 254 extern(C) const GUID IID_ID3D10ShaderReflectionVariable = {0x1bf63c95, 0x2650, 0x405d, [0x99, 0xc1, 0x36, 0x36, 0xbd, 0x1d, 0xa0, 0xa1]}; 255 256 interface ID3D10ShaderReflectionVariable { 257 /* TODO: fix vtbl[0] bug 258 extern(Windows) : 259 HRESULT GetDesc(D3D10_SHADER_VARIABLE_DESC* pDesc); 260 ID3D10ShaderReflectionType* GetType(); 261 */ 262 } 263 264 extern(C) const GUID IID_ID3D10ShaderReflectionConstantBuffer = {0x66c66a94, 0xdddd, 0x4b62, [0xa6, 0x6a, 0xf0, 0xda, 0x33, 0xc2, 0xb4, 0xd0]}; 265 266 interface ID3D10ShaderReflectionConstantBuffer { 267 /* TODO: fix vtbl[0] bug 268 extern(Windows) : 269 HRESULT GetDesc(D3D10_SHADER_BUFFER_DESC* pDesc); 270 ID3D10ShaderReflectionVariable* GetVariableByIndex(UINT Index); 271 ID3D10ShaderReflectionVariable* GetVariableByName(LPCSTR Name); 272 */ 273 } 274 275 extern(C) const GUID IID_ID3D10ShaderReflection = {0xd40e20b6, 0xf8f7, 0x42ad, [0xab, 0x20, 0x4b, 0xaf, 0x8f, 0x15, 0xdf, 0xaa]}; 276 277 interface ID3D10ShaderReflection : IUnknown { 278 extern(Windows) : 279 HRESULT QueryInterface(REFIID iid, LPVOID* ppv); 280 ULONG AddRef(); 281 ULONG Release(); 282 HRESULT GetDesc(D3D10_SHADER_DESC* pDesc); 283 ID3D10ShaderReflectionConstantBuffer* GetConstantBufferByIndex(UINT Index); 284 ID3D10ShaderReflectionConstantBuffer* GetConstantBufferByName(LPCSTR Name); 285 HRESULT GetResourceBindingDesc(UINT ResourceIndex, D3D10_SHADER_INPUT_BIND_DESC* pDesc); 286 HRESULT GetInputParameterDesc(UINT ParameterIndex, D3D10_SIGNATURE_PARAMETER_DESC* pDesc); 287 HRESULT GetOutputParameterDesc(UINT ParameterIndex, D3D10_SIGNATURE_PARAMETER_DESC* pDesc); 288 } 289 290 HRESULT D3D10CompileShader(LPCSTR pSrcData, SIZE_T SrcDataLen, LPCSTR pFileName, D3D10_SHADER_MACRO* pDefines, ID3D10Include pInclude, LPCSTR pFunctionName, LPCSTR pProfile, UINT Flags, ID3D10Blob* ppShader, ID3D10Blob* ppErrorMsgs); 291 HRESULT D3D10DisassembleShader(void* pShader, SIZE_T BytecodeLength, BOOL EnableColorCode, LPCSTR pComments, ID3D10Blob* ppDisassembly); 292 LPCSTR D3D10GetPixelShaderProfile(ID3D10Device pDevice); 293 LPCSTR D3D10GetVertexShaderProfile(ID3D10Device pDevice); 294 LPCSTR D3D10GetGeometryShaderProfile(ID3D10Device pDevice); 295 HRESULT D3D10ReflectShader(void* pShaderBytecode, SIZE_T BytecodeLength, ID3D10ShaderReflection* ppReflector); 296 HRESULT D3D10PreprocessShader(LPCSTR pSrcData, SIZE_T SrcDataSize, LPCSTR pFileName, D3D10_SHADER_MACRO* pDefines, ID3D10Include pInclude, ID3D10Blob* ppShaderText, ID3D10Blob* ppErrorMsgs); 297 HRESULT D3D10GetInputSignatureBlob(void* pShaderBytecode, SIZE_T BytecodeLength, ID3D10Blob* ppSignatureBlob); 298 HRESULT D3D10GetOutputSignatureBlob(void* pShaderBytecode, SIZE_T BytecodeLength, ID3D10Blob* ppSignatureBlob); 299 HRESULT D3D10GetInputAndOutputSignatureBlob(void* pShaderBytecode, SIZE_T BytecodeLength, ID3D10Blob* ppSignatureBlob); 300 HRESULT D3D10GetShaderDebugInfo(void* pShaderBytecode, SIZE_T BytecodeLength, ID3D10Blob* ppDebugInfo); 301