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:       D3D11Shader.h
  6. //  Content:    D3D11 Shader Types and APIs
  7. //
  8. //////////////////////////////////////////////////////////////////////////////
  9.  
  10. #ifndef __D3D11SHADER_H__
  11. #define __D3D11SHADER_H__
  12.  
  13. #include "d3d10_1shader.h"
  14.  
  15.  
  16. typedef enum D3D11_SHADER_VERSION_TYPE
  17. {
  18.     D3D11_SHVER_PIXEL_SHADER    = 0,
  19.     D3D11_SHVER_VERTEX_SHADER   = 1,
  20.     D3D11_SHVER_GEOMETRY_SHADER = 2,
  21.    
  22.     // D3D11 Shaders
  23.     D3D11_SHVER_HULL_SHADER     = 3,
  24.     D3D11_SHVER_DOMAIN_SHADER   = 4,
  25.     D3D11_SHVER_COMPUTE_SHADER  = 5,
  26. } D3D11_SHADER_VERSION_TYPE;
  27.  
  28. #define D3D11_SHVER_GET_TYPE(_Version) \
  29.     (((_Version) >> 16) & 0xffff)
  30. #define D3D11_SHVER_GET_MAJOR(_Version) \
  31.     (((_Version) >> 4) & 0xf)
  32. #define D3D11_SHVER_GET_MINOR(_Version) \
  33.     (((_Version) >> 0) & 0xf)
  34.  
  35. typedef enum D3D11_RESOURCE_RETURN_TYPE
  36. {
  37.     D3D11_RETURN_TYPE_UNORM = 1,
  38.     D3D11_RETURN_TYPE_SNORM = 2,
  39.     D3D11_RETURN_TYPE_SINT = 3,
  40.     D3D11_RETURN_TYPE_UINT = 4,
  41.     D3D11_RETURN_TYPE_FLOAT = 5,
  42.     D3D11_RETURN_TYPE_MIXED = 6,
  43.     D3D11_RETURN_TYPE_DOUBLE = 7,
  44.     D3D11_RETURN_TYPE_CONTINUED = 8,
  45. } D3D11_RESOURCE_RETURN_TYPE;
  46.  
  47. typedef enum _D3D11_CBUFFER_TYPE
  48. {
  49.     D3D11_CT_CBUFFER,
  50.     D3D11_CT_TBUFFER,
  51.     D3D11_CT_INTERFACE_POINTERS,
  52.     D3D11_CT_RESOURCE_BIND_INFO,
  53. }  D3D11_CBUFFER_TYPE, *LPD3D11_CBUFFER_TYPE;
  54.  
  55.  
  56. typedef struct _D3D11_SIGNATURE_PARAMETER_DESC
  57. {
  58.     LPCSTR                      SemanticName;   // Name of the semantic
  59.     UINT                        SemanticIndex;  // Index of the semantic
  60.     UINT                        Register;       // Number of member variables
  61.     D3D10_NAME                  SystemValueType;// A predefined system value, or D3D10_NAME_UNDEFINED if not applicable
  62.     D3D10_REGISTER_COMPONENT_TYPE ComponentType;// Scalar type (e.g. uint, float, etc.)
  63.     BYTE                        Mask;           // Mask to indicate which components of the register
  64.                                                 // are used (combination of D3D10_COMPONENT_MASK values)
  65.     BYTE                        ReadWriteMask;  // Mask to indicate whether a given component is
  66.                                                 // never written (if this is an output signature) or
  67.                                                 // always read (if this is an input signature).
  68.                                                 // (combination of D3D10_COMPONENT_MASK values)
  69.     UINT Stream;                                // Stream index
  70. } D3D11_SIGNATURE_PARAMETER_DESC;
  71.  
  72. typedef struct _D3D11_SHADER_BUFFER_DESC
  73. {
  74.     LPCSTR                  Name;           // Name of the constant buffer
  75.     D3D11_CBUFFER_TYPE      Type;           // Indicates type of buffer content
  76.     UINT                    Variables;      // Number of member variables
  77.     UINT                    Size;           // Size of CB (in bytes)
  78.     UINT                    uFlags;         // Buffer description flags
  79. } D3D11_SHADER_BUFFER_DESC;
  80.  
  81. typedef struct _D3D11_SHADER_VARIABLE_DESC
  82. {
  83.     LPCSTR                  Name;           // Name of the variable
  84.     UINT                    StartOffset;    // Offset in constant buffer's backing store
  85.     UINT                    Size;           // Size of variable (in bytes)
  86.     UINT                    uFlags;         // Variable flags
  87.     LPVOID                  DefaultValue;   // Raw pointer to default value
  88.     UINT                    StartTexture;   // First texture index (or -1 if no textures used)
  89.     UINT                    TextureSize;    // Number of texture slots possibly used.
  90.     UINT                    StartSampler;   // First sampler index (or -1 if no textures used)
  91.     UINT                    SamplerSize;    // Number of sampler slots possibly used.
  92. } D3D11_SHADER_VARIABLE_DESC;
  93.  
  94. typedef struct _D3D11_SHADER_TYPE_DESC
  95. {
  96.     D3D10_SHADER_VARIABLE_CLASS Class;          // Variable class (e.g. object, matrix, etc.)
  97.     D3D10_SHADER_VARIABLE_TYPE  Type;           // Variable type (e.g. float, sampler, etc.)
  98.     UINT                        Rows;           // Number of rows (for matrices, 1 for other numeric, 0 if not applicable)
  99.     UINT                        Columns;        // Number of columns (for vectors & matrices, 1 for other numeric, 0 if not applicable)
  100.     UINT                        Elements;       // Number of elements (0 if not an array)
  101.     UINT                        Members;        // Number of members (0 if not a structure)
  102.     UINT                        Offset;         // Offset from the start of structure (0 if not a structure member)
  103.     LPCSTR                      Name;           // Name of type, can be NULL
  104. } D3D11_SHADER_TYPE_DESC;
  105.  
  106. typedef enum D3D11_TESSELLATOR_DOMAIN
  107. {
  108.     D3D11_TESSELLATOR_DOMAIN_UNDEFINED = 0,
  109.     D3D11_TESSELLATOR_DOMAIN_ISOLINE   = 1,
  110.     D3D11_TESSELLATOR_DOMAIN_TRI       = 2,
  111.     D3D11_TESSELLATOR_DOMAIN_QUAD      = 3
  112. } D3D11_TESSELLATOR_DOMAIN;
  113.  
  114. typedef enum D3D11_TESSELLATOR_PARTITIONING
  115. {
  116.     D3D11_TESSELLATOR_PARTITIONING_UNDEFINED       = 0,
  117.     D3D11_TESSELLATOR_PARTITIONING_INTEGER         = 1,
  118.     D3D11_TESSELLATOR_PARTITIONING_POW2            = 2,
  119.     D3D11_TESSELLATOR_PARTITIONING_FRACTIONAL_ODD  = 3,
  120.     D3D11_TESSELLATOR_PARTITIONING_FRACTIONAL_EVEN = 4
  121. } D3D11_TESSELLATOR_PARTITIONING;
  122.  
  123. typedef enum D3D11_TESSELLATOR_OUTPUT_PRIMITIVE
  124. {
  125.     D3D11_TESSELLATOR_OUTPUT_UNDEFINED    = 0,
  126.     D3D11_TESSELLATOR_OUTPUT_POINT        = 1,
  127.     D3D11_TESSELLATOR_OUTPUT_LINE         = 2,
  128.     D3D11_TESSELLATOR_OUTPUT_TRIANGLE_CW  = 3,
  129.     D3D11_TESSELLATOR_OUTPUT_TRIANGLE_CCW = 4
  130. } D3D11_TESSELLATOR_OUTPUT_PRIMITIVE;
  131.  
  132. typedef struct _D3D11_SHADER_DESC
  133. {
  134.     UINT                    Version;                     // Shader version
  135.     LPCSTR                  Creator;                     // Creator string
  136.     UINT                    Flags;                       // Shader compilation/parse flags
  137.    
  138.     UINT                    ConstantBuffers;             // Number of constant buffers
  139.     UINT                    BoundResources;              // Number of bound resources
  140.     UINT                    InputParameters;             // Number of parameters in the input signature
  141.     UINT                    OutputParameters;            // Number of parameters in the output signature
  142.  
  143.     UINT                    InstructionCount;            // Number of emitted instructions
  144.     UINT                    TempRegisterCount;           // Number of temporary registers used
  145.     UINT                    TempArrayCount;              // Number of temporary arrays used
  146.     UINT                    DefCount;                    // Number of constant defines
  147.     UINT                    DclCount;                    // Number of declarations (input + output)
  148.     UINT                    TextureNormalInstructions;   // Number of non-categorized texture instructions
  149.     UINT                    TextureLoadInstructions;     // Number of texture load instructions
  150.     UINT                    TextureCompInstructions;     // Number of texture comparison instructions
  151.     UINT                    TextureBiasInstructions;     // Number of texture bias instructions
  152.     UINT                    TextureGradientInstructions; // Number of texture gradient instructions
  153.     UINT                    FloatInstructionCount;       // Number of floating point arithmetic instructions used
  154.     UINT                    IntInstructionCount;         // Number of signed integer arithmetic instructions used
  155.     UINT                    UintInstructionCount;        // Number of unsigned integer arithmetic instructions used
  156.     UINT                    StaticFlowControlCount;      // Number of static flow control instructions used
  157.     UINT                    DynamicFlowControlCount;     // Number of dynamic flow control instructions used
  158.     UINT                    MacroInstructionCount;       // Number of macro instructions used
  159.     UINT                    ArrayInstructionCount;       // Number of array instructions used
  160.     UINT                    CutInstructionCount;         // Number of cut instructions used
  161.     UINT                    EmitInstructionCount;        // Number of emit instructions used
  162.     D3D10_PRIMITIVE_TOPOLOGY GSOutputTopology;           // Geometry shader output topology
  163.     UINT                    GSMaxOutputVertexCount;      // Geometry shader maximum output vertex count
  164.     D3D11_PRIMITIVE         InputPrimitive;              // GS/HS input primitive
  165.     UINT                    PatchConstantParameters;     // Number of parameters in the patch constant signature
  166.     UINT                    cGSInstanceCount;            // Number of Geometry shader instances
  167.     UINT                    cControlPoints;              // Number of control points in the HS->DS stage
  168.     D3D11_TESSELLATOR_OUTPUT_PRIMITIVE HSOutputPrimitive; // Primitive output by the tessellator
  169.     D3D11_TESSELLATOR_PARTITIONING HSPartitioning;       // Partitioning mode of the tessellator
  170.     D3D11_TESSELLATOR_DOMAIN TessellatorDomain;          // Domain of the tessellator (quad, tri, isoline)
  171.     // instruction counts
  172.     UINT cBarrierInstructions;                           // Number of barrier instructions in a compute shader
  173.     UINT cInterlockedInstructions;                       // Number of interlocked instructions
  174.     UINT cTextureStoreInstructions;                      // Number of texture writes
  175. } D3D11_SHADER_DESC;
  176.  
  177. typedef struct _D3D11_SHADER_INPUT_BIND_DESC
  178. {
  179.     LPCSTR                      Name;           // Name of the resource
  180.     D3D10_SHADER_INPUT_TYPE     Type;           // Type of resource (e.g. texture, cbuffer, etc.)
  181.     UINT                        BindPoint;      // Starting bind point
  182.     UINT                        BindCount;      // Number of contiguous bind points (for arrays)
  183.    
  184.     UINT                        uFlags;         // Input binding flags
  185.     D3D11_RESOURCE_RETURN_TYPE  ReturnType;     // Return type (if texture)
  186.     D3D10_SRV_DIMENSION         Dimension;      // Dimension (if texture)
  187.     UINT                        NumSamples;     // Number of samples (0 if not MS texture)
  188. } D3D11_SHADER_INPUT_BIND_DESC;
  189.  
  190.  
  191. //////////////////////////////////////////////////////////////////////////////
  192. // Interfaces ////////////////////////////////////////////////////////////////
  193. //////////////////////////////////////////////////////////////////////////////
  194.  
  195. typedef interface ID3D11ShaderReflectionType ID3D11ShaderReflectionType;
  196. typedef interface ID3D11ShaderReflectionType *LPD3D11SHADERREFLECTIONTYPE;
  197.  
  198. typedef interface ID3D11ShaderReflectionVariable ID3D11ShaderReflectionVariable;
  199. typedef interface ID3D11ShaderReflectionVariable *LPD3D11SHADERREFLECTIONVARIABLE;
  200.  
  201. typedef interface ID3D11ShaderReflectionConstantBuffer ID3D11ShaderReflectionConstantBuffer;
  202. typedef interface ID3D11ShaderReflectionConstantBuffer *LPD3D11SHADERREFLECTIONCONSTANTBUFFER;
  203.  
  204. typedef interface ID3D11ShaderReflection ID3D11ShaderReflection;
  205. typedef interface ID3D11ShaderReflection *LPD3D11SHADERREFLECTION;
  206.  
  207. // {6E6FFA6A-9BAE-4613-A51E-91652D508C21}
  208. DEFINE_GUID(IID_ID3D11ShaderReflectionType,
  209. 0x6e6ffa6a, 0x9bae, 0x4613, 0xa5, 0x1e, 0x91, 0x65, 0x2d, 0x50, 0x8c, 0x21);
  210.  
  211. #undef INTERFACE
  212. #define INTERFACE ID3D11ShaderReflectionType
  213.  
  214. DECLARE_INTERFACE(ID3D11ShaderReflectionType)
  215. {
  216.     STDMETHOD(GetDesc)(THIS_ __out D3D11_SHADER_TYPE_DESC *pDesc) PURE;
  217.    
  218.     STDMETHOD_(ID3D11ShaderReflectionType*, GetMemberTypeByIndex)(THIS_ __in UINT Index) PURE;
  219.     STDMETHOD_(ID3D11ShaderReflectionType*, GetMemberTypeByName)(THIS_ __in LPCSTR Name) PURE;
  220.     STDMETHOD_(LPCSTR, GetMemberTypeName)(THIS_ __in UINT Index) PURE;
  221.  
  222.     STDMETHOD(IsEqual)(THIS_ __in ID3D11ShaderReflectionType* pType) PURE;
  223.     STDMETHOD_(ID3D11ShaderReflectionType*, GetSubType)(THIS) PURE;
  224.     STDMETHOD_(ID3D11ShaderReflectionType*, GetBaseClass)(THIS) PURE;
  225.     STDMETHOD_(UINT, GetNumInterfaces)(THIS) PURE;
  226.     STDMETHOD_(ID3D11ShaderReflectionType*, GetInterfaceByIndex)(THIS_ __in UINT uIndex) PURE;
  227.     STDMETHOD(IsOfType)(THIS_ __in ID3D11ShaderReflectionType* pType) PURE;
  228.     STDMETHOD(ImplementsInterface)(THIS_ __in ID3D11ShaderReflectionType* pBase) PURE;
  229. };
  230.  
  231. // {51F23923-F3E5-4BD1-91CB-606177D8DB4C}
  232. DEFINE_GUID(IID_ID3D11ShaderReflectionVariable,
  233. 0x51f23923, 0xf3e5, 0x4bd1, 0x91, 0xcb, 0x60, 0x61, 0x77, 0xd8, 0xdb, 0x4c);
  234.  
  235. #undef INTERFACE
  236. #define INTERFACE ID3D11ShaderReflectionVariable
  237.  
  238. DECLARE_INTERFACE(ID3D11ShaderReflectionVariable)
  239. {
  240.     STDMETHOD(GetDesc)(THIS_ __out D3D11_SHADER_VARIABLE_DESC *pDesc) PURE;
  241.    
  242.     STDMETHOD_(ID3D11ShaderReflectionType*, GetType)(THIS) PURE;
  243.     STDMETHOD_(ID3D11ShaderReflectionConstantBuffer*, GetBuffer)(THIS) PURE;
  244.  
  245.     STDMETHOD_(UINT, GetInterfaceSlot)(THIS_ __in UINT uArrayIndex) PURE;
  246. };
  247.  
  248. // {EB62D63D-93DD-4318-8AE8-C6F83AD371B8}
  249. DEFINE_GUID(IID_ID3D11ShaderReflectionConstantBuffer,
  250. 0xeb62d63d, 0x93dd, 0x4318, 0x8a, 0xe8, 0xc6, 0xf8, 0x3a, 0xd3, 0x71, 0xb8);
  251.  
  252. #undef INTERFACE
  253. #define INTERFACE ID3D11ShaderReflectionConstantBuffer
  254.  
  255. DECLARE_INTERFACE(ID3D11ShaderReflectionConstantBuffer)
  256. {
  257.     STDMETHOD(GetDesc)(THIS_ D3D11_SHADER_BUFFER_DESC *pDesc) PURE;
  258.    
  259.     STDMETHOD_(ID3D11ShaderReflectionVariable*, GetVariableByIndex)(THIS_ __in UINT Index) PURE;
  260.     STDMETHOD_(ID3D11ShaderReflectionVariable*, GetVariableByName)(THIS_ __in LPCSTR Name) PURE;
  261. };
  262.  
  263. // {17F27486-A342-4D10-8842-AB0874E7F670}
  264. DEFINE_GUID(IID_ID3D11ShaderReflection,
  265. 0x17f27486, 0xa342, 0x4d10, 0x88, 0x42, 0xab, 0x08, 0x74, 0xe7, 0xf6, 0x70);
  266.  
  267. #undef INTERFACE
  268. #define INTERFACE ID3D11ShaderReflection
  269.  
  270. DECLARE_INTERFACE_(ID3D11ShaderReflection, IUnknown)
  271. {
  272.     STDMETHOD(QueryInterface)(THIS_ __in REFIID iid,
  273.                               __out LPVOID *ppv) PURE;
  274.     STDMETHOD_(ULONG, AddRef)(THIS) PURE;
  275.     STDMETHOD_(ULONG, Release)(THIS) PURE;
  276.  
  277.     STDMETHOD(GetDesc)(THIS_ __out D3D11_SHADER_DESC *pDesc) PURE;
  278.    
  279.     STDMETHOD_(ID3D11ShaderReflectionConstantBuffer*, GetConstantBufferByIndex)(THIS_ __in UINT Index) PURE;
  280.     STDMETHOD_(ID3D11ShaderReflectionConstantBuffer*, GetConstantBufferByName)(THIS_ __in LPCSTR Name) PURE;
  281.    
  282.     STDMETHOD(GetResourceBindingDesc)(THIS_ __in UINT ResourceIndex,
  283.                                       __out D3D11_SHADER_INPUT_BIND_DESC *pDesc) PURE;
  284.    
  285.     STDMETHOD(GetInputParameterDesc)(THIS_ __in UINT ParameterIndex,
  286.                                      __out D3D11_SIGNATURE_PARAMETER_DESC *pDesc) PURE;
  287.     STDMETHOD(GetOutputParameterDesc)(THIS_ __in UINT ParameterIndex,
  288.                                       __out D3D11_SIGNATURE_PARAMETER_DESC *pDesc) PURE;
  289.     STDMETHOD(GetPatchConstantParameterDesc)(THIS_ __in UINT ParameterIndex,
  290.                                              __out D3D11_SIGNATURE_PARAMETER_DESC *pDesc) PURE;
  291.  
  292.     STDMETHOD_(ID3D11ShaderReflectionVariable*, GetVariableByName)(THIS_ __in LPCSTR Name) PURE;
  293.  
  294.     STDMETHOD(GetResourceBindingDescByName)(THIS_ __in LPCSTR Name,
  295.                                             __out D3D11_SHADER_INPUT_BIND_DESC *pDesc) PURE;
  296.  
  297.     STDMETHOD_(UINT, GetMovInstructionCount)(THIS) PURE;
  298.     STDMETHOD_(UINT, GetMovcInstructionCount)(THIS) PURE;
  299.     STDMETHOD_(UINT, GetConversionInstructionCount)(THIS) PURE;
  300.     STDMETHOD_(UINT, GetBitwiseInstructionCount)(THIS) PURE;
  301.    
  302.     STDMETHOD_(D3D10_PRIMITIVE, GetGSInputPrimitive)(THIS) PURE;
  303.     STDMETHOD_(BOOL, IsSampleFrequencyShader)(THIS) PURE;
  304.  
  305.     STDMETHOD_(UINT, GetNumInterfaceSlots)(THIS) PURE;
  306.     STDMETHOD(GetMinFeatureLevel)(THIS_ __out enum D3D_FEATURE_LEVEL* pLevel) PURE;
  307. };
  308.  
  309. //////////////////////////////////////////////////////////////////////////////
  310. // APIs //////////////////////////////////////////////////////////////////////
  311. //////////////////////////////////////////////////////////////////////////////
  312.  
  313. #ifdef __cplusplus
  314. extern "C" {
  315. #endif //__cplusplus
  316.  
  317. #ifdef __cplusplus
  318. }
  319. #endif //__cplusplus
  320.    
  321. #endif //__D3D11SHADER_H__
  322.  
  323.