Subversion Repositories Games.Chess Giants

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. //////////////////////////////////////////////////////////////////////////////
  2. //
  3. //  Copyright (c) Microsoft Corporation.  All rights reserved.
  4. //
  5. //  File:       D3D10Shader.h
  6. //  Content:    D3D10 Shader Types and APIs
  7. //
  8. //////////////////////////////////////////////////////////////////////////////
  9.  
  10. #ifndef __D3D10SHADER_H__
  11. #define __D3D10SHADER_H__
  12.  
  13. #include "d3d10.h"
  14.  
  15.  
  16. //---------------------------------------------------------------------------
  17. // D3D10_TX_VERSION:
  18. // --------------
  19. // Version token used to create a procedural texture filler in effects
  20. // Used by D3D10Fill[]TX functions
  21. //---------------------------------------------------------------------------
  22. #define D3D10_TX_VERSION(_Major,_Minor) (('T' << 24) | ('X' << 16) | ((_Major) << 8) | (_Minor))
  23.  
  24.  
  25. //----------------------------------------------------------------------------
  26. // D3D10SHADER flags:
  27. // -----------------
  28. // D3D10_SHADER_DEBUG
  29. //   Insert debug file/line/type/symbol information.
  30. //
  31. // D3D10_SHADER_SKIP_VALIDATION
  32. //   Do not validate the generated code against known capabilities and
  33. //   constraints.  This option is only recommended when compiling shaders
  34. //   you KNOW will work.  (ie. have compiled before without this option.)
  35. //   Shaders are always validated by D3D before they are set to the device.
  36. //
  37. // D3D10_SHADER_SKIP_OPTIMIZATION
  38. //   Instructs the compiler to skip optimization steps during code generation.
  39. //   Unless you are trying to isolate a problem in your code using this option
  40. //   is not recommended.
  41. //
  42. // D3D10_SHADER_PACK_MATRIX_ROW_MAJOR
  43. //   Unless explicitly specified, matrices will be packed in row-major order
  44. //   on input and output from the shader.
  45. //
  46. // D3D10_SHADER_PACK_MATRIX_COLUMN_MAJOR
  47. //   Unless explicitly specified, matrices will be packed in column-major
  48. //   order on input and output from the shader.  This is generally more
  49. //   efficient, since it allows vector-matrix multiplication to be performed
  50. //   using a series of dot-products.
  51. //
  52. // D3D10_SHADER_PARTIAL_PRECISION
  53. //   Force all computations in resulting shader to occur at partial precision.
  54. //   This may result in faster evaluation of shaders on some hardware.
  55. //
  56. // D3D10_SHADER_FORCE_VS_SOFTWARE_NO_OPT
  57. //   Force compiler to compile against the next highest available software
  58. //   target for vertex shaders.  This flag also turns optimizations off,
  59. //   and debugging on.  
  60. //
  61. // D3D10_SHADER_FORCE_PS_SOFTWARE_NO_OPT
  62. //   Force compiler to compile against the next highest available software
  63. //   target for pixel shaders.  This flag also turns optimizations off,
  64. //   and debugging on.
  65. //
  66. // D3D10_SHADER_NO_PRESHADER
  67. //   Disables Preshaders. Using this flag will cause the compiler to not
  68. //   pull out static expression for evaluation on the host cpu
  69. //
  70. // D3D10_SHADER_AVOID_FLOW_CONTROL
  71. //   Hint compiler to avoid flow-control constructs where possible.
  72. //
  73. // D3D10_SHADER_PREFER_FLOW_CONTROL
  74. //   Hint compiler to prefer flow-control constructs where possible.
  75. //
  76. // D3D10_SHADER_ENABLE_STRICTNESS
  77. //   By default, the HLSL/Effect compilers are not strict on deprecated syntax.
  78. //   Specifying this flag enables the strict mode. Deprecated syntax may be
  79. //   removed in a future release, and enabling syntax is a good way to make sure
  80. //   your shaders comply to the latest spec.
  81. //
  82. // D3D10_SHADER_ENABLE_BACKWARDS_COMPATIBILITY
  83. //   This enables older shaders to compile to 4_0 targets.
  84. //
  85. //----------------------------------------------------------------------------
  86.  
  87. #define D3D10_SHADER_DEBUG                          (1 << 0)
  88. #define D3D10_SHADER_SKIP_VALIDATION                (1 << 1)
  89. #define D3D10_SHADER_SKIP_OPTIMIZATION              (1 << 2)
  90. #define D3D10_SHADER_PACK_MATRIX_ROW_MAJOR          (1 << 3)
  91. #define D3D10_SHADER_PACK_MATRIX_COLUMN_MAJOR       (1 << 4)
  92. #define D3D10_SHADER_PARTIAL_PRECISION              (1 << 5)
  93. #define D3D10_SHADER_FORCE_VS_SOFTWARE_NO_OPT       (1 << 6)
  94. #define D3D10_SHADER_FORCE_PS_SOFTWARE_NO_OPT       (1 << 7)
  95. #define D3D10_SHADER_NO_PRESHADER                   (1 << 8)
  96. #define D3D10_SHADER_AVOID_FLOW_CONTROL             (1 << 9)
  97. #define D3D10_SHADER_PREFER_FLOW_CONTROL            (1 << 10)
  98. #define D3D10_SHADER_ENABLE_STRICTNESS              (1 << 11)
  99. #define D3D10_SHADER_ENABLE_BACKWARDS_COMPATIBILITY (1 << 12)
  100. #define D3D10_SHADER_IEEE_STRICTNESS                (1 << 13)
  101. #define D3D10_SHADER_WARNINGS_ARE_ERRORS            (1 << 18)
  102.  
  103.  
  104. // optimization level flags
  105. #define D3D10_SHADER_OPTIMIZATION_LEVEL0            (1 << 14)
  106. #define D3D10_SHADER_OPTIMIZATION_LEVEL1            0
  107. #define D3D10_SHADER_OPTIMIZATION_LEVEL2            ((1 << 14) | (1 << 15))
  108. #define D3D10_SHADER_OPTIMIZATION_LEVEL3            (1 << 15)
  109.  
  110.  
  111.  
  112.  
  113. //----------------------------------------------------------------------------
  114. // D3D10_SHADER_MACRO:
  115. // ----------
  116. // Preprocessor macro definition.  The application pass in a NULL-terminated
  117. // array of this structure to various D3D10 APIs.  This enables the application
  118. // to #define tokens at runtime, before the file is parsed.
  119. //----------------------------------------------------------------------------
  120.  
  121. typedef struct _D3D10_SHADER_MACRO
  122. {
  123.     LPCSTR Name;
  124.     LPCSTR Definition;
  125.  
  126. } D3D10_SHADER_MACRO, *LPD3D10_SHADER_MACRO;
  127.  
  128.  
  129. //----------------------------------------------------------------------------
  130. // D3D10_SHADER_VARIABLE_CLASS:
  131. //----------------------------------------------------------------------------
  132.  
  133. typedef enum _D3D10_SHADER_VARIABLE_CLASS
  134. {
  135.     D3D10_SVC_SCALAR,
  136.     D3D10_SVC_VECTOR,
  137.     D3D10_SVC_MATRIX_ROWS,
  138.     D3D10_SVC_MATRIX_COLUMNS,
  139.     D3D10_SVC_OBJECT,
  140.     D3D10_SVC_STRUCT,
  141.    
  142.     D3D11_SVC_INTERFACE_CLASS,
  143.     D3D11_SVC_INTERFACE_POINTER,
  144.  
  145.     // force 32-bit size enum
  146.     D3D10_SVC_FORCE_DWORD = 0x7fffffff
  147.  
  148. } D3D10_SHADER_VARIABLE_CLASS, *LPD3D10_SHADER_VARIABLE_CLASS;
  149.  
  150. typedef enum _D3D10_SHADER_VARIABLE_FLAGS
  151. {
  152.     D3D10_SVF_USERPACKED = 1,
  153.     D3D10_SVF_USED       = 2,
  154.  
  155.     D3D11_SVF_INTERFACE_POINTER = 4,
  156.     D3D11_SVF_INTERFACE_PARAMETER = 8,
  157.  
  158.     // force 32-bit size enum
  159.     D3D10_SVF_FORCE_DWORD = 0x7fffffff
  160.  
  161. } D3D10_SHADER_VARIABLE_FLAGS, *LPD3D10_SHADER_VARIABLE_FLAGS;
  162.  
  163. //----------------------------------------------------------------------------
  164. // D3D10_SHADER_VARIABLE_TYPE:
  165. //----------------------------------------------------------------------------
  166. typedef enum _D3D10_SHADER_VARIABLE_TYPE
  167. {
  168.     D3D10_SVT_VOID = 0,
  169.     D3D10_SVT_BOOL = 1,
  170.     D3D10_SVT_INT = 2,
  171.     D3D10_SVT_FLOAT = 3,
  172.     D3D10_SVT_STRING = 4,
  173.     D3D10_SVT_TEXTURE = 5,
  174.     D3D10_SVT_TEXTURE1D = 6,
  175.     D3D10_SVT_TEXTURE2D = 7,
  176.     D3D10_SVT_TEXTURE3D = 8,
  177.     D3D10_SVT_TEXTURECUBE = 9,
  178.     D3D10_SVT_SAMPLER = 10,
  179.     D3D10_SVT_PIXELSHADER = 15,
  180.     D3D10_SVT_VERTEXSHADER = 16,
  181.     D3D10_SVT_UINT = 19,
  182.     D3D10_SVT_UINT8 = 20,
  183.     D3D10_SVT_GEOMETRYSHADER = 21,
  184.     D3D10_SVT_RASTERIZER = 22,
  185.     D3D10_SVT_DEPTHSTENCIL = 23,
  186.     D3D10_SVT_BLEND = 24,
  187.     D3D10_SVT_BUFFER = 25,
  188.     D3D10_SVT_CBUFFER = 26,
  189.     D3D10_SVT_TBUFFER = 27,
  190.     D3D10_SVT_TEXTURE1DARRAY = 28,
  191.     D3D10_SVT_TEXTURE2DARRAY = 29,
  192.     D3D10_SVT_RENDERTARGETVIEW = 30,
  193.     D3D10_SVT_DEPTHSTENCILVIEW = 31,
  194.  
  195.     D3D10_SVT_TEXTURE2DMS = 32,
  196.     D3D10_SVT_TEXTURE2DMSARRAY = 33,
  197.  
  198.     D3D10_SVT_TEXTURECUBEARRAY = 34,
  199.  
  200.     D3D11_SVT_HULLSHADER = 35,
  201.     D3D11_SVT_DOMAINSHADER = 36,
  202.  
  203.     D3D11_SVT_INTERFACE_POINTER = 37,
  204.     D3D11_SVT_COMPUTESHADER = 38,
  205.  
  206.     D3D11_SVT_DOUBLE = 39,
  207.    
  208.     D3D11_SVT_RWTEXTURE1D,
  209.     D3D11_SVT_RWTEXTURE1DARRAY,
  210.     D3D11_SVT_RWTEXTURE2D,
  211.     D3D11_SVT_RWTEXTURE2DARRAY,
  212.     D3D11_SVT_RWTEXTURE3D,
  213.     D3D11_SVT_RWBUFFER,
  214.  
  215.     D3D11_SVT_BYTEADDRESS_BUFFER,
  216.     D3D11_SVT_RWBYTEADDRESS_BUFFER,
  217.     D3D11_SVT_STRUCTURED_BUFFER,
  218.     D3D11_SVT_RWSTRUCTURED_BUFFER,
  219.     D3D11_SVT_APPEND_STRUCTURED_BUFFER,
  220.     D3D11_SVT_CONSUME_STRUCTURED_BUFFER,
  221.  
  222.     // force 32-bit size enum
  223.     D3D10_SVT_FORCE_DWORD = 0x7fffffff
  224.  
  225. } D3D10_SHADER_VARIABLE_TYPE, *LPD3D10_SHADER_VARIABLE_TYPE;
  226.  
  227. typedef enum _D3D10_SHADER_INPUT_FLAGS
  228. {
  229.     D3D10_SIF_USERPACKED = 1,
  230.     D3D10_SIF_COMPARISON_SAMPLER = 2,  // is this a comparison sampler?
  231.     D3D10_SIF_TEXTURE_COMPONENT_0 = 4, // this 2-bit value encodes c - 1, where c
  232.     D3D10_SIF_TEXTURE_COMPONENT_1 = 8, // is the number of components in the texture
  233.     D3D10_SIF_TEXTURE_COMPONENTS = 12,
  234.  
  235.     // force 32-bit size enum
  236.     D3D10_SIF_FORCE_DWORD = 0x7fffffff
  237. } D3D10_SHADER_INPUT_FLAGS, *LPD3D10_SHADER_INPUT_FLAGS;
  238.  
  239. //----------------------------------------------------------------------------
  240. // D3D10_SHADER_INPUT_TYPE
  241. //----------------------------------------------------------------------------
  242. typedef enum _D3D10_SHADER_INPUT_TYPE
  243. {
  244.     D3D10_SIT_CBUFFER,
  245.     D3D10_SIT_TBUFFER,
  246.     D3D10_SIT_TEXTURE,
  247.     D3D10_SIT_SAMPLER,
  248.     D3D11_SIT_UAV_RWTYPED,
  249.     D3D11_SIT_STRUCTURED,
  250.     D3D11_SIT_UAV_RWSTRUCTURED,
  251.     D3D11_SIT_BYTEADDRESS,
  252.     D3D11_SIT_UAV_RWBYTEADDRESS,
  253.     D3D11_SIT_UAV_APPEND_STRUCTURED,
  254.     D3D11_SIT_UAV_CONSUME_STRUCTURED,
  255.     D3D11_SIT_UAV_RWSTRUCTURED_WITH_COUNTER,
  256. } D3D10_SHADER_INPUT_TYPE, *LPD3D10_SHADER_INPUT_TYPE;
  257.  
  258. typedef enum _D3D10_SHADER_CBUFFER_FLAGS
  259. {
  260.     D3D10_CBF_USERPACKED = 1,
  261.  
  262.     // force 32-bit size enum
  263.     D3D10_CBF_FORCE_DWORD = 0x7fffffff
  264. } D3D10_SHADER_CBUFFER_FLAGS, *LPD3D10_SHADER_CBUFFER_FLAGS;
  265.  
  266. typedef enum _D3D10_CBUFFER_TYPE
  267. {
  268.     D3D10_CT_CBUFFER,
  269.     D3D10_CT_TBUFFER,
  270. }  D3D10_CBUFFER_TYPE, *LPD3D10_CBUFFER_TYPE;
  271.  
  272. typedef enum D3D10_NAME
  273. {
  274.     D3D10_NAME_UNDEFINED = 0,
  275.  
  276.     // Names meaningful to both HLSL and hardware
  277.     D3D10_NAME_POSITION = 1,
  278.     D3D10_NAME_CLIP_DISTANCE = 2,
  279.     D3D10_NAME_CULL_DISTANCE = 3,
  280.     D3D10_NAME_RENDER_TARGET_ARRAY_INDEX = 4,
  281.     D3D10_NAME_VIEWPORT_ARRAY_INDEX = 5,
  282.     D3D10_NAME_VERTEX_ID = 6,
  283.     D3D10_NAME_PRIMITIVE_ID = 7,
  284.     D3D10_NAME_INSTANCE_ID = 8,
  285.     D3D10_NAME_IS_FRONT_FACE = 9,
  286.     D3D10_NAME_SAMPLE_INDEX = 10,
  287.     D3D11_NAME_FINAL_QUAD_EDGE_TESSFACTOR = 11,
  288.     D3D11_NAME_FINAL_QUAD_INSIDE_TESSFACTOR = 12,
  289.     D3D11_NAME_FINAL_TRI_EDGE_TESSFACTOR = 13,
  290.     D3D11_NAME_FINAL_TRI_INSIDE_TESSFACTOR = 14,
  291.     D3D11_NAME_FINAL_LINE_DETAIL_TESSFACTOR = 15,
  292.     D3D11_NAME_FINAL_LINE_DENSITY_TESSFACTOR = 16,
  293.  
  294.     // Names meaningful to HLSL only
  295.     D3D10_NAME_TARGET = 64,
  296.     D3D10_NAME_DEPTH = 65,
  297.     D3D10_NAME_COVERAGE = 66,
  298.     D3D11_NAME_DEPTH_GREATER_EQUAL = 67,
  299.     D3D11_NAME_DEPTH_LESS_EQUAL = 68,
  300.  
  301. } D3D10_NAME;
  302.  
  303. typedef enum D3D10_RESOURCE_RETURN_TYPE
  304. {
  305.     D3D10_RETURN_TYPE_UNORM = 1,
  306.     D3D10_RETURN_TYPE_SNORM = 2,
  307.     D3D10_RETURN_TYPE_SINT = 3,
  308.     D3D10_RETURN_TYPE_UINT = 4,
  309.     D3D10_RETURN_TYPE_FLOAT = 5,
  310.     D3D10_RETURN_TYPE_MIXED = 6,
  311. } D3D10_RESOURCE_RETURN_TYPE;
  312.  
  313. typedef enum D3D10_REGISTER_COMPONENT_TYPE
  314. {
  315.     D3D10_REGISTER_COMPONENT_UNKNOWN = 0,
  316.     D3D10_REGISTER_COMPONENT_UINT32 = 1,
  317.     D3D10_REGISTER_COMPONENT_SINT32 = 2,
  318.     D3D10_REGISTER_COMPONENT_FLOAT32 = 3
  319. } D3D10_REGISTER_COMPONENT_TYPE;
  320.  
  321.  
  322. //----------------------------------------------------------------------------
  323. // D3D10_INCLUDE_TYPE:
  324. //----------------------------------------------------------------------------
  325.  
  326. typedef enum _D3D10_INCLUDE_TYPE
  327. {
  328.     D3D10_INCLUDE_LOCAL,
  329.     D3D10_INCLUDE_SYSTEM,
  330.  
  331.     // force 32-bit size enum
  332.     D3D10_INCLUDE_FORCE_DWORD = 0x7fffffff
  333.  
  334. } D3D10_INCLUDE_TYPE, *LPD3D10_INCLUDE_TYPE;
  335.  
  336.  
  337. //----------------------------------------------------------------------------
  338. // ID3D10Include:
  339. // -------------
  340. // This interface is intended to be implemented by the application, and can
  341. // be used by various D3D10 APIs.  This enables application-specific handling
  342. // of #include directives in source files.
  343. //
  344. // Open()
  345. //    Opens an include file.  If successful, it should fill in ppData and
  346. //    pBytes.  The data pointer returned must remain valid until Close is
  347. //    subsequently called.  The name of the file is encoded in UTF-8 format.
  348. // Close()
  349. //    Closes an include file.  If Open was successful, Close is guaranteed
  350. //    to be called before the API using this interface returns.
  351. //----------------------------------------------------------------------------
  352.  
  353. typedef interface ID3D10Include ID3D10Include;
  354. typedef interface ID3D10Include *LPD3D10INCLUDE;
  355.  
  356. #undef INTERFACE
  357. #define INTERFACE ID3D10Include
  358.  
  359. DECLARE_INTERFACE(ID3D10Include)
  360. {
  361.     STDMETHOD(Open)(THIS_ D3D10_INCLUDE_TYPE IncludeType, LPCSTR pFileName, LPCVOID pParentData, LPCVOID *ppData, UINT *pBytes) PURE;
  362.     STDMETHOD(Close)(THIS_ LPCVOID pData) PURE;
  363. };
  364.  
  365.  
  366. //----------------------------------------------------------------------------
  367. // ID3D10ShaderReflection:
  368. //----------------------------------------------------------------------------
  369.  
  370. //
  371. // Structure definitions
  372. //
  373.  
  374. typedef struct _D3D10_SHADER_DESC
  375. {
  376.     UINT                    Version;                     // Shader version
  377.     LPCSTR                  Creator;                     // Creator string
  378.     UINT                    Flags;                       // Shader compilation/parse flags
  379.    
  380.     UINT                    ConstantBuffers;             // Number of constant buffers
  381.     UINT                    BoundResources;              // Number of bound resources
  382.     UINT                    InputParameters;             // Number of parameters in the input signature
  383.     UINT                    OutputParameters;            // Number of parameters in the output signature
  384.  
  385.     UINT                    InstructionCount;            // Number of emitted instructions
  386.     UINT                    TempRegisterCount;           // Number of temporary registers used
  387.     UINT                    TempArrayCount;              // Number of temporary arrays used
  388.     UINT                    DefCount;                    // Number of constant defines
  389.     UINT                    DclCount;                    // Number of declarations (input + output)
  390.     UINT                    TextureNormalInstructions;   // Number of non-categorized texture instructions
  391.     UINT                    TextureLoadInstructions;     // Number of texture load instructions
  392.     UINT                    TextureCompInstructions;     // Number of texture comparison instructions
  393.     UINT                    TextureBiasInstructions;     // Number of texture bias instructions
  394.     UINT                    TextureGradientInstructions; // Number of texture gradient instructions
  395.     UINT                    FloatInstructionCount;       // Number of floating point arithmetic instructions used
  396.     UINT                    IntInstructionCount;         // Number of signed integer arithmetic instructions used
  397.     UINT                    UintInstructionCount;        // Number of unsigned integer arithmetic instructions used
  398.     UINT                    StaticFlowControlCount;      // Number of static flow control instructions used
  399.     UINT                    DynamicFlowControlCount;     // Number of dynamic flow control instructions used
  400.     UINT                    MacroInstructionCount;       // Number of macro instructions used
  401.     UINT                    ArrayInstructionCount;       // Number of array instructions used
  402.     UINT                    CutInstructionCount;         // Number of cut instructions used
  403.     UINT                    EmitInstructionCount;        // Number of emit instructions used
  404.     D3D10_PRIMITIVE_TOPOLOGY GSOutputTopology;           // Geometry shader output topology
  405.     UINT                    GSMaxOutputVertexCount;      // Geometry shader maximum output vertex count
  406. } D3D10_SHADER_DESC;
  407.  
  408. typedef struct _D3D10_SHADER_BUFFER_DESC
  409. {
  410.     LPCSTR                  Name;           // Name of the constant buffer
  411.     D3D10_CBUFFER_TYPE      Type;           // Indicates that this is a CBuffer or TBuffer
  412.     UINT                    Variables;      // Number of member variables
  413.     UINT                    Size;           // Size of CB (in bytes)
  414.     UINT                    uFlags;         // Buffer description flags
  415. } D3D10_SHADER_BUFFER_DESC;
  416.  
  417. typedef struct _D3D10_SHADER_VARIABLE_DESC
  418. {
  419.     LPCSTR                  Name;           // Name of the variable
  420.     UINT                    StartOffset;    // Offset in constant buffer's backing store
  421.     UINT                    Size;           // Size of variable (in bytes)
  422.     UINT                    uFlags;         // Variable flags
  423.     LPVOID                  DefaultValue;   // Raw pointer to default value
  424. } D3D10_SHADER_VARIABLE_DESC;
  425.  
  426. typedef struct _D3D10_SHADER_TYPE_DESC
  427. {
  428.     D3D10_SHADER_VARIABLE_CLASS Class;          // Variable class (e.g. object, matrix, etc.)
  429.     D3D10_SHADER_VARIABLE_TYPE  Type;           // Variable type (e.g. float, sampler, etc.)
  430.     UINT                        Rows;           // Number of rows (for matrices, 1 for other numeric, 0 if not applicable)
  431.     UINT                        Columns;        // Number of columns (for vectors & matrices, 1 for other numeric, 0 if not applicable)
  432.     UINT                        Elements;       // Number of elements (0 if not an array)
  433.     UINT                        Members;        // Number of members (0 if not a structure)
  434.     UINT                        Offset;         // Offset from the start of structure (0 if not a structure member)
  435. } D3D10_SHADER_TYPE_DESC;
  436.  
  437. typedef struct _D3D10_SHADER_INPUT_BIND_DESC
  438. {
  439.     LPCSTR                      Name;           // Name of the resource
  440.     D3D10_SHADER_INPUT_TYPE     Type;           // Type of resource (e.g. texture, cbuffer, etc.)
  441.     UINT                        BindPoint;      // Starting bind point
  442.     UINT                        BindCount;      // Number of contiguous bind points (for arrays)
  443.    
  444.     UINT                        uFlags;         // Input binding flags
  445.     D3D10_RESOURCE_RETURN_TYPE  ReturnType;     // Return type (if texture)
  446.     D3D10_SRV_DIMENSION         Dimension;      // Dimension (if texture)
  447.     UINT                        NumSamples;     // Number of samples (0 if not MS texture)
  448. } D3D10_SHADER_INPUT_BIND_DESC;
  449.  
  450. typedef struct _D3D10_SIGNATURE_PARAMETER_DESC
  451. {
  452.     LPCSTR                      SemanticName;   // Name of the semantic
  453.     UINT                        SemanticIndex;  // Index of the semantic
  454.     UINT                        Register;       // Number of member variables
  455.     D3D10_NAME                  SystemValueType;// A predefined system value, or D3D10_NAME_UNDEFINED if not applicable
  456.     D3D10_REGISTER_COMPONENT_TYPE ComponentType;// Scalar type (e.g. uint, float, etc.)
  457.     BYTE                        Mask;           // Mask to indicate which components of the register
  458.                                                 // are used (combination of D3D10_COMPONENT_MASK values)
  459.     BYTE                        ReadWriteMask;  // Mask to indicate whether a given component is
  460.                                                 // never written (if this is an output signature) or
  461.                                                 // always read (if this is an input signature).
  462.                                                 // (combination of D3D10_COMPONENT_MASK values)
  463.    
  464. } D3D10_SIGNATURE_PARAMETER_DESC;
  465.  
  466.  
  467. //
  468. // Interface definitions
  469. //
  470.  
  471. typedef interface ID3D10ShaderReflectionType ID3D10ShaderReflectionType;
  472. typedef interface ID3D10ShaderReflectionType *LPD3D10SHADERREFLECTIONTYPE;
  473.  
  474. // {C530AD7D-9B16-4395-A979-BA2ECFF83ADD}
  475. DEFINE_GUID(IID_ID3D10ShaderReflectionType,
  476. 0xc530ad7d, 0x9b16, 0x4395, 0xa9, 0x79, 0xba, 0x2e, 0xcf, 0xf8, 0x3a, 0xdd);
  477.  
  478. #undef INTERFACE
  479. #define INTERFACE ID3D10ShaderReflectionType
  480.  
  481. DECLARE_INTERFACE(ID3D10ShaderReflectionType)
  482. {
  483.     STDMETHOD(GetDesc)(THIS_ D3D10_SHADER_TYPE_DESC *pDesc) PURE;
  484.    
  485.     STDMETHOD_(ID3D10ShaderReflectionType*, GetMemberTypeByIndex)(THIS_ UINT Index) PURE;
  486.     STDMETHOD_(ID3D10ShaderReflectionType*, GetMemberTypeByName)(THIS_ LPCSTR Name) PURE;
  487.     STDMETHOD_(LPCSTR, GetMemberTypeName)(THIS_ UINT Index) PURE;
  488. };
  489.  
  490. typedef interface ID3D10ShaderReflectionVariable ID3D10ShaderReflectionVariable;
  491. typedef interface ID3D10ShaderReflectionVariable *LPD3D10SHADERREFLECTIONVARIABLE;
  492.  
  493. // {1BF63C95-2650-405d-99C1-3636BD1DA0A1}
  494. DEFINE_GUID(IID_ID3D10ShaderReflectionVariable,
  495. 0x1bf63c95, 0x2650, 0x405d, 0x99, 0xc1, 0x36, 0x36, 0xbd, 0x1d, 0xa0, 0xa1);
  496.  
  497. #undef INTERFACE
  498. #define INTERFACE ID3D10ShaderReflectionVariable
  499.  
  500. DECLARE_INTERFACE(ID3D10ShaderReflectionVariable)
  501. {
  502.     STDMETHOD(GetDesc)(THIS_ D3D10_SHADER_VARIABLE_DESC *pDesc) PURE;
  503.    
  504.     STDMETHOD_(ID3D10ShaderReflectionType*, GetType)(THIS) PURE;
  505. };
  506.  
  507. typedef interface ID3D10ShaderReflectionConstantBuffer ID3D10ShaderReflectionConstantBuffer;
  508. typedef interface ID3D10ShaderReflectionConstantBuffer *LPD3D10SHADERREFLECTIONCONSTANTBUFFER;
  509.  
  510. // {66C66A94-DDDD-4b62-A66A-F0DA33C2B4D0}
  511. DEFINE_GUID(IID_ID3D10ShaderReflectionConstantBuffer,
  512. 0x66c66a94, 0xdddd, 0x4b62, 0xa6, 0x6a, 0xf0, 0xda, 0x33, 0xc2, 0xb4, 0xd0);
  513.  
  514. #undef INTERFACE
  515. #define INTERFACE ID3D10ShaderReflectionConstantBuffer
  516.  
  517. DECLARE_INTERFACE(ID3D10ShaderReflectionConstantBuffer)
  518. {
  519.     STDMETHOD(GetDesc)(THIS_ D3D10_SHADER_BUFFER_DESC *pDesc) PURE;
  520.    
  521.     STDMETHOD_(ID3D10ShaderReflectionVariable*, GetVariableByIndex)(THIS_ UINT Index) PURE;
  522.     STDMETHOD_(ID3D10ShaderReflectionVariable*, GetVariableByName)(THIS_ LPCSTR Name) PURE;
  523. };
  524.  
  525. typedef interface ID3D10ShaderReflection ID3D10ShaderReflection;
  526. typedef interface ID3D10ShaderReflection *LPD3D10SHADERREFLECTION;
  527.  
  528. // {D40E20B6-F8F7-42ad-AB20-4BAF8F15DFAA}
  529. DEFINE_GUID(IID_ID3D10ShaderReflection,
  530. 0xd40e20b6, 0xf8f7, 0x42ad, 0xab, 0x20, 0x4b, 0xaf, 0x8f, 0x15, 0xdf, 0xaa);
  531.  
  532. #undef INTERFACE
  533. #define INTERFACE ID3D10ShaderReflection
  534.  
  535. DECLARE_INTERFACE_(ID3D10ShaderReflection, IUnknown)
  536. {
  537.     STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
  538.     STDMETHOD_(ULONG, AddRef)(THIS) PURE;
  539.     STDMETHOD_(ULONG, Release)(THIS) PURE;
  540.  
  541.     STDMETHOD(GetDesc)(THIS_ D3D10_SHADER_DESC *pDesc) PURE;
  542.    
  543.     STDMETHOD_(ID3D10ShaderReflectionConstantBuffer*, GetConstantBufferByIndex)(THIS_ UINT Index) PURE;
  544.     STDMETHOD_(ID3D10ShaderReflectionConstantBuffer*, GetConstantBufferByName)(THIS_ LPCSTR Name) PURE;
  545.    
  546.     STDMETHOD(GetResourceBindingDesc)(THIS_ UINT ResourceIndex, D3D10_SHADER_INPUT_BIND_DESC *pDesc) PURE;
  547.    
  548.     STDMETHOD(GetInputParameterDesc)(THIS_ UINT ParameterIndex, D3D10_SIGNATURE_PARAMETER_DESC *pDesc) PURE;
  549.     STDMETHOD(GetOutputParameterDesc)(THIS_ UINT ParameterIndex, D3D10_SIGNATURE_PARAMETER_DESC *pDesc) PURE;
  550.    
  551. };
  552.  
  553. //////////////////////////////////////////////////////////////////////////////
  554. // APIs //////////////////////////////////////////////////////////////////////
  555. //////////////////////////////////////////////////////////////////////////////
  556.  
  557. #ifdef __cplusplus
  558. extern "C" {
  559. #endif //__cplusplus
  560.  
  561.  
  562. //----------------------------------------------------------------------------
  563. // D3D10CompileShader:
  564. // ------------------
  565. // Compiles a shader.
  566. //
  567. // Parameters:
  568. //  pSrcFile
  569. //      Source file name.
  570. //  hSrcModule
  571. //      Module handle. if NULL, current module will be used.
  572. //  pSrcResource
  573. //      Resource name in module.
  574. //  pSrcData
  575. //      Pointer to source code.
  576. //  SrcDataLen
  577. //      Size of source code, in bytes.
  578. //  pDefines
  579. //      Optional NULL-terminated array of preprocessor macro definitions.
  580. //  pInclude
  581. //      Optional interface pointer to use for handling #include directives.
  582. //      If this parameter is NULL, #includes will be honored when compiling
  583. //      from file, and will error when compiling from resource or memory.
  584. //  pFunctionName
  585. //      Name of the entrypoint function where execution should begin.
  586. //  pProfile
  587. //      Instruction set to be used when generating code.  The D3D10 entry
  588. //      point currently supports only "vs_4_0", "ps_4_0", and "gs_4_0".
  589. //  Flags
  590. //      See D3D10_SHADER_xxx flags.
  591. //  ppShader
  592. //      Returns a buffer containing the created shader.  This buffer contains
  593. //      the compiled shader code, as well as any embedded debug and symbol
  594. //      table info.  (See D3D10GetShaderConstantTable)
  595. //  ppErrorMsgs
  596. //      Returns a buffer containing a listing of errors and warnings that were
  597. //      encountered during the compile.  If you are running in a debugger,
  598. //      these are the same messages you will see in your debug output.
  599. //----------------------------------------------------------------------------
  600.  
  601. HRESULT WINAPI D3D10CompileShader(LPCSTR pSrcData, SIZE_T SrcDataLen, LPCSTR pFileName, CONST D3D10_SHADER_MACRO* pDefines, LPD3D10INCLUDE pInclude,
  602.     LPCSTR pFunctionName, LPCSTR pProfile, UINT Flags, ID3D10Blob** ppShader, ID3D10Blob** ppErrorMsgs);
  603.  
  604. //----------------------------------------------------------------------------
  605. // D3D10DisassembleShader:
  606. // ----------------------
  607. // Takes a binary shader, and returns a buffer containing text assembly.
  608. //
  609. // Parameters:
  610. //  pShader
  611. //      Pointer to the shader byte code.
  612. //  BytecodeLength
  613. //      Size of the shader byte code in bytes.
  614. //  EnableColorCode
  615. //      Emit HTML tags for color coding the output?
  616. //  pComments
  617. //      Pointer to a comment string to include at the top of the shader.
  618. //  ppDisassembly
  619. //      Returns a buffer containing the disassembled shader.
  620. //----------------------------------------------------------------------------
  621.  
  622. HRESULT WINAPI D3D10DisassembleShader(CONST void *pShader, SIZE_T BytecodeLength, BOOL EnableColorCode, LPCSTR pComments, ID3D10Blob** ppDisassembly);
  623.  
  624.  
  625. //----------------------------------------------------------------------------
  626. // D3D10GetPixelShaderProfile/D3D10GetVertexShaderProfile/D3D10GetGeometryShaderProfile:
  627. // -----------------------------------------------------
  628. // Returns the name of the HLSL profile best suited to a given device.
  629. //
  630. // Parameters:
  631. //  pDevice
  632. //      Pointer to the device in question
  633. //----------------------------------------------------------------------------
  634.  
  635. LPCSTR WINAPI D3D10GetPixelShaderProfile(ID3D10Device *pDevice);
  636.  
  637. LPCSTR WINAPI D3D10GetVertexShaderProfile(ID3D10Device *pDevice);
  638.  
  639. LPCSTR WINAPI D3D10GetGeometryShaderProfile(ID3D10Device *pDevice);
  640.  
  641. //----------------------------------------------------------------------------
  642. // D3D10ReflectShader:
  643. // ------------------
  644. // Creates a shader reflection object that can be used to retrieve information
  645. // about a compiled shader
  646. //
  647. // Parameters:
  648. //  pShaderBytecode
  649. //      Pointer to a compiled shader (same pointer that is passed into
  650. //      ID3D10Device::CreateShader)
  651. //  BytecodeLength
  652. //      Length of the shader bytecode buffer
  653. //  ppReflector
  654. //      [out] Returns a ID3D10ShaderReflection object that can be used to
  655. //      retrieve shader resource and constant buffer information
  656. //
  657. //----------------------------------------------------------------------------
  658.  
  659. HRESULT WINAPI D3D10ReflectShader(CONST void *pShaderBytecode, SIZE_T BytecodeLength, ID3D10ShaderReflection **ppReflector);
  660.  
  661. //----------------------------------------------------------------------------
  662. // D3D10PreprocessShader
  663. // ---------------------
  664. // Creates a shader reflection object that can be used to retrieve information
  665. // about a compiled shader
  666. //
  667. // Parameters:
  668. //  pSrcData
  669. //      Pointer to source code
  670. //  SrcDataLen
  671. //      Size of source code, in bytes
  672. //  pFileName
  673. //      Source file name (used for error output)
  674. //  pDefines
  675. //      Optional NULL-terminated array of preprocessor macro definitions.
  676. //  pInclude
  677. //      Optional interface pointer to use for handling #include directives.
  678. //      If this parameter is NULL, #includes will be honored when assembling
  679. //      from file, and will error when assembling from resource or memory.
  680. //  ppShaderText
  681. //      Returns a buffer containing a single large string that represents
  682. //      the resulting formatted token stream
  683. //  ppErrorMsgs
  684. //      Returns a buffer containing a listing of errors and warnings that were
  685. //      encountered during assembly.  If you are running in a debugger,
  686. //      these are the same messages you will see in your debug output.
  687. //----------------------------------------------------------------------------
  688.  
  689. HRESULT WINAPI D3D10PreprocessShader(LPCSTR pSrcData, SIZE_T SrcDataSize, LPCSTR pFileName, CONST D3D10_SHADER_MACRO* pDefines,
  690.     LPD3D10INCLUDE pInclude, ID3D10Blob** ppShaderText, ID3D10Blob** ppErrorMsgs);
  691.  
  692. //////////////////////////////////////////////////////////////////////////
  693. //
  694. // Shader blob manipulation routines
  695. // ---------------------------------
  696. //
  697. // void *pShaderBytecode - a buffer containing the result of an HLSL
  698. //  compilation.  Typically this opaque buffer contains several
  699. //  discrete sections including the shader executable code, the input
  700. //  signature, and the output signature.  This can typically be retrieved
  701. //  by calling ID3D10Blob::GetBufferPointer() on the returned blob
  702. //  from HLSL's compile APIs.
  703. //
  704. // UINT BytecodeLength - the length of pShaderBytecode.  This can
  705. //  typically be retrieved by calling ID3D10Blob::GetBufferSize()
  706. //  on the returned blob from HLSL's compile APIs.
  707. //
  708. // ID3D10Blob **ppSignatureBlob(s) - a newly created buffer that
  709. //  contains only the signature portions of the original bytecode.
  710. //  This is a copy; the original bytecode is not modified.  You may
  711. //  specify NULL for this parameter to have the bytecode validated
  712. //  for the presence of the corresponding signatures without actually
  713. //  copying them and creating a new blob.
  714. //
  715. // Returns E_INVALIDARG if any required parameters are NULL
  716. // Returns E_FAIL is the bytecode is corrupt or missing signatures
  717. // Returns S_OK on success
  718. //
  719. //////////////////////////////////////////////////////////////////////////
  720.  
  721. HRESULT WINAPI D3D10GetInputSignatureBlob(CONST void *pShaderBytecode, SIZE_T BytecodeLength, ID3D10Blob **ppSignatureBlob);
  722. HRESULT WINAPI D3D10GetOutputSignatureBlob(CONST void *pShaderBytecode, SIZE_T BytecodeLength, ID3D10Blob **ppSignatureBlob);
  723. HRESULT WINAPI D3D10GetInputAndOutputSignatureBlob(CONST void *pShaderBytecode, SIZE_T BytecodeLength, ID3D10Blob **ppSignatureBlob);
  724.  
  725. //----------------------------------------------------------------------------
  726. // D3D10GetShaderDebugInfo:
  727. // -----------------------
  728. // Gets shader debug info.  Debug info is generated by D3D10CompileShader and is
  729. // embedded in the body of the shader.
  730. //
  731. // Parameters:
  732. //  pShaderBytecode
  733. //      Pointer to the function bytecode
  734. //  BytecodeLength
  735. //      Length of the shader bytecode buffer
  736. //  ppDebugInfo
  737. //      Buffer used to return debug info.  For information about the layout
  738. //      of this buffer, see definition of D3D10_SHADER_DEBUG_INFO above.
  739. //----------------------------------------------------------------------------
  740.  
  741. HRESULT WINAPI D3D10GetShaderDebugInfo(CONST void *pShaderBytecode, SIZE_T BytecodeLength, ID3D10Blob** ppDebugInfo);
  742.  
  743. #ifdef __cplusplus
  744. }
  745. #endif //__cplusplus
  746.    
  747. #endif //__D3D10SHADER_H__
  748.  
  749.