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 */
26typedef D3D_CBUFFER_TYPE D3D11_CBUFFER_TYPE;
27
28typedef D3D_RESOURCE_RETURN_TYPE D3D11_RESOURCE_RETURN_TYPE;
29
30typedef D3D_TESSELLATOR_DOMAIN D3D11_TESSELLATOR_DOMAIN;
31
32typedef D3D_TESSELLATOR_PARTITIONING D3D11_TESSELLATOR_PARTITIONING;
33
34typedef D3D_TESSELLATOR_OUTPUT_PRIMITIVE D3D11_TESSELLATOR_OUTPUT_PRIMITIVE;
35
36typedef 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
78typedef 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
91typedef 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
103typedef 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
112typedef 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
124typedef 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
136DEFINE_GUID(IID_ID3D11ShaderReflectionType, 0x6e6ffa6a, 0x9bae, 0x4613, 0xa5, 0x1e, 0x91, 0x65, 0x2d, 0x50, 0x8c, 0x21);
137
138#define INTERFACE ID3D11ShaderReflectionType
139DECLARE_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
155DEFINE_GUID(IID_ID3D11ShaderReflectionVariable, 0x51f23923, 0xf3e5, 0x4bd1, 0x91, 0xcb, 0x60, 0x61, 0x77, 0xd8, 0xdb, 0x4c);
156
157#define INTERFACE ID3D11ShaderReflectionVariable
158DECLARE_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
167DEFINE_GUID(IID_ID3D11ShaderReflectionConstantBuffer, 0xeb62d63d, 0x93dd, 0x4318, 0x8a, 0xe8, 0xc6, 0xf8, 0x3a, 0xd3, 0x71, 0xb8);
168
169#define INTERFACE ID3D11ShaderReflectionConstantBuffer
170DECLARE_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
178DEFINE_GUID(IID_ID3D11ShaderReflection, 0x0a233719, 0x3960, 0x4578, 0x9d, 0x7c, 0x20, 0x3b, 0x8b, 0x1d, 0x9c, 0xc1);
179
180#define INTERFACE ID3D11ShaderReflection
181DECLARE_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