Home | History | Annotate | Download | only in include
      1 #undef INTERFACE
      2 /*
      3  * Copyright 2010 Matteo Bruni for CodeWeavers
      4  *
      5  * This library is free software; you can redistribute it and/or
      6  * modify it under the terms of the GNU Lesser General Public
      7  * License as published by the Free Software Foundation; either
      8  * version 2.1 of the License, or (at your option) any later version.
      9  *
     10  * This library is distributed in the hope that it will be useful,
     11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     13  * Lesser General Public License for more details.
     14  *
     15  * You should have received a copy of the GNU Lesser General Public
     16  * License along with this library; if not, write to the Free Software
     17  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
     18  */
     19 
     20 #ifndef __D3D11SHADER_H__
     21 #define __D3D11SHADER_H__
     22 
     23 #include "d3dcommon.h"
     24 
     25 /* These are defined as version-neutral in d3dcommon.h */
     26 typedef D3D_CBUFFER_TYPE D3D11_CBUFFER_TYPE;
     27 
     28 typedef D3D_RESOURCE_RETURN_TYPE D3D11_RESOURCE_RETURN_TYPE;
     29 
     30 typedef D3D_TESSELLATOR_DOMAIN D3D11_TESSELLATOR_DOMAIN;
     31 
     32 typedef D3D_TESSELLATOR_PARTITIONING D3D11_TESSELLATOR_PARTITIONING;
     33 
     34 typedef D3D_TESSELLATOR_OUTPUT_PRIMITIVE D3D11_TESSELLATOR_OUTPUT_PRIMITIVE;
     35 
     36 typedef struct _D3D11_SHADER_DESC
     37 {
     38     UINT Version;
     39     LPCSTR Creator;
     40     UINT Flags;
     41     UINT ConstantBuffers;
     42     UINT BoundResources;
     43     UINT InputParameters;
     44     UINT OutputParameters;
     45     UINT InstructionCount;
     46     UINT TempRegisterCount;
     47     UINT TempArrayCount;
     48     UINT DefCount;
     49     UINT DclCount;
     50     UINT TextureNormalInstructions;
     51     UINT TextureLoadInstructions;
     52     UINT TextureCompInstructions;
     53     UINT TextureBiasInstructions;
     54     UINT TextureGradientInstructions;
     55     UINT FloatInstructionCount;
     56     UINT IntInstructionCount;
     57     UINT UintInstructionCount;
     58     UINT StaticFlowControlCount;
     59     UINT DynamicFlowControlCount;
     60     UINT MacroInstructionCount;
     61     UINT ArrayInstructionCount;
     62     UINT CutInstructionCount;
     63     UINT EmitInstructionCount;
     64     D3D_PRIMITIVE_TOPOLOGY GSOutputTopology;
     65     UINT GSMaxOutputVertexCount;
     66     D3D_PRIMITIVE InputPrimitive;
     67     UINT PatchConstantParameters;
     68     UINT cGSInstanceCount;
     69     UINT cControlPoints;
     70     D3D_TESSELLATOR_OUTPUT_PRIMITIVE HSOutputPrimitive;
     71     D3D_TESSELLATOR_PARTITIONING HSPartitioning;
     72     D3D_TESSELLATOR_DOMAIN TessellatorDomain;
     73     UINT cBarrierInstructions;
     74     UINT cInterlockedInstructions;
     75     UINT cTextureStoreInstructions;
     76 } D3D11_SHADER_DESC;
     77 
     78 typedef struct _D3D11_SHADER_VARIABLE_DESC
     79 {
     80     LPCSTR Name;
     81     UINT StartOffset;
     82     UINT Size;
     83     UINT uFlags;
     84     LPVOID DefaultValue;
     85     UINT StartTexture;
     86     UINT TextureSize;
     87     UINT StartSampler;
     88     UINT SamplerSize;
     89 } D3D11_SHADER_VARIABLE_DESC;
     90 
     91 typedef struct _D3D11_SHADER_TYPE_DESC
     92 {
     93     D3D_SHADER_VARIABLE_CLASS Class;
     94     D3D_SHADER_VARIABLE_TYPE Type;
     95     UINT Rows;
     96     UINT Columns;
     97     UINT Elements;
     98     UINT Members;
     99     UINT Offset;
    100     LPCSTR Name;
    101 } D3D11_SHADER_TYPE_DESC;
    102 
    103 typedef struct _D3D11_SHADER_BUFFER_DESC
    104 {
    105     LPCSTR Name;
    106     D3D_CBUFFER_TYPE Type;
    107     UINT Variables;
    108     UINT Size;
    109     UINT uFlags;
    110 } D3D11_SHADER_BUFFER_DESC;
    111 
    112 typedef struct _D3D11_SHADER_INPUT_BIND_DESC
    113 {
    114     LPCSTR Name;
    115     D3D_SHADER_INPUT_TYPE Type;
    116     UINT BindPoint;
    117     UINT BindCount;
    118     UINT uFlags;
    119     D3D_RESOURCE_RETURN_TYPE ReturnType;
    120     D3D_SRV_DIMENSION Dimension;
    121     UINT NumSamples;
    122 } D3D11_SHADER_INPUT_BIND_DESC;
    123 
    124 typedef struct _D3D11_SIGNATURE_PARAMETER_DESC
    125 {
    126     LPCSTR SemanticName;
    127     UINT SemanticIndex;
    128     UINT Register;
    129     D3D_NAME SystemValueType;
    130     D3D_REGISTER_COMPONENT_TYPE ComponentType;
    131     BYTE Mask;
    132     BYTE ReadWriteMask;
    133     UINT Stream;
    134 } D3D11_SIGNATURE_PARAMETER_DESC;
    135 
    136 DEFINE_GUID(IID_ID3D11ShaderReflectionType, 0x6e6ffa6a, 0x9bae, 0x4613, 0xa5, 0x1e, 0x91, 0x65, 0x2d, 0x50, 0x8c, 0x21);
    137 
    138 #define INTERFACE ID3D11ShaderReflectionType
    139 DECLARE_INTERFACE(ID3D11ShaderReflectionType)
    140 {
    141     STDMETHOD(GetDesc)(THIS_ D3D11_SHADER_TYPE_DESC *desc) PURE;
    142     STDMETHOD_(struct ID3D11ShaderReflectionType *, GetMemberTypeByIndex)(THIS_ UINT index) PURE;
    143     STDMETHOD_(struct ID3D11ShaderReflectionType *, GetMemberTypeByName)(THIS_ LPCSTR name) PURE;
    144     STDMETHOD_(LPCSTR, GetMemberTypeName)(THIS_ UINT index) PURE;
    145     STDMETHOD(IsEqual)(THIS_ struct ID3D11ShaderReflectionType *type) PURE;
    146     STDMETHOD_(struct ID3D11ShaderReflectionType *, GetSubType)(THIS) PURE;
    147     STDMETHOD_(struct ID3D11ShaderReflectionType *, GetBaseClass)(THIS) PURE;
    148     STDMETHOD_(UINT, GetNumInterfaces)(THIS) PURE;
    149     STDMETHOD_(struct ID3D11ShaderReflectionType *, GetInterfaceByIndex)(THIS_ UINT index) PURE;
    150     STDMETHOD(IsOfType)(THIS_ struct ID3D11ShaderReflectionType *type) PURE;
    151     STDMETHOD(ImplementsInterface)(THIS_ ID3D11ShaderReflectionType *base) PURE;
    152 };
    153 #undef INTERFACE
    154 
    155 DEFINE_GUID(IID_ID3D11ShaderReflectionVariable, 0x51f23923, 0xf3e5, 0x4bd1, 0x91, 0xcb, 0x60, 0x61, 0x77, 0xd8, 0xdb, 0x4c);
    156 
    157 #define INTERFACE ID3D11ShaderReflectionVariable
    158 DECLARE_INTERFACE(ID3D11ShaderReflectionVariable)
    159 {
    160     STDMETHOD(GetDesc)(THIS_ D3D11_SHADER_VARIABLE_DESC *desc) PURE;
    161     STDMETHOD_(struct ID3D11ShaderReflectionType *, GetType)(THIS) PURE;
    162     STDMETHOD_(struct ID3D11ShaderReflectionConstantBuffer *, GetBuffer)(THIS) PURE;
    163     STDMETHOD_(UINT, GetInterfaceSlot)(THIS_ UINT index) PURE;
    164 };
    165 #undef INTERFACE
    166 
    167 DEFINE_GUID(IID_ID3D11ShaderReflectionConstantBuffer, 0xeb62d63d, 0x93dd, 0x4318, 0x8a, 0xe8, 0xc6, 0xf8, 0x3a, 0xd3, 0x71, 0xb8);
    168 
    169 #define INTERFACE ID3D11ShaderReflectionConstantBuffer
    170 DECLARE_INTERFACE(ID3D11ShaderReflectionConstantBuffer)
    171 {
    172     STDMETHOD(GetDesc)(THIS_ D3D11_SHADER_BUFFER_DESC *desc) PURE;
    173     STDMETHOD_(struct ID3D11ShaderReflectionVariable *, GetVariableByIndex)(THIS_ UINT index) PURE;
    174     STDMETHOD_(struct ID3D11ShaderReflectionVariable *, GetVariableByName)(THIS_ LPCSTR name) PURE;
    175 };
    176 #undef INTERFACE
    177 
    178 DEFINE_GUID(IID_ID3D11ShaderReflection, 0x0a233719, 0x3960, 0x4578, 0x9d, 0x7c, 0x20, 0x3b, 0x8b, 0x1d, 0x9c, 0xc1);
    179 
    180 #define INTERFACE ID3D11ShaderReflection
    181 DECLARE_INTERFACE_(ID3D11ShaderReflection, IUnknown)
    182 {
    183     /* IUnknown methods */
    184     STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID *object) PURE;
    185     STDMETHOD_(ULONG, AddRef)(THIS) PURE;
    186     STDMETHOD_(ULONG, Release)(THIS) PURE;
    187     /* ID3D11ShaderReflection methods */
    188     STDMETHOD(GetDesc)(THIS_ D3D11_SHADER_DESC *desc) PURE;
    189     STDMETHOD_(struct ID3D11ShaderReflectionConstantBuffer *, GetConstantBufferByIndex)(THIS_ UINT index) PURE;
    190     STDMETHOD_(struct ID3D11ShaderReflectionConstantBuffer *, GetConstantBufferByName)(THIS_ LPCSTR name) PURE;
    191     STDMETHOD(GetResourceBindingDesc)(THIS_ UINT index, D3D11_SHADER_INPUT_BIND_DESC *desc) PURE;
    192     STDMETHOD(GetInputParameterDesc)(THIS_ UINT index, D3D11_SIGNATURE_PARAMETER_DESC *desc) PURE;
    193     STDMETHOD(GetOutputParameterDesc)(THIS_ UINT index, D3D11_SIGNATURE_PARAMETER_DESC *desc) PURE;
    194     STDMETHOD(GetPatchConstantParameterDesc)(THIS_ UINT index, D3D11_SIGNATURE_PARAMETER_DESC *desc) PURE;
    195     STDMETHOD_(struct ID3D11ShaderReflectionVariable *, GetVariableByName)(THIS_ LPCSTR name) PURE;
    196     STDMETHOD(GetResourceBindingDescByName)(THIS_ LPCSTR name, D3D11_SHADER_INPUT_BIND_DESC *desc) PURE;
    197     STDMETHOD_(UINT, GetMovInstructionCount)(THIS) PURE;
    198     STDMETHOD_(UINT, GetMovcInstructionCount)(THIS) PURE;
    199     STDMETHOD_(UINT, GetConversionInstructionCount)(THIS) PURE;
    200     STDMETHOD_(UINT, GetBitwiseInstructionCount)(THIS) PURE;
    201     STDMETHOD_(D3D_PRIMITIVE, GetGSInputPrimitive)(THIS) PURE;
    202     STDMETHOD_(WINBOOL, IsSampleFrequencyShader)(THIS) PURE;
    203     STDMETHOD_(UINT, GetNumInterfaceSlots)(THIS) PURE;
    204     STDMETHOD(GetMinFeatureLevel)(THIS_ enum D3D_FEATURE_LEVEL *level) PURE;
    205     STDMETHOD_(UINT, GetThreadGroupSize)(THIS_ UINT *sizex, UINT *sizey, UINT *sizez) PURE;
    206 };
    207 #undef INTERFACE
    208 
    209 #endif
    210