summaryrefslogtreecommitdiff
path: root/test/Effects11/Inc
diff options
context:
space:
mode:
authorJason Maskell <[email protected]>2016-05-09 10:39:54 +0200
committerJason Maskell <[email protected]>2016-05-09 10:39:54 +0200
commit79b3462799c28af8ba586349bd671b1b56e72353 (patch)
tree3b06e36c390254c0dc7f3733a0d32af213d87293 /test/Effects11/Inc
downloadwaveworks_archive-79b3462799c28af8ba586349bd671b1b56e72353.tar.xz
waveworks_archive-79b3462799c28af8ba586349bd671b1b56e72353.zip
Initial commit with PS4 and XBone stuff trimmed.
Diffstat (limited to 'test/Effects11/Inc')
-rw-r--r--test/Effects11/Inc/d3dx11dbg.h66
-rw-r--r--test/Effects11/Inc/d3dx11effect.h1566
-rw-r--r--test/Effects11/Inc/d3dxGlobal.h1337
3 files changed, 2969 insertions, 0 deletions
diff --git a/test/Effects11/Inc/d3dx11dbg.h b/test/Effects11/Inc/d3dx11dbg.h
new file mode 100644
index 0000000..49ed3b3
--- /dev/null
+++ b/test/Effects11/Inc/d3dx11dbg.h
@@ -0,0 +1,66 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+// File: d3dx11dbg.h
+// Content: D3DX11 debugging functions
+//
+//////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef __D3DX11DBG_H__
+#define __D3DX11DBG_H__
+
+#ifndef _PREFAST_
+
+#pragma warning( disable: 4068 )
+
+#endif
+
+
+#include <strsafe.h>
+#include <new>
+
+#undef NEW
+#undef DELETE
+
+#define NEW new (std::nothrow)
+#define NEW_PROTO_ARGS size_t s, const std::nothrow_t& t
+
+
+
+typedef signed char INT8;
+typedef signed short INT16;
+typedef unsigned char UINT8;
+typedef unsigned short UINT16;
+
+
+//----------------------------------------------------------------------------
+// DPF
+//----------------------------------------------------------------------------
+
+#ifdef FXDPF
+void cdecl D3DXDebugPrintf(UINT lvl, LPCSTR szFormat, ...);
+#define DPF D3DXDebugPrintf
+#else // !FXDPF
+#pragma warning(disable:4002)
+#define DPF() 0
+#endif // !FXDPF
+
+
+//----------------------------------------------------------------------------
+// D3DXASSERT
+//----------------------------------------------------------------------------
+
+#if _DEBUG
+int WINAPI D3DXDebugAssert(LPCSTR szFile, int nLine, LPCSTR szCondition);
+#define D3DXASSERT(condition) \
+ do { if(!(condition)) D3DXDebugAssert(__FILE__, __LINE__, #condition); } while(0)
+#else // !_DEBUG
+#define D3DXASSERT(condition) 0
+#endif // !_DEBUG
+
+
+
+#endif // __D3DX11DBG_H__
+
diff --git a/test/Effects11/Inc/d3dx11effect.h b/test/Effects11/Inc/d3dx11effect.h
new file mode 100644
index 0000000..fc162fc
--- /dev/null
+++ b/test/Effects11/Inc/d3dx11effect.h
@@ -0,0 +1,1566 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//
+// File: D3DX11Effect.h
+// Content: D3DX11 Effect Types & APIs Header
+//
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef __D3DX11EFFECT_H__
+#define __D3DX11EFFECT_H__
+
+#include "d3d11.h"
+#include "d3d11shader.h"
+
+//////////////////////////////////////////////////////////////////////////////
+// File contents:
+//
+// 1) Stateblock enums, structs, interfaces, flat APIs
+// 2) Effect enums, structs, interfaces, flat APIs
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef D3DX11_BYTES_FROM_BITS
+#define D3DX11_BYTES_FROM_BITS(x) (((x) + 7) / 8)
+#endif // D3DX11_BYTES_FROM_BITS
+
+typedef struct _D3DX11_STATE_BLOCK_MASK
+{
+ BYTE VS;
+ BYTE VSSamplers[D3DX11_BYTES_FROM_BITS(D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT)];
+ BYTE VSShaderResources[D3DX11_BYTES_FROM_BITS(D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT)];
+ BYTE VSConstantBuffers[D3DX11_BYTES_FROM_BITS(D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT)];
+ BYTE VSInterfaces[D3DX11_BYTES_FROM_BITS(D3D11_SHADER_MAX_INTERFACES)];
+
+ BYTE HS;
+ BYTE HSSamplers[D3DX11_BYTES_FROM_BITS(D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT)];
+ BYTE HSShaderResources[D3DX11_BYTES_FROM_BITS(D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT)];
+ BYTE HSConstantBuffers[D3DX11_BYTES_FROM_BITS(D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT)];
+ BYTE HSInterfaces[D3DX11_BYTES_FROM_BITS(D3D11_SHADER_MAX_INTERFACES)];
+
+ BYTE DS;
+ BYTE DSSamplers[D3DX11_BYTES_FROM_BITS(D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT)];
+ BYTE DSShaderResources[D3DX11_BYTES_FROM_BITS(D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT)];
+ BYTE DSConstantBuffers[D3DX11_BYTES_FROM_BITS(D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT)];
+ BYTE DSInterfaces[D3DX11_BYTES_FROM_BITS(D3D11_SHADER_MAX_INTERFACES)];
+
+ BYTE GS;
+ BYTE GSSamplers[D3DX11_BYTES_FROM_BITS(D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT)];
+ BYTE GSShaderResources[D3DX11_BYTES_FROM_BITS(D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT)];
+ BYTE GSConstantBuffers[D3DX11_BYTES_FROM_BITS(D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT)];
+ BYTE GSInterfaces[D3DX11_BYTES_FROM_BITS(D3D11_SHADER_MAX_INTERFACES)];
+
+ BYTE PS;
+ BYTE PSSamplers[D3DX11_BYTES_FROM_BITS(D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT)];
+ BYTE PSShaderResources[D3DX11_BYTES_FROM_BITS(D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT)];
+ BYTE PSConstantBuffers[D3DX11_BYTES_FROM_BITS(D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT)];
+ BYTE PSInterfaces[D3DX11_BYTES_FROM_BITS(D3D11_SHADER_MAX_INTERFACES)];
+ BYTE PSUnorderedAccessViews;
+
+ BYTE CS;
+ BYTE CSSamplers[D3DX11_BYTES_FROM_BITS(D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT)];
+ BYTE CSShaderResources[D3DX11_BYTES_FROM_BITS(D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT)];
+ BYTE CSConstantBuffers[D3DX11_BYTES_FROM_BITS(D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT)];
+ BYTE CSInterfaces[D3DX11_BYTES_FROM_BITS(D3D11_SHADER_MAX_INTERFACES)];
+ BYTE CSUnorderedAccessViews;
+
+ BYTE IAVertexBuffers[D3DX11_BYTES_FROM_BITS(D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT)];
+ BYTE IAIndexBuffer;
+ BYTE IAInputLayout;
+ BYTE IAPrimitiveTopology;
+
+ BYTE OMRenderTargets;
+ BYTE OMDepthStencilState;
+ BYTE OMBlendState;
+
+ BYTE RSViewports;
+ BYTE RSScissorRects;
+ BYTE RSRasterizerState;
+
+ BYTE SOBuffers;
+
+ BYTE Predication;
+} D3DX11_STATE_BLOCK_MASK;
+
+//----------------------------------------------------------------------------
+// D3DX11_EFFECT flags:
+// -------------------------------------
+//
+// These flags are passed in when creating an effect, and affect
+// the runtime effect behavior:
+//
+// (Currently none)
+//
+//
+// These flags are set by the effect runtime:
+//
+// D3DX11_EFFECT_OPTIMIZED
+// This effect has been optimized. Reflection functions that rely on
+// names/semantics/strings should fail. This is set when Optimize() is
+// called, but CEffect::IsOptimized() should be used to test for this.
+//
+// D3DX11_EFFECT_CLONE
+// This effect is a clone of another effect. Single CBs will never be
+// updated when internal variable values are changed.
+// This flag is not set when the D3DX11_EFFECT_CLONE_FORCE_NONSINGLE flag
+// is used in cloning.
+//
+//----------------------------------------------------------------------------
+
+#define D3DX11_EFFECT_OPTIMIZED (1 << 21)
+#define D3DX11_EFFECT_CLONE (1 << 22)
+
+// These are the only valid parameter flags to D3DX11CreateEffect*
+#define D3DX11_EFFECT_RUNTIME_VALID_FLAGS (0)
+
+//----------------------------------------------------------------------------
+// D3DX11_EFFECT_VARIABLE flags:
+// ----------------------------
+//
+// These flags describe an effect variable (global or annotation),
+// and are returned in D3DX11_EFFECT_VARIABLE_DESC::Flags.
+//
+// D3DX11_EFFECT_VARIABLE_ANNOTATION
+// Indicates that this is an annotation on a technique, pass, or global
+// variable. Otherwise, this is a global variable. Annotations cannot
+// be shared.
+//
+// D3DX11_EFFECT_VARIABLE_EXPLICIT_BIND_POINT
+// Indicates that the variable has been explicitly bound using the
+// register keyword.
+//----------------------------------------------------------------------------
+
+#define D3DX11_EFFECT_VARIABLE_ANNOTATION (1 << 1)
+#define D3DX11_EFFECT_VARIABLE_EXPLICIT_BIND_POINT (1 << 2)
+
+//----------------------------------------------------------------------------
+// D3DX11_EFFECT_CLONE flags:
+// ----------------------------
+//
+// These flags modify the effect cloning process and are passed into Clone.
+//
+// D3DX11_EFFECT_CLONE_FORCE_NONSINGLE
+// Ignore all "single" qualifiers on cbuffers. All cbuffers will have their
+// own ID3D11Buffer's created in the cloned effect.
+//----------------------------------------------------------------------------
+
+#define D3DX11_EFFECT_CLONE_FORCE_NONSINGLE (1 << 0)
+
+//----------------------------------------------------------------------------
+// D3DX11_EFFECT_PASS flags:
+// ----------------------------
+//
+// These flags modify the effect cloning process and are passed into Clone.
+//
+// D3DX11_EFFECT_PASS_COMMIT_CHANGES
+// This flag tells the effect runtime to assume that the device state was
+// not modified outside of effects, so that only updated state needs to
+// be set.
+//
+// D3DX11_EFFECT_PASS_OMIT_*
+// When applying a pass, do not set the state indicated in the flag name.
+//----------------------------------------------------------------------------
+
+#define D3DX11_EFFECT_PASS_COMMIT_CHANGES (1 << 0) // TODO: not yet implemented
+#define D3DX11_EFFECT_PASS_OMIT_SHADERS_AND_INTERFACES (1 << 1) // TODO: not yet implemented
+#define D3DX11_EFFECT_PASS_OMIT_STATE_OBJECTS (1 << 2) // TODO: not yet implemented
+#define D3DX11_EFFECT_PASS_OMIT_RTVS_AND_DSVS (1 << 3) // TODO: not yet implemented
+#define D3DX11_EFFECT_PASS_OMIT_SAMPLERS (1 << 4) // TODO: not yet implemented
+#define D3DX11_EFFECT_PASS_OMIT_CBS (1 << 5) // TODO: not yet implemented
+#define D3DX11_EFFECT_PASS_OMIT_SRVS (1 << 6) // TODO: not yet implemented
+#define D3DX11_EFFECT_PASS_OMIT_UAVS (1 << 7) // TODO: not yet implemented
+
+#define D3DX11_EFFECT_PASS_ONLY_SET_SHADERS_AND_CBS ( D3DX11_EFFECT_PASS_OMIT_STATE_OBJECTS | \
+ D3DX11_EFFECT_PASS_OMIT_RTVS_AND_DSVS | \
+ D3DX11_EFFECT_PASS_OMIT_SAMPLERS | \
+ D3DX11_EFFECT_PASS_OMIT_SRVS | \
+ D3DX11_EFFECT_PASS_OMIT_UAVS );
+
+//////////////////////////////////////////////////////////////////////////////
+// ID3DX11EffectType //////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
+
+//----------------------------------------------------------------------------
+// D3DX11_EFFECT_TYPE_DESC:
+//
+// Retrieved by ID3DX11EffectType::GetDesc()
+//----------------------------------------------------------------------------
+
+typedef struct _D3DX11_EFFECT_TYPE_DESC
+{
+ LPCSTR TypeName; // Name of the type
+ // (e.g. "float4" or "MyStruct")
+
+ D3D10_SHADER_VARIABLE_CLASS Class; // (e.g. scalar, vector, object, etc.)
+ D3D10_SHADER_VARIABLE_TYPE Type; // (e.g. float, texture, vertexshader, etc.)
+
+ UINT Elements; // Number of elements in this type
+ // (0 if not an array)
+ UINT Members; // Number of members
+ // (0 if not a structure)
+ UINT Rows; // Number of rows in this type
+ // (0 if not a numeric primitive)
+ UINT Columns; // Number of columns in this type
+ // (0 if not a numeric primitive)
+
+ UINT PackedSize; // Number of bytes required to represent
+ // this data type, when tightly packed
+ UINT UnpackedSize; // Number of bytes occupied by this data
+ // type, when laid out in a constant buffer
+ UINT Stride; // Number of bytes to seek between elements,
+ // when laid out in a constant buffer
+} D3DX11_EFFECT_TYPE_DESC;
+
+typedef interface ID3DX11EffectType ID3DX11EffectType;
+typedef interface ID3DX11EffectType *LPD3D11EFFECTTYPE;
+
+// {4250D721-D5E5-491F-B62B-587C43186285}
+DEFINE_GUID(IID_ID3DX11EffectType,
+ 0x4250d721, 0xd5e5, 0x491f, 0xb6, 0x2b, 0x58, 0x7c, 0x43, 0x18, 0x62, 0x85);
+
+#undef INTERFACE
+#define INTERFACE ID3DX11EffectType
+
+DECLARE_INTERFACE(ID3DX11EffectType)
+{
+ STDMETHOD_(BOOL, IsValid)(THIS) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3DX11_EFFECT_TYPE_DESC *pDesc) PURE;
+ STDMETHOD_(ID3DX11EffectType*, GetMemberTypeByIndex)(THIS_ UINT Index) PURE;
+ STDMETHOD_(ID3DX11EffectType*, GetMemberTypeByName)(THIS_ LPCSTR Name) PURE;
+ STDMETHOD_(ID3DX11EffectType*, GetMemberTypeBySemantic)(THIS_ LPCSTR Semantic) PURE;
+ STDMETHOD_(LPCSTR, GetMemberName)(THIS_ UINT Index) PURE;
+ STDMETHOD_(LPCSTR, GetMemberSemantic)(THIS_ UINT Index) PURE;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+// ID3DX11EffectVariable //////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
+
+//----------------------------------------------------------------------------
+// D3DX11_EFFECT_VARIABLE_DESC:
+//
+// Retrieved by ID3DX11EffectVariable::GetDesc()
+//----------------------------------------------------------------------------
+
+typedef struct _D3DX11_EFFECT_VARIABLE_DESC
+{
+ LPCSTR Name; // Name of this variable, annotation,
+ // or structure member
+ LPCSTR Semantic; // Semantic string of this variable
+ // or structure member (NULL for
+ // annotations or if not present)
+
+ UINT Flags; // D3DX11_EFFECT_VARIABLE_* flags
+ UINT Annotations; // Number of annotations on this variable
+ // (always 0 for annotations)
+
+ UINT BufferOffset; // Offset into containing cbuffer or tbuffer
+ // (always 0 for annotations or variables
+ // not in constant buffers)
+
+ UINT ExplicitBindPoint; // Used if the variable has been explicitly bound
+ // using the register keyword. Check Flags for
+ // D3DX11_EFFECT_VARIABLE_EXPLICIT_BIND_POINT;
+} D3DX11_EFFECT_VARIABLE_DESC;
+
+typedef interface ID3DX11EffectVariable ID3DX11EffectVariable;
+typedef interface ID3DX11EffectVariable *LPD3D11EFFECTVARIABLE;
+
+// {036A777D-B56E-4B25-B313-CC3DDAB71873}
+DEFINE_GUID(IID_ID3DX11EffectVariable,
+ 0x036a777d, 0xb56e, 0x4b25, 0xb3, 0x13, 0xcc, 0x3d, 0xda, 0xb7, 0x18, 0x73);
+
+#undef INTERFACE
+#define INTERFACE ID3DX11EffectVariable
+
+// Forward defines
+typedef interface ID3DX11EffectScalarVariable ID3DX11EffectScalarVariable;
+typedef interface ID3DX11EffectVectorVariable ID3DX11EffectVectorVariable;
+typedef interface ID3DX11EffectMatrixVariable ID3DX11EffectMatrixVariable;
+typedef interface ID3DX11EffectStringVariable ID3DX11EffectStringVariable;
+typedef interface ID3DX11EffectClassInstanceVariable ID3DX11EffectClassInstanceVariable;
+typedef interface ID3DX11EffectInterfaceVariable ID3DX11EffectInterfaceVariable;
+typedef interface ID3DX11EffectShaderResourceVariable ID3DX11EffectShaderResourceVariable;
+typedef interface ID3DX11EffectUnorderedAccessViewVariable ID3DX11EffectUnorderedAccessViewVariable;
+typedef interface ID3DX11EffectRenderTargetViewVariable ID3DX11EffectRenderTargetViewVariable;
+typedef interface ID3DX11EffectDepthStencilViewVariable ID3DX11EffectDepthStencilViewVariable;
+typedef interface ID3DX11EffectConstantBuffer ID3DX11EffectConstantBuffer;
+typedef interface ID3DX11EffectShaderVariable ID3DX11EffectShaderVariable;
+typedef interface ID3DX11EffectBlendVariable ID3DX11EffectBlendVariable;
+typedef interface ID3DX11EffectDepthStencilVariable ID3DX11EffectDepthStencilVariable;
+typedef interface ID3DX11EffectRasterizerVariable ID3DX11EffectRasterizerVariable;
+typedef interface ID3DX11EffectSamplerVariable ID3DX11EffectSamplerVariable;
+
+DECLARE_INTERFACE(ID3DX11EffectVariable)
+{
+ STDMETHOD_(BOOL, IsValid)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectType*, GetType)(THIS) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3DX11_EFFECT_VARIABLE_DESC *pDesc) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetElement)(THIS_ UINT Index) PURE;
+
+ STDMETHOD_(ID3DX11EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE;
+
+ STDMETHOD_(ID3DX11EffectScalarVariable*, AsScalar)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectVectorVariable*, AsVector)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectMatrixVariable*, AsMatrix)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectStringVariable*, AsString)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectClassInstanceVariable*, AsClassInstance)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectInterfaceVariable*, AsInterface)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectUnorderedAccessViewVariable*, AsUnorderedAccessView)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectShaderVariable*, AsShader)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectBlendVariable*, AsBlend)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectRasterizerVariable*, AsRasterizer)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectSamplerVariable*, AsSampler)(THIS) PURE;
+
+ STDMETHOD(SetRawValue)(THIS_ CONST void *pData, UINT Offset, UINT Count) PURE;
+ STDMETHOD(GetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+// ID3DX11EffectScalarVariable ////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
+
+typedef interface ID3DX11EffectScalarVariable ID3DX11EffectScalarVariable;
+typedef interface ID3DX11EffectScalarVariable *LPD3D11EFFECTSCALARVARIABLE;
+
+// {921EF2E5-A65D-4E92-9FC6-4E9CC09A4ADE}
+DEFINE_GUID(IID_ID3DX11EffectScalarVariable,
+ 0x921ef2e5, 0xa65d, 0x4e92, 0x9f, 0xc6, 0x4e, 0x9c, 0xc0, 0x9a, 0x4a, 0xde);
+
+#undef INTERFACE
+#define INTERFACE ID3DX11EffectScalarVariable
+
+DECLARE_INTERFACE_(ID3DX11EffectScalarVariable, ID3DX11EffectVariable)
+{
+ STDMETHOD_(BOOL, IsValid)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectType*, GetType)(THIS) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3DX11_EFFECT_VARIABLE_DESC *pDesc) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetElement)(THIS_ UINT Index) PURE;
+
+ STDMETHOD_(ID3DX11EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE;
+
+ STDMETHOD_(ID3DX11EffectScalarVariable*, AsScalar)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectVectorVariable*, AsVector)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectMatrixVariable*, AsMatrix)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectStringVariable*, AsString)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectClassInstanceVariable*, AsClassInstance)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectInterfaceVariable*, AsInterface)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectUnorderedAccessViewVariable*, AsUnorderedAccessView)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectShaderVariable*, AsShader)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectBlendVariable*, AsBlend)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectRasterizerVariable*, AsRasterizer)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectSamplerVariable*, AsSampler)(THIS) PURE;
+
+ STDMETHOD(SetRawValue)(THIS_ CONST void *pData, UINT ByteOffset, UINT ByteCount) PURE;
+ STDMETHOD(GetRawValue)(THIS_ void *pData, UINT ByteOffset, UINT ByteCount) PURE;
+
+ STDMETHOD(SetFloat)(THIS_ CONST float Value) PURE;
+ STDMETHOD(GetFloat)(THIS_ float *pValue) PURE;
+
+ STDMETHOD(SetFloatArray)(THIS_ CONST float *pData, UINT Offset, UINT Count) PURE;
+ STDMETHOD(GetFloatArray)(THIS_ float *pData, UINT Offset, UINT Count) PURE;
+
+ STDMETHOD(SetInt)(THIS_ CONST int Value) PURE;
+ STDMETHOD(GetInt)(THIS_ int *pValue) PURE;
+
+ STDMETHOD(SetIntArray)(THIS_ CONST int *pData, UINT Offset, UINT Count) PURE;
+ STDMETHOD(GetIntArray)(THIS_ int *pData, UINT Offset, UINT Count) PURE;
+
+ STDMETHOD(SetBool)(THIS_ CONST BOOL Value) PURE;
+ STDMETHOD(GetBool)(THIS_ BOOL *pValue) PURE;
+
+ STDMETHOD(SetBoolArray)(THIS_ CONST BOOL *pData, UINT Offset, UINT Count) PURE;
+ STDMETHOD(GetBoolArray)(THIS_ BOOL *pData, UINT Offset, UINT Count) PURE;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+// ID3DX11EffectVectorVariable ////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
+
+typedef interface ID3DX11EffectVectorVariable ID3DX11EffectVectorVariable;
+typedef interface ID3DX11EffectVectorVariable *LPD3D11EFFECTVECTORVARIABLE;
+
+// {5E785D4A-D87B-48D8-B6E6-0F8CA7E7467A}
+DEFINE_GUID(IID_ID3DX11EffectVectorVariable,
+ 0x5e785d4a, 0xd87b, 0x48d8, 0xb6, 0xe6, 0x0f, 0x8c, 0xa7, 0xe7, 0x46, 0x7a);
+
+#undef INTERFACE
+#define INTERFACE ID3DX11EffectVectorVariable
+
+DECLARE_INTERFACE_(ID3DX11EffectVectorVariable, ID3DX11EffectVariable)
+{
+ STDMETHOD_(BOOL, IsValid)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectType*, GetType)(THIS) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3DX11_EFFECT_VARIABLE_DESC *pDesc) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetElement)(THIS_ UINT Index) PURE;
+
+ STDMETHOD_(ID3DX11EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE;
+
+ STDMETHOD_(ID3DX11EffectScalarVariable*, AsScalar)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectVectorVariable*, AsVector)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectMatrixVariable*, AsMatrix)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectStringVariable*, AsString)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectClassInstanceVariable*, AsClassInstance)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectInterfaceVariable*, AsInterface)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectUnorderedAccessViewVariable*, AsUnorderedAccessView)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectShaderVariable*, AsShader)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectBlendVariable*, AsBlend)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectRasterizerVariable*, AsRasterizer)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectSamplerVariable*, AsSampler)(THIS) PURE;
+
+ STDMETHOD(SetRawValue)(THIS_ CONST void *pData, UINT ByteOffset, UINT ByteCount) PURE;
+ STDMETHOD(GetRawValue)(THIS_ void *pData, UINT ByteOffset, UINT ByteCount) PURE;
+
+ STDMETHOD(SetBoolVector) (THIS_ CONST BOOL *pData) PURE;
+ STDMETHOD(SetIntVector) (THIS_ CONST int *pData) PURE;
+ STDMETHOD(SetFloatVector)(THIS_ CONST float *pData) PURE;
+
+ STDMETHOD(GetBoolVector) (THIS_ BOOL *pData) PURE;
+ STDMETHOD(GetIntVector) (THIS_ int *pData) PURE;
+ STDMETHOD(GetFloatVector)(THIS_ float *pData) PURE;
+
+ STDMETHOD(SetBoolVectorArray) (THIS_ CONST BOOL *pData, UINT Offset, UINT Count) PURE;
+ STDMETHOD(SetIntVectorArray) (THIS_ CONST int *pData, UINT Offset, UINT Count) PURE;
+ STDMETHOD(SetFloatVectorArray)(THIS_ CONST float *pData, UINT Offset, UINT Count) PURE;
+
+ STDMETHOD(GetBoolVectorArray) (THIS_ BOOL *pData, UINT Offset, UINT Count) PURE;
+ STDMETHOD(GetIntVectorArray) (THIS_ int *pData, UINT Offset, UINT Count) PURE;
+ STDMETHOD(GetFloatVectorArray)(THIS_ float *pData, UINT Offset, UINT Count) PURE;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+// ID3DX11EffectMatrixVariable ////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
+
+typedef interface ID3DX11EffectMatrixVariable ID3DX11EffectMatrixVariable;
+typedef interface ID3DX11EffectMatrixVariable *LPD3D11EFFECTMATRIXVARIABLE;
+
+// {E1096CF4-C027-419A-8D86-D29173DC803E}
+DEFINE_GUID(IID_ID3DX11EffectMatrixVariable,
+ 0xe1096cf4, 0xc027, 0x419a, 0x8d, 0x86, 0xd2, 0x91, 0x73, 0xdc, 0x80, 0x3e);
+
+#undef INTERFACE
+#define INTERFACE ID3DX11EffectMatrixVariable
+
+DECLARE_INTERFACE_(ID3DX11EffectMatrixVariable, ID3DX11EffectVariable)
+{
+ STDMETHOD_(BOOL, IsValid)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectType*, GetType)(THIS) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3DX11_EFFECT_VARIABLE_DESC *pDesc) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetElement)(THIS_ UINT Index) PURE;
+
+ STDMETHOD_(ID3DX11EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE;
+
+ STDMETHOD_(ID3DX11EffectScalarVariable*, AsScalar)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectVectorVariable*, AsVector)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectMatrixVariable*, AsMatrix)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectStringVariable*, AsString)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectClassInstanceVariable*, AsClassInstance)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectInterfaceVariable*, AsInterface)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectUnorderedAccessViewVariable*, AsUnorderedAccessView)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectShaderVariable*, AsShader)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectBlendVariable*, AsBlend)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectRasterizerVariable*, AsRasterizer)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectSamplerVariable*, AsSampler)(THIS) PURE;
+
+ STDMETHOD(SetRawValue)(THIS_ CONST void *pData, UINT ByteOffset, UINT ByteCount) PURE;
+ STDMETHOD(GetRawValue)(THIS_ void *pData, UINT ByteOffset, UINT ByteCount) PURE;
+
+ STDMETHOD(SetMatrix)(THIS_ CONST float *pData) PURE;
+ STDMETHOD(GetMatrix)(THIS_ float *pData) PURE;
+
+ STDMETHOD(SetMatrixArray)(THIS_ CONST float *pData, UINT Offset, UINT Count) PURE;
+ STDMETHOD(GetMatrixArray)(THIS_ float *pData, UINT Offset, UINT Count) PURE;
+
+ STDMETHOD(SetMatrixTranspose)(THIS_ CONST float *pData) PURE;
+ STDMETHOD(GetMatrixTranspose)(THIS_ float *pData) PURE;
+
+ STDMETHOD(SetMatrixTransposeArray)(THIS_ CONST float *pData, UINT Offset, UINT Count) PURE;
+ STDMETHOD(GetMatrixTransposeArray)(THIS_ float *pData, UINT Offset, UINT Count) PURE;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+// ID3DX11EffectStringVariable ////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
+
+typedef interface ID3DX11EffectStringVariable ID3DX11EffectStringVariable;
+typedef interface ID3DX11EffectStringVariable *LPD3D11EFFECTSTRINGVARIABLE;
+
+// {F355C818-01BE-4653-A7CC-60FFFEDDC76D}
+DEFINE_GUID(IID_ID3DX11EffectStringVariable,
+ 0xf355c818, 0x01be, 0x4653, 0xa7, 0xcc, 0x60, 0xff, 0xfe, 0xdd, 0xc7, 0x6d);
+
+#undef INTERFACE
+#define INTERFACE ID3DX11EffectStringVariable
+
+DECLARE_INTERFACE_(ID3DX11EffectStringVariable, ID3DX11EffectVariable)
+{
+ STDMETHOD_(BOOL, IsValid)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectType*, GetType)(THIS) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3DX11_EFFECT_VARIABLE_DESC *pDesc) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetElement)(THIS_ UINT Index) PURE;
+
+ STDMETHOD_(ID3DX11EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE;
+
+ STDMETHOD_(ID3DX11EffectScalarVariable*, AsScalar)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectVectorVariable*, AsVector)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectMatrixVariable*, AsMatrix)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectStringVariable*, AsString)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectClassInstanceVariable*, AsClassInstance)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectInterfaceVariable*, AsInterface)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectUnorderedAccessViewVariable*, AsUnorderedAccessView)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectShaderVariable*, AsShader)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectBlendVariable*, AsBlend)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectRasterizerVariable*, AsRasterizer)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectSamplerVariable*, AsSampler)(THIS) PURE;
+
+ STDMETHOD(SetRawValue)(THIS_ CONST void *pData, UINT Offset, UINT Count) PURE;
+ STDMETHOD(GetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE;
+
+ STDMETHOD(GetString)(THIS_ LPCSTR *ppString) PURE;
+ STDMETHOD(GetStringArray)(THIS_ LPCSTR *ppStrings, UINT Offset, UINT Count) PURE;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+// ID3DX11EffectClassInstanceVariable ////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
+
+typedef interface ID3DX11EffectClassInstanceVariable ID3DX11EffectClassInstanceVariable;
+typedef interface ID3DX11EffectClassInstanceVariable *LPD3D11EFFECTCLASSINSTANCEVARIABLE;
+
+// {926A8053-2A39-4DB4-9BDE-CF649ADEBDC1}
+DEFINE_GUID(IID_ID3DX11EffectClassInstanceVariable,
+ 0x926a8053, 0x2a39, 0x4db4, 0x9b, 0xde, 0xcf, 0x64, 0x9a, 0xde, 0xbd, 0xc1);
+
+#undef INTERFACE
+#define INTERFACE ID3DX11EffectClassInstanceVariable
+
+DECLARE_INTERFACE_(ID3DX11EffectClassInstanceVariable, ID3DX11EffectVariable)
+{
+ STDMETHOD_(BOOL, IsValid)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectType*, GetType)(THIS) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3DX11_EFFECT_VARIABLE_DESC *pDesc) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetElement)(THIS_ UINT Index) PURE;
+
+ STDMETHOD_(ID3DX11EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE;
+
+ STDMETHOD_(ID3DX11EffectScalarVariable*, AsScalar)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectVectorVariable*, AsVector)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectMatrixVariable*, AsMatrix)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectStringVariable*, AsString)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectClassInstanceVariable*, AsClassInstance)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectInterfaceVariable*, AsInterface)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectUnorderedAccessViewVariable*, AsUnorderedAccessView)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectShaderVariable*, AsShader)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectBlendVariable*, AsBlend)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectRasterizerVariable*, AsRasterizer)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectSamplerVariable*, AsSampler)(THIS) PURE;
+
+ STDMETHOD(SetRawValue)(THIS_ CONST void *pData, UINT Offset, UINT Count) PURE;
+ STDMETHOD(GetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE;
+
+ STDMETHOD(GetClassInstance)(ID3D11ClassInstance** ppClassInstance) PURE;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+// ID3DX11EffectInterfaceVariable ////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
+
+typedef interface ID3DX11EffectInterfaceVariable ID3DX11EffectInterfaceVariable;
+typedef interface ID3DX11EffectInterfaceVariable *LPD3D11EFFECTINTERFACEVARIABLE;
+
+// {516C8CD8-1C80-40A4-B19B-0688792F11A5}
+DEFINE_GUID(IID_ID3DX11EffectInterfaceVariable,
+ 0x516c8cd8, 0x1c80, 0x40a4, 0xb1, 0x9b, 0x06, 0x88, 0x79, 0x2f, 0x11, 0xa5);
+
+#undef INTERFACE
+#define INTERFACE ID3DX11EffectInterfaceVariable
+
+DECLARE_INTERFACE_(ID3DX11EffectInterfaceVariable, ID3DX11EffectVariable)
+{
+ STDMETHOD_(BOOL, IsValid)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectType*, GetType)(THIS) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3DX11_EFFECT_VARIABLE_DESC *pDesc) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetElement)(THIS_ UINT Index) PURE;
+
+ STDMETHOD_(ID3DX11EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE;
+
+ STDMETHOD_(ID3DX11EffectScalarVariable*, AsScalar)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectVectorVariable*, AsVector)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectMatrixVariable*, AsMatrix)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectStringVariable*, AsString)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectClassInstanceVariable*, AsClassInstance)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectInterfaceVariable*, AsInterface)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectUnorderedAccessViewVariable*, AsUnorderedAccessView)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectShaderVariable*, AsShader)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectBlendVariable*, AsBlend)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectRasterizerVariable*, AsRasterizer)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectSamplerVariable*, AsSampler)(THIS) PURE;
+
+ STDMETHOD(SetRawValue)(THIS_ CONST void *pData, UINT Offset, UINT Count) PURE;
+ STDMETHOD(GetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE;
+
+ STDMETHOD(SetClassInstance)(ID3DX11EffectClassInstanceVariable *pEffectClassInstance) PURE;
+ STDMETHOD(GetClassInstance)(ID3DX11EffectClassInstanceVariable **ppEffectClassInstance) PURE;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+// ID3DX11EffectShaderResourceVariable ////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
+
+typedef interface ID3DX11EffectShaderResourceVariable ID3DX11EffectShaderResourceVariable;
+typedef interface ID3DX11EffectShaderResourceVariable *LPD3D11EFFECTSHADERRESOURCEVARIABLE;
+
+// {350DB233-BBE0-485C-9BFE-C0026B844F89}
+DEFINE_GUID(IID_ID3DX11EffectShaderResourceVariable,
+ 0x350db233, 0xbbe0, 0x485c, 0x9b, 0xfe, 0xc0, 0x02, 0x6b, 0x84, 0x4f, 0x89);
+
+#undef INTERFACE
+#define INTERFACE ID3DX11EffectShaderResourceVariable
+
+DECLARE_INTERFACE_(ID3DX11EffectShaderResourceVariable, ID3DX11EffectVariable)
+{
+ STDMETHOD_(BOOL, IsValid)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectType*, GetType)(THIS) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3DX11_EFFECT_VARIABLE_DESC *pDesc) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetElement)(THIS_ UINT Index) PURE;
+
+ STDMETHOD_(ID3DX11EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE;
+
+ STDMETHOD_(ID3DX11EffectScalarVariable*, AsScalar)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectVectorVariable*, AsVector)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectMatrixVariable*, AsMatrix)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectStringVariable*, AsString)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectClassInstanceVariable*, AsClassInstance)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectInterfaceVariable*, AsInterface)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectUnorderedAccessViewVariable*, AsUnorderedAccessView)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectShaderVariable*, AsShader)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectBlendVariable*, AsBlend)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectRasterizerVariable*, AsRasterizer)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectSamplerVariable*, AsSampler)(THIS) PURE;
+
+ STDMETHOD(SetRawValue)(THIS_ CONST void *pData, UINT Offset, UINT Count) PURE;
+ STDMETHOD(GetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE;
+
+ STDMETHOD(SetResource)(THIS_ ID3D11ShaderResourceView *pResource) PURE;
+ STDMETHOD(GetResource)(THIS_ ID3D11ShaderResourceView **ppResource) PURE;
+
+ STDMETHOD(SetResourceArray)(THIS_ ID3D11ShaderResourceView **ppResources, UINT Offset, UINT Count) PURE;
+ STDMETHOD(GetResourceArray)(THIS_ ID3D11ShaderResourceView **ppResources, UINT Offset, UINT Count) PURE;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+// ID3DX11EffectUnorderedAccessViewVariable ////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
+
+typedef interface ID3DX11EffectUnorderedAccessViewVariable ID3DX11EffectUnorderedAccessViewVariable;
+typedef interface ID3DX11EffectUnorderedAccessViewVariable *LPD3D11EFFECTUNORDEREDACCESSVIEWVARIABLE;
+
+// {79B4AC8C-870A-47D2-B05A-8BD5CC3EE6C9}
+DEFINE_GUID(IID_ID3DX11EffectUnorderedAccessViewVariable,
+ 0x79b4ac8c, 0x870a, 0x47d2, 0xb0, 0x5a, 0x8b, 0xd5, 0xcc, 0x3e, 0xe6, 0xc9);
+
+#undef INTERFACE
+#define INTERFACE ID3DX11EffectUnorderedAccessViewVariable
+
+DECLARE_INTERFACE_(ID3DX11EffectUnorderedAccessViewVariable, ID3DX11EffectVariable)
+{
+ STDMETHOD_(BOOL, IsValid)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectType*, GetType)(THIS) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3DX11_EFFECT_VARIABLE_DESC *pDesc) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetElement)(THIS_ UINT Index) PURE;
+
+ STDMETHOD_(ID3DX11EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE;
+
+ STDMETHOD_(ID3DX11EffectScalarVariable*, AsScalar)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectVectorVariable*, AsVector)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectMatrixVariable*, AsMatrix)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectStringVariable*, AsString)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectClassInstanceVariable*, AsClassInstance)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectInterfaceVariable*, AsInterface)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectUnorderedAccessViewVariable*, AsUnorderedAccessView)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectShaderVariable*, AsShader)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectBlendVariable*, AsBlend)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectRasterizerVariable*, AsRasterizer)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectSamplerVariable*, AsSampler)(THIS) PURE;
+
+ STDMETHOD(SetRawValue)(THIS_ CONST void *pData, UINT Offset, UINT Count) PURE;
+ STDMETHOD(GetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE;
+
+ STDMETHOD(SetUnorderedAccessView)(THIS_ ID3D11UnorderedAccessView *pResource) PURE;
+ STDMETHOD(GetUnorderedAccessView)(THIS_ ID3D11UnorderedAccessView **ppResource) PURE;
+
+ STDMETHOD(SetUnorderedAccessViewArray)(THIS_ ID3D11UnorderedAccessView **ppResources, UINT Offset, UINT Count) PURE;
+ STDMETHOD(GetUnorderedAccessViewArray)(THIS_ ID3D11UnorderedAccessView **ppResources, UINT Offset, UINT Count) PURE;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+// ID3DX11EffectRenderTargetViewVariable //////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
+
+typedef interface ID3DX11EffectRenderTargetViewVariable ID3DX11EffectRenderTargetViewVariable;
+typedef interface ID3DX11EffectRenderTargetViewVariable *LPD3D11EFFECTRENDERTARGETVIEWVARIABLE;
+
+// {D5066909-F40C-43F8-9DB5-057C2A208552}
+DEFINE_GUID(IID_ID3DX11EffectRenderTargetViewVariable,
+ 0xd5066909, 0xf40c, 0x43f8, 0x9d, 0xb5, 0x05, 0x7c, 0x2a, 0x20, 0x85, 0x52);
+
+#undef INTERFACE
+#define INTERFACE ID3DX11EffectRenderTargetViewVariable
+
+DECLARE_INTERFACE_(ID3DX11EffectRenderTargetViewVariable, ID3DX11EffectVariable)
+{
+ STDMETHOD_(BOOL, IsValid)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectType*, GetType)(THIS) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3DX11_EFFECT_VARIABLE_DESC *pDesc) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetElement)(THIS_ UINT Index) PURE;
+
+ STDMETHOD_(ID3DX11EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE;
+
+ STDMETHOD_(ID3DX11EffectScalarVariable*, AsScalar)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectVectorVariable*, AsVector)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectMatrixVariable*, AsMatrix)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectStringVariable*, AsString)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectClassInstanceVariable*, AsClassInstance)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectInterfaceVariable*, AsInterface)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectUnorderedAccessViewVariable*, AsUnorderedAccessView)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectShaderVariable*, AsShader)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectBlendVariable*, AsBlend)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectRasterizerVariable*, AsRasterizer)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectSamplerVariable*, AsSampler)(THIS) PURE;
+
+ STDMETHOD(SetRawValue)(THIS_ CONST void *pData, UINT Offset, UINT Count) PURE;
+ STDMETHOD(GetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE;
+
+ STDMETHOD(SetRenderTarget)(THIS_ ID3D11RenderTargetView *pResource) PURE;
+ STDMETHOD(GetRenderTarget)(THIS_ ID3D11RenderTargetView **ppResource) PURE;
+
+ STDMETHOD(SetRenderTargetArray)(THIS_ ID3D11RenderTargetView **ppResources, UINT Offset, UINT Count) PURE;
+ STDMETHOD(GetRenderTargetArray)(THIS_ ID3D11RenderTargetView **ppResources, UINT Offset, UINT Count) PURE;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+// ID3DX11EffectDepthStencilViewVariable //////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
+
+typedef interface ID3DX11EffectDepthStencilViewVariable ID3DX11EffectDepthStencilViewVariable;
+typedef interface ID3DX11EffectDepthStencilViewVariable *LPD3D11EFFECTDEPTHSTENCILVIEWVARIABLE;
+
+// {33C648AC-2E9E-4A2E-9CD6-DE31ACC5B347}
+DEFINE_GUID(IID_ID3DX11EffectDepthStencilViewVariable,
+ 0x33c648ac, 0x2e9e, 0x4a2e, 0x9c, 0xd6, 0xde, 0x31, 0xac, 0xc5, 0xb3, 0x47);
+
+#undef INTERFACE
+#define INTERFACE ID3DX11EffectDepthStencilViewVariable
+
+DECLARE_INTERFACE_(ID3DX11EffectDepthStencilViewVariable, ID3DX11EffectVariable)
+{
+ STDMETHOD_(BOOL, IsValid)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectType*, GetType)(THIS) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3DX11_EFFECT_VARIABLE_DESC *pDesc) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetElement)(THIS_ UINT Index) PURE;
+
+ STDMETHOD_(ID3DX11EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE;
+
+ STDMETHOD_(ID3DX11EffectScalarVariable*, AsScalar)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectVectorVariable*, AsVector)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectMatrixVariable*, AsMatrix)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectStringVariable*, AsString)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectClassInstanceVariable*, AsClassInstance)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectInterfaceVariable*, AsInterface)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectUnorderedAccessViewVariable*, AsUnorderedAccessView)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectShaderVariable*, AsShader)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectBlendVariable*, AsBlend)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectRasterizerVariable*, AsRasterizer)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectSamplerVariable*, AsSampler)(THIS) PURE;
+
+ STDMETHOD(SetRawValue)(THIS_ CONST void *pData, UINT Offset, UINT Count) PURE;
+ STDMETHOD(GetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE;
+
+ STDMETHOD(SetDepthStencil)(THIS_ ID3D11DepthStencilView *pResource) PURE;
+ STDMETHOD(GetDepthStencil)(THIS_ ID3D11DepthStencilView **ppResource) PURE;
+
+ STDMETHOD(SetDepthStencilArray)(THIS_ ID3D11DepthStencilView **ppResources, UINT Offset, UINT Count) PURE;
+ STDMETHOD(GetDepthStencilArray)(THIS_ ID3D11DepthStencilView **ppResources, UINT Offset, UINT Count) PURE;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+// ID3DX11EffectConstantBuffer ////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
+
+typedef interface ID3DX11EffectConstantBuffer ID3DX11EffectConstantBuffer;
+typedef interface ID3DX11EffectConstantBuffer *LPD3D11EFFECTCONSTANTBUFFER;
+
+// {2CB6C733-82D2-4000-B3DA-6219D9A99BF2}
+DEFINE_GUID(IID_ID3DX11EffectConstantBuffer,
+ 0x2cb6c733, 0x82d2, 0x4000, 0xb3, 0xda, 0x62, 0x19, 0xd9, 0xa9, 0x9b, 0xf2);
+
+#undef INTERFACE
+#define INTERFACE ID3DX11EffectConstantBuffer
+
+DECLARE_INTERFACE_(ID3DX11EffectConstantBuffer, ID3DX11EffectVariable)
+{
+ STDMETHOD_(ID3DX11EffectType*, GetType)(THIS) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3DX11_EFFECT_VARIABLE_DESC *pDesc) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetElement)(THIS_ UINT Index) PURE;
+
+ STDMETHOD_(ID3DX11EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE;
+
+ STDMETHOD_(ID3DX11EffectScalarVariable*, AsScalar)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectVectorVariable*, AsVector)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectMatrixVariable*, AsMatrix)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectStringVariable*, AsString)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectClassInstanceVariable*, AsClassInstance)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectInterfaceVariable*, AsInterface)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectUnorderedAccessViewVariable*, AsUnorderedAccessView)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectShaderVariable*, AsShader)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectBlendVariable*, AsBlend)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectRasterizerVariable*, AsRasterizer)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectSamplerVariable*, AsSampler)(THIS) PURE;
+
+ STDMETHOD(SetRawValue)(THIS_ CONST void *pData, UINT Offset, UINT Count) PURE;
+ STDMETHOD(GetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE;
+
+ STDMETHOD(SetConstantBuffer)(THIS_ ID3D11Buffer *pConstantBuffer) PURE;
+ STDMETHOD(UndoSetConstantBuffer)(THIS) PURE;
+ STDMETHOD(GetConstantBuffer)(THIS_ ID3D11Buffer **ppConstantBuffer) PURE;
+
+ STDMETHOD(SetTextureBuffer)(THIS_ ID3D11ShaderResourceView *pTextureBuffer) PURE;
+ STDMETHOD(UndoSetTextureBuffer)(THIS) PURE;
+ STDMETHOD(GetTextureBuffer)(THIS_ ID3D11ShaderResourceView **ppTextureBuffer) PURE;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+// ID3DX11EffectShaderVariable ////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
+
+//----------------------------------------------------------------------------
+// D3DX11_EFFECT_SHADER_DESC:
+//
+// Retrieved by ID3DX11EffectShaderVariable::GetShaderDesc()
+//----------------------------------------------------------------------------
+
+typedef struct _D3DX11_EFFECT_SHADER_DESC
+{
+ CONST BYTE *pInputSignature; // Passed into CreateInputLayout,
+ // valid on VS and GS only
+
+ BOOL IsInline; // Is this an anonymous shader variable
+ // resulting from an inline shader assignment?
+
+
+ // -- The following fields are not valid after Optimize() --
+ CONST BYTE *pBytecode; // Shader bytecode
+ UINT BytecodeLength;
+
+ LPCSTR SODecls[D3D11_SO_STREAM_COUNT]; // Stream out declaration string (for GS with SO)
+ UINT RasterizedStream;
+
+ UINT NumInputSignatureEntries; // Number of entries in the input signature
+ UINT NumOutputSignatureEntries; // Number of entries in the output signature
+ UINT NumPatchConstantSignatureEntries; // Number of entries in the patch constant signature
+} D3DX11_EFFECT_SHADER_DESC;
+
+
+typedef interface ID3DX11EffectShaderVariable ID3DX11EffectShaderVariable;
+typedef interface ID3DX11EffectShaderVariable *LPD3D11EFFECTSHADERVARIABLE;
+
+// {7508B344-020A-4EC7-9118-62CDD36C88D7}
+DEFINE_GUID(IID_ID3DX11EffectShaderVariable,
+ 0x7508b344, 0x020a, 0x4ec7, 0x91, 0x18, 0x62, 0xcd, 0xd3, 0x6c, 0x88, 0xd7);
+
+#undef INTERFACE
+#define INTERFACE ID3DX11EffectShaderVariable
+
+DECLARE_INTERFACE_(ID3DX11EffectShaderVariable, ID3DX11EffectVariable)
+{
+ STDMETHOD_(ID3DX11EffectType*, GetType)(THIS) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3DX11_EFFECT_VARIABLE_DESC *pDesc) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetElement)(THIS_ UINT Index) PURE;
+
+ STDMETHOD_(ID3DX11EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE;
+
+ STDMETHOD_(ID3DX11EffectScalarVariable*, AsScalar)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectVectorVariable*, AsVector)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectMatrixVariable*, AsMatrix)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectStringVariable*, AsString)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectClassInstanceVariable*, AsClassInstance)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectInterfaceVariable*, AsInterface)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectUnorderedAccessViewVariable*, AsUnorderedAccessView)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectShaderVariable*, AsShader)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectBlendVariable*, AsBlend)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectRasterizerVariable*, AsRasterizer)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectSamplerVariable*, AsSampler)(THIS) PURE;
+
+ STDMETHOD(SetRawValue)(THIS_ CONST void *pData, UINT Offset, UINT Count) PURE;
+ STDMETHOD(GetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE;
+
+ STDMETHOD(GetShaderDesc)(THIS_ UINT ShaderIndex, D3DX11_EFFECT_SHADER_DESC *pDesc) PURE;
+
+ STDMETHOD(GetVertexShader)(THIS_ UINT ShaderIndex, ID3D11VertexShader **ppVS) PURE;
+ STDMETHOD(GetGeometryShader)(THIS_ UINT ShaderIndex, ID3D11GeometryShader **ppGS) PURE;
+ STDMETHOD(GetPixelShader)(THIS_ UINT ShaderIndex, ID3D11PixelShader **ppPS) PURE;
+ STDMETHOD(GetHullShader)(THIS_ UINT ShaderIndex, ID3D11HullShader **ppPS) PURE;
+ STDMETHOD(GetDomainShader)(THIS_ UINT ShaderIndex, ID3D11DomainShader **ppPS) PURE;
+ STDMETHOD(GetComputeShader)(THIS_ UINT ShaderIndex, ID3D11ComputeShader **ppPS) PURE;
+
+ STDMETHOD(GetInputSignatureElementDesc)(THIS_ UINT ShaderIndex, UINT Element, D3D11_SIGNATURE_PARAMETER_DESC *pDesc) PURE;
+ STDMETHOD(GetOutputSignatureElementDesc)(THIS_ UINT ShaderIndex, UINT Element, D3D11_SIGNATURE_PARAMETER_DESC *pDesc) PURE;
+ STDMETHOD(GetPatchConstantSignatureElementDesc)(THIS_ UINT ShaderIndex, UINT Element, D3D11_SIGNATURE_PARAMETER_DESC *pDesc) PURE;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+// ID3DX11EffectBlendVariable /////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
+
+typedef interface ID3DX11EffectBlendVariable ID3DX11EffectBlendVariable;
+typedef interface ID3DX11EffectBlendVariable *LPD3D11EFFECTBLENDVARIABLE;
+
+// {D664F4D7-3B81-4805-B277-C1DF58C39F53}
+DEFINE_GUID(IID_ID3DX11EffectBlendVariable,
+ 0xd664f4d7, 0x3b81, 0x4805, 0xb2, 0x77, 0xc1, 0xdf, 0x58, 0xc3, 0x9f, 0x53);
+
+#undef INTERFACE
+#define INTERFACE ID3DX11EffectBlendVariable
+
+DECLARE_INTERFACE_(ID3DX11EffectBlendVariable, ID3DX11EffectVariable)
+{
+ STDMETHOD_(ID3DX11EffectType*, GetType)(THIS) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3DX11_EFFECT_VARIABLE_DESC *pDesc) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetElement)(THIS_ UINT Index) PURE;
+
+ STDMETHOD_(ID3DX11EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE;
+
+ STDMETHOD_(ID3DX11EffectScalarVariable*, AsScalar)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectVectorVariable*, AsVector)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectMatrixVariable*, AsMatrix)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectStringVariable*, AsString)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectClassInstanceVariable*, AsClassInstance)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectInterfaceVariable*, AsInterface)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectUnorderedAccessViewVariable*, AsUnorderedAccessView)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectShaderVariable*, AsShader)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectBlendVariable*, AsBlend)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectRasterizerVariable*, AsRasterizer)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectSamplerVariable*, AsSampler)(THIS) PURE;
+
+ STDMETHOD(SetRawValue)(THIS_ CONST void *pData, UINT Offset, UINT Count) PURE;
+ STDMETHOD(GetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE;
+
+ STDMETHOD(GetBlendState)(THIS_ UINT Index, ID3D11BlendState **ppBlendState) PURE;
+ STDMETHOD(SetBlendState)(THIS_ UINT Index, ID3D11BlendState *pBlendState) PURE;
+ STDMETHOD(UndoSetBlendState)(THIS_ UINT Index) PURE;
+ STDMETHOD(GetBackingStore)(THIS_ UINT Index, D3D11_BLEND_DESC *pBlendDesc) PURE;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+// ID3DX11EffectDepthStencilVariable //////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
+
+typedef interface ID3DX11EffectDepthStencilVariable ID3DX11EffectDepthStencilVariable;
+typedef interface ID3DX11EffectDepthStencilVariable *LPD3D11EFFECTDEPTHSTENCILVARIABLE;
+
+// {69B5751B-61A5-48E5-BD41-D93988111563}
+DEFINE_GUID(IID_ID3DX11EffectDepthStencilVariable,
+ 0x69b5751b, 0x61a5, 0x48e5, 0xbd, 0x41, 0xd9, 0x39, 0x88, 0x11, 0x15, 0x63);
+
+#undef INTERFACE
+#define INTERFACE ID3DX11EffectDepthStencilVariable
+
+DECLARE_INTERFACE_(ID3DX11EffectDepthStencilVariable, ID3DX11EffectVariable)
+{
+ STDMETHOD_(ID3DX11EffectType*, GetType)(THIS) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3DX11_EFFECT_VARIABLE_DESC *pDesc) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetElement)(THIS_ UINT Index) PURE;
+
+ STDMETHOD_(ID3DX11EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE;
+
+ STDMETHOD_(ID3DX11EffectScalarVariable*, AsScalar)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectVectorVariable*, AsVector)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectMatrixVariable*, AsMatrix)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectStringVariable*, AsString)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectClassInstanceVariable*, AsClassInstance)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectInterfaceVariable*, AsInterface)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectUnorderedAccessViewVariable*, AsUnorderedAccessView)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectShaderVariable*, AsShader)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectBlendVariable*, AsBlend)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectRasterizerVariable*, AsRasterizer)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectSamplerVariable*, AsSampler)(THIS) PURE;
+
+ STDMETHOD(SetRawValue)(THIS_ CONST void *pData, UINT Offset, UINT Count) PURE;
+ STDMETHOD(GetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE;
+
+ STDMETHOD(GetDepthStencilState)(THIS_ UINT Index, ID3D11DepthStencilState **ppDepthStencilState) PURE;
+ STDMETHOD(SetDepthStencilState)(THIS_ UINT Index, ID3D11DepthStencilState *pDepthStencilState) PURE;
+ STDMETHOD(UndoSetDepthStencilState)(THIS_ UINT Index) PURE;
+ STDMETHOD(GetBackingStore)(THIS_ UINT Index, D3D11_DEPTH_STENCIL_DESC *pDepthStencilDesc) PURE;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+// ID3DX11EffectRasterizerVariable ////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
+
+typedef interface ID3DX11EffectRasterizerVariable ID3DX11EffectRasterizerVariable;
+typedef interface ID3DX11EffectRasterizerVariable *LPD3D11EFFECTRASTERIZERVARIABLE;
+
+// {53A262F6-5F74-4151-A132-E3DD19A62C9D}
+DEFINE_GUID(IID_ID3DX11EffectRasterizerVariable,
+ 0x53a262f6, 0x5f74, 0x4151, 0xa1, 0x32, 0xe3, 0xdd, 0x19, 0xa6, 0x2c, 0x9d);
+
+#undef INTERFACE
+#define INTERFACE ID3DX11EffectRasterizerVariable
+
+DECLARE_INTERFACE_(ID3DX11EffectRasterizerVariable, ID3DX11EffectVariable)
+{
+ STDMETHOD_(ID3DX11EffectType*, GetType)(THIS) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3DX11_EFFECT_VARIABLE_DESC *pDesc) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetElement)(THIS_ UINT Index) PURE;
+
+ STDMETHOD_(ID3DX11EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE;
+
+ STDMETHOD_(ID3DX11EffectScalarVariable*, AsScalar)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectVectorVariable*, AsVector)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectMatrixVariable*, AsMatrix)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectStringVariable*, AsString)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectClassInstanceVariable*, AsClassInstance)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectInterfaceVariable*, AsInterface)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectUnorderedAccessViewVariable*, AsUnorderedAccessView)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectShaderVariable*, AsShader)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectBlendVariable*, AsBlend)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectRasterizerVariable*, AsRasterizer)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectSamplerVariable*, AsSampler)(THIS) PURE;
+
+ STDMETHOD(SetRawValue)(THIS_ CONST void *pData, UINT Offset, UINT Count) PURE;
+ STDMETHOD(GetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE;
+
+ STDMETHOD(GetRasterizerState)(THIS_ UINT Index, ID3D11RasterizerState **ppRasterizerState) PURE;
+ STDMETHOD(SetRasterizerState)(THIS_ UINT Index, ID3D11RasterizerState *pRasterizerState) PURE;
+ STDMETHOD(UndoSetRasterizerState)(THIS_ UINT Index) PURE;
+ STDMETHOD(GetBackingStore)(THIS_ UINT Index, D3D11_RASTERIZER_DESC *pRasterizerDesc) PURE;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+// ID3DX11EffectSamplerVariable ///////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
+
+typedef interface ID3DX11EffectSamplerVariable ID3DX11EffectSamplerVariable;
+typedef interface ID3DX11EffectSamplerVariable *LPD3D11EFFECTSAMPLERVARIABLE;
+
+// {C6402E55-1095-4D95-8931-F92660513DD9}
+DEFINE_GUID(IID_ID3DX11EffectSamplerVariable,
+ 0xc6402e55, 0x1095, 0x4d95, 0x89, 0x31, 0xf9, 0x26, 0x60, 0x51, 0x3d, 0xd9);
+
+#undef INTERFACE
+#define INTERFACE ID3DX11EffectSamplerVariable
+
+DECLARE_INTERFACE_(ID3DX11EffectSamplerVariable, ID3DX11EffectVariable)
+{
+ STDMETHOD_(ID3DX11EffectType*, GetType)(THIS) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3DX11_EFFECT_VARIABLE_DESC *pDesc) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetElement)(THIS_ UINT Index) PURE;
+
+ STDMETHOD_(ID3DX11EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE;
+
+ STDMETHOD_(ID3DX11EffectScalarVariable*, AsScalar)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectVectorVariable*, AsVector)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectMatrixVariable*, AsMatrix)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectStringVariable*, AsString)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectClassInstanceVariable*, AsClassInstance)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectInterfaceVariable*, AsInterface)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectUnorderedAccessViewVariable*, AsUnorderedAccessView)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectShaderVariable*, AsShader)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectBlendVariable*, AsBlend)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectRasterizerVariable*, AsRasterizer)(THIS) PURE;
+ STDMETHOD_(ID3DX11EffectSamplerVariable*, AsSampler)(THIS) PURE;
+
+ STDMETHOD(SetRawValue)(THIS_ CONST void *pData, UINT Offset, UINT Count) PURE;
+ STDMETHOD(GetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE;
+
+ STDMETHOD(GetSampler)(THIS_ UINT Index, ID3D11SamplerState **ppSampler) PURE;
+ STDMETHOD(SetSampler)(THIS_ UINT Index, ID3D11SamplerState *pSampler) PURE;
+ STDMETHOD(UndoSetSampler)(THIS_ UINT Index) PURE;
+ STDMETHOD(GetBackingStore)(THIS_ UINT Index, D3D11_SAMPLER_DESC *pSamplerDesc) PURE;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+// ID3DX11EffectPass //////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
+
+//----------------------------------------------------------------------------
+// D3DX11_PASS_DESC:
+//
+// Retrieved by ID3DX11EffectPass::GetDesc()
+//----------------------------------------------------------------------------
+
+typedef struct _D3DX11_PASS_DESC
+{
+ LPCSTR Name; // Name of this pass (NULL if not anonymous)
+ UINT Annotations; // Number of annotations on this pass
+
+ BYTE *pIAInputSignature; // Signature from VS or GS (if there is no VS)
+ // or NULL if neither exists
+ SIZE_T IAInputSignatureSize; // Singature size in bytes
+
+ UINT StencilRef; // Specified in SetDepthStencilState()
+ UINT SampleMask; // Specified in SetBlendState()
+ FLOAT BlendFactor[4]; // Specified in SetBlendState()
+} D3DX11_PASS_DESC;
+
+//----------------------------------------------------------------------------
+// D3DX11_PASS_SHADER_DESC:
+//
+// Retrieved by ID3DX11EffectPass::Get**ShaderDesc()
+//----------------------------------------------------------------------------
+
+typedef struct _D3DX11_PASS_SHADER_DESC
+{
+ ID3DX11EffectShaderVariable *pShaderVariable; // The variable that this shader came from.
+ // If this is an inline shader assignment,
+ // the returned interface will be an
+ // anonymous shader variable, which is
+ // not retrievable any other way. It's
+ // name in the variable description will
+ // be "$Anonymous".
+ // If there is no assignment of this type in
+ // the pass block, pShaderVariable != NULL,
+ // but pShaderVariable->IsValid() == FALSE.
+
+ UINT ShaderIndex; // The element of pShaderVariable (if an array)
+ // or 0 if not applicable
+} D3DX11_PASS_SHADER_DESC;
+
+typedef interface ID3DX11EffectPass ID3DX11EffectPass;
+typedef interface ID3DX11EffectPass *LPD3D11EFFECTPASS;
+
+// {3437CEC4-4AC1-4D87-8916-F4BD5A41380C}
+DEFINE_GUID(IID_ID3DX11EffectPass,
+ 0x3437cec4, 0x4ac1, 0x4d87, 0x89, 0x16, 0xf4, 0xbd, 0x5a, 0x41, 0x38, 0x0c);
+
+#undef INTERFACE
+#define INTERFACE ID3DX11EffectPass
+
+DECLARE_INTERFACE(ID3DX11EffectPass)
+{
+ STDMETHOD_(BOOL, IsValid)(THIS) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3DX11_PASS_DESC *pDesc) PURE;
+
+ STDMETHOD(GetVertexShaderDesc)(THIS_ D3DX11_PASS_SHADER_DESC *pDesc) PURE;
+ STDMETHOD(GetGeometryShaderDesc)(THIS_ D3DX11_PASS_SHADER_DESC *pDesc) PURE;
+ STDMETHOD(GetPixelShaderDesc)(THIS_ D3DX11_PASS_SHADER_DESC *pDesc) PURE;
+ STDMETHOD(GetHullShaderDesc)(THIS_ D3DX11_PASS_SHADER_DESC *pDesc) PURE;
+ STDMETHOD(GetDomainShaderDesc)(THIS_ D3DX11_PASS_SHADER_DESC *pDesc) PURE;
+ STDMETHOD(GetComputeShaderDesc)(THIS_ D3DX11_PASS_SHADER_DESC *pDesc) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE;
+
+ STDMETHOD(Apply)(THIS_ UINT Flags, ID3D11DeviceContext* pContext) PURE;
+
+ STDMETHOD(ComputeStateBlockMask)(THIS_ D3DX11_STATE_BLOCK_MASK *pStateBlockMask) PURE;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+// ID3DX11EffectTechnique /////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
+
+//----------------------------------------------------------------------------
+// D3DX11_TECHNIQUE_DESC:
+//
+// Retrieved by ID3DX11EffectTechnique::GetDesc()
+//----------------------------------------------------------------------------
+
+typedef struct _D3DX11_TECHNIQUE_DESC
+{
+ LPCSTR Name; // Name of this technique (NULL if not anonymous)
+ UINT Passes; // Number of passes contained within
+ UINT Annotations; // Number of annotations on this technique
+} D3DX11_TECHNIQUE_DESC;
+
+typedef interface ID3DX11EffectTechnique ID3DX11EffectTechnique;
+typedef interface ID3DX11EffectTechnique *LPD3D11EFFECTTECHNIQUE;
+
+// {51198831-1F1D-4F47-BD76-41CB0835B1DE}
+DEFINE_GUID(IID_ID3DX11EffectTechnique,
+ 0x51198831, 0x1f1d, 0x4f47, 0xbd, 0x76, 0x41, 0xcb, 0x08, 0x35, 0xb1, 0xde);
+
+#undef INTERFACE
+#define INTERFACE ID3DX11EffectTechnique
+
+DECLARE_INTERFACE(ID3DX11EffectTechnique)
+{
+ STDMETHOD_(BOOL, IsValid)(THIS) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3DX11_TECHNIQUE_DESC *pDesc) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE;
+
+ STDMETHOD_(ID3DX11EffectPass*, GetPassByIndex)(THIS_ UINT Index) PURE;
+ STDMETHOD_(ID3DX11EffectPass*, GetPassByName)(THIS_ LPCSTR Name) PURE;
+
+ STDMETHOD(ComputeStateBlockMask)(THIS_ D3DX11_STATE_BLOCK_MASK *pStateBlockMask) PURE;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+// ID3DX11EffectTechnique /////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
+
+//----------------------------------------------------------------------------
+// D3DX11_GROUP_DESC:
+//
+// Retrieved by ID3DX11EffectTechnique::GetDesc()
+//----------------------------------------------------------------------------
+
+typedef struct _D3DX11_GROUP_DESC
+{
+ LPCSTR Name; // Name of this group (only NULL if global)
+ UINT Techniques; // Number of techniques contained within
+ UINT Annotations; // Number of annotations on this group
+} D3DX11_GROUP_DESC;
+
+typedef interface ID3DX11EffectGroup ID3DX11EffectGroup;
+typedef interface ID3DX11EffectGroup *LPD3D11EFFECTGROUP;
+
+// {03074acf-97de-485f-b201-cb775264afd6}
+DEFINE_GUID(IID_ID3DX11EffectGroup,
+ 0x03074acf, 0x97de, 0x485f, 0xb2, 0x01, 0xcb, 0x77, 0x52, 0x64, 0xaf, 0xd6);
+
+#undef INTERFACE
+#define INTERFACE ID3DX11EffectGroup
+
+DECLARE_INTERFACE(ID3DX11EffectGroup)
+{
+ STDMETHOD_(BOOL, IsValid)(THIS) PURE;
+ STDMETHOD(GetDesc)(THIS_ D3DX11_GROUP_DESC *pDesc) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE;
+
+ STDMETHOD_(ID3DX11EffectTechnique*, GetTechniqueByIndex)(THIS_ UINT Index) PURE;
+ STDMETHOD_(ID3DX11EffectTechnique*, GetTechniqueByName)(THIS_ LPCSTR Name) PURE;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+// ID3DX11Effect //////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
+
+//----------------------------------------------------------------------------
+// D3DX11_EFFECT_DESC:
+//
+// Retrieved by ID3DX11Effect::GetDesc()
+//----------------------------------------------------------------------------
+
+typedef struct _D3DX11_EFFECT_DESC
+{
+ UINT ConstantBuffers; // Number of constant buffers in this effect
+ UINT GlobalVariables; // Number of global variables in this effect
+ UINT InterfaceVariables; // Number of global interfaces in this effect
+ UINT Techniques; // Number of techniques in this effect
+ UINT Groups; // Number of groups in this effect
+} D3DX11_EFFECT_DESC;
+
+typedef interface ID3DX11Effect ID3DX11Effect;
+typedef interface ID3DX11Effect *LPD3D11EFFECT;
+
+// {FA61CA24-E4BA-4262-9DB8-B132E8CAE319}
+DEFINE_GUID(IID_ID3DX11Effect,
+ 0xfa61ca24, 0xe4ba, 0x4262, 0x9d, 0xb8, 0xb1, 0x32, 0xe8, 0xca, 0xe3, 0x19);
+
+#undef INTERFACE
+#define INTERFACE ID3DX11Effect
+
+DECLARE_INTERFACE_(ID3DX11Effect, IUnknown)
+{
+ // IUnknown
+ STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
+ STDMETHOD_(ULONG, AddRef)(THIS) PURE;
+ STDMETHOD_(ULONG, Release)(THIS) PURE;
+
+ STDMETHOD_(BOOL, IsValid)(THIS) PURE;
+
+ // Managing D3D Device
+ STDMETHOD(GetDevice)(THIS_ ID3D11Device** ppDevice) PURE;
+
+ // New Reflection APIs
+ STDMETHOD(GetDesc)(THIS_ D3DX11_EFFECT_DESC *pDesc) PURE;
+
+ STDMETHOD_(ID3DX11EffectConstantBuffer*, GetConstantBufferByIndex)(THIS_ UINT Index) PURE;
+ STDMETHOD_(ID3DX11EffectConstantBuffer*, GetConstantBufferByName)(THIS_ LPCSTR Name) PURE;
+
+ STDMETHOD_(ID3DX11EffectVariable*, GetVariableByIndex)(THIS_ UINT Index) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetVariableByName)(THIS_ LPCSTR Name) PURE;
+ STDMETHOD_(ID3DX11EffectVariable*, GetVariableBySemantic)(THIS_ LPCSTR Semantic) PURE;
+
+ STDMETHOD_(ID3DX11EffectGroup*, GetGroupByIndex)(THIS_ UINT Index) PURE;
+ STDMETHOD_(ID3DX11EffectGroup*, GetGroupByName)(THIS_ LPCSTR Name) PURE;
+
+ STDMETHOD_(ID3DX11EffectTechnique*, GetTechniqueByIndex)(THIS_ UINT Index) PURE;
+ STDMETHOD_(ID3DX11EffectTechnique*, GetTechniqueByName)(THIS_ LPCSTR Name) PURE;
+
+ STDMETHOD_(ID3D11ClassLinkage*, GetClassLinkage)(THIS) PURE;
+
+ STDMETHOD(CloneEffect)(THIS_ UINT Flags, ID3DX11Effect** ppClonedEffect ) PURE;
+ STDMETHOD(Optimize)(THIS) PURE;
+ STDMETHOD_(BOOL, IsOptimized)(THIS) PURE;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+// APIs //////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
+
+#ifdef __cplusplus
+extern "C" {
+#endif //__cplusplus
+
+//----------------------------------------------------------------------------
+// D3DX11CreateEffectFromMemory:
+// --------------------------
+// Creates an effect from a binary effect or file
+//
+// Parameters:
+//
+// [in]
+//
+//
+// pData
+// Blob of compiled effect data
+// DataLength
+// Length of the data blob
+// FXFlags
+// Compilation flags pertaining to Effect compilation, honored
+// by the Effect compiler
+// pDevice
+// Pointer to the D3D11 device on which to create Effect resources
+//
+// [out]
+//
+// ppEffect
+// Address of the newly created Effect interface
+//
+//----------------------------------------------------------------------------
+
+HRESULT WINAPI D3DX11CreateEffectFromMemory(CONST void *pData, SIZE_T DataLength, UINT FXFlags, ID3D11Device *pDevice, ID3DX11Effect **ppEffect);
+
+#ifdef __cplusplus
+}
+#endif //__cplusplus
+
+#endif //__D3DX11EFFECT_H__
+
diff --git a/test/Effects11/Inc/d3dxGlobal.h b/test/Effects11/Inc/d3dxGlobal.h
new file mode 100644
index 0000000..3b5cdf8
--- /dev/null
+++ b/test/Effects11/Inc/d3dxGlobal.h
@@ -0,0 +1,1337 @@
+//////////////////////////////////////////////////////////////////////////////
+//
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+// File: D3DXGlobal.h
+// Content: D3DX11 Effects helper defines and data structures
+//
+//////////////////////////////////////////////////////////////////////////////
+
+#pragma once
+
+#pragma warning(disable : 4100 4127 4189 4201 4245 4389 4505 4701 4706)
+
+namespace D3DX11Debug
+{
+}
+
+using namespace D3DX11Debug;
+
+#include "d3dx11dbg.h"
+
+#define SAFE_RELEASE(p) { if (p) { (p)->Release(); (p) = NULL; } }
+#define SAFE_ADDREF(p) { if (p) { (p)->AddRef(); } }
+
+#define SAFE_DELETE_ARRAY(p) { delete [](p); p = NULL; }
+#define SAFE_DELETE(p) { delete (p); p = NULL; }
+
+#if FXDEBUG
+#define __BREAK_ON_FAIL { __debugbreak(); }
+#else
+#define __BREAK_ON_FAIL
+#endif
+
+#define VA(x, action) { hr = (x); if (FAILED(hr)) { action; __BREAK_ON_FAIL; return hr; } }
+#define VNA(x,action) { if (!(x)) { action; __BREAK_ON_FAIL; hr = E_OUTOFMEMORY; goto lExit; } }
+#define VBA(x,action) { if (!(x)) { action; __BREAK_ON_FAIL; hr = E_FAIL; goto lExit; } }
+#define VHA(x,action) { hr = (x); if (FAILED(hr)) { action; __BREAK_ON_FAIL; goto lExit; } }
+
+#define V(x) { VA (x, 0) }
+#define VN(x) { VNA(x, 0) }
+#define VB(x) { VBA(x, 0) }
+#define VH(x) { VHA(x, 0) }
+
+#define VBD(x,str) { VBA(x, DPF(1,str)) }
+#define VHD(x,str) { VHA(x, DPF(1,str)) }
+
+#define VEASSERT(x) { hr = (x); if (FAILED(hr)) { __BREAK_ON_FAIL; D3DXASSERT(!#x); goto lExit; } }
+#define VNASSERT(x) { if (!(x)) { __BREAK_ON_FAIL; D3DXASSERT(!#x); hr = E_OUTOFMEMORY; goto lExit; } }
+
+#define ANALYSIS_ASSUME(x) { D3DXASSERT(x); __analysis_assume(x); __assume(x); }
+
+#define D3DX11FLTASSIGN(a,b) { *reinterpret_cast< UINT32* >(&(a)) = *reinterpret_cast< UINT32* >(&(b)); }
+
+// Preferred data alignment -- must be a power of 2!
+static const UINT c_DataAlignment = sizeof(UINT_PTR);
+
+D3DX11INLINE UINT AlignToPowerOf2(UINT Value, UINT Alignment)
+{
+ D3DXASSERT((Alignment & (Alignment - 1)) == 0);
+ // to align to 2^N, add 2^N - 1 and AND with all but lowest N bits set
+ ANALYSIS_ASSUME(Alignment > 0 && Value < MAXDWORD - Alignment);
+ return (Value + Alignment - 1) & (~(Alignment - 1));
+}
+
+D3DX11INLINE void * AlignToPowerOf2(void *pValue, UINT_PTR Alignment)
+{
+ D3DXASSERT((Alignment & (Alignment - 1)) == 0);
+ // to align to 2^N, add 2^N - 1 and AND with all but lowest N bits set
+ return (void *)(((UINT_PTR)pValue + Alignment - 1) & (~((UINT_PTR)Alignment - 1)));
+}
+
+
+// Fast memcpy
+D3DX11INLINE void dwordMemcpy( __out_bcount(uByteCount) void * __restrict pDest, __in_bcount(uByteCount) CONST void * __restrict pSource, UINT uByteCount)
+{
+ UINT i;
+ D3DXASSERT(uByteCount % 4 == 0);
+#ifdef _AMD64_
+ const UINT qwordCount = uByteCount >> 3;
+
+ __int64* src64 = (__int64*) pSource;
+ __int64* dst64 = (__int64*) pDest;
+
+ for (i=0; i<(qwordCount & 0x3); i++)
+ {
+ *(dst64) = *(src64);
+ dst64++;
+ src64++;
+ }
+
+ for (; i<qwordCount; i+= 4)
+ {
+ *(dst64 ) = *(src64 );
+ *(dst64 + 1 ) = *(src64 + 1 );
+ *(dst64 + 2 ) = *(src64 + 2 );
+ *(dst64 + 3 ) = *(src64 + 3 );
+ dst64 += 4;
+ src64 += 4;
+ }
+
+ ANALYSIS_ASSUME( dst64 - static_cast< __int64* >(pDest) <= uByteCount - 4 );
+ ANALYSIS_ASSUME( src64 - static_cast< const __int64* >(pSource) <= uByteCount - 4 );
+ if( uByteCount & 0x4 )
+ {
+ *((UINT*)dst64) = *((UINT*)src64);
+ }
+#else
+ const UINT dwordCount = uByteCount >> 2;
+
+ for (i=0; i<(dwordCount & 0x3); i++)
+ {
+#pragma prefast(suppress: __WARNING_UNRELATED_LOOP_TERMINATION, "(dwordCount & 03) < dwordCount")
+ ((UINT*)pDest)[i ] = ((UINT*)pSource)[i ];
+ }
+ for (; i<dwordCount; i+= 4)
+ {
+ ((UINT*)pDest)[i ] = ((UINT*)pSource)[i ];
+ ((UINT*)pDest)[i+1] = ((UINT*)pSource)[i+1];
+ ((UINT*)pDest)[i+2] = ((UINT*)pSource)[i+2];
+ ((UINT*)pDest)[i+3] = ((UINT*)pSource)[i+3];
+ }
+#endif
+}
+
+
+namespace D3DX11Core
+{
+
+//////////////////////////////////////////////////////////////////////////
+// CMemoryStream - A class to simplify reading binary data
+//////////////////////////////////////////////////////////////////////////
+class CMemoryStream
+{
+ BYTE *m_pData;
+ SIZE_T m_cbData;
+ SIZE_T m_readPtr;
+
+public:
+ HRESULT SetData(const void *pData, SIZE_T size);
+
+ HRESULT Read(UINT *pUint);
+ HRESULT Read(void **ppData, SIZE_T size);
+ HRESULT Read(LPCSTR *ppString);
+
+ HRESULT ReadAtOffset(SIZE_T offset, SIZE_T size, void **ppData);
+ HRESULT ReadAtOffset(SIZE_T offset, LPCSTR *ppString);
+
+ SIZE_T GetPosition();
+ HRESULT Seek(SIZE_T offset);
+
+ CMemoryStream();
+ ~CMemoryStream();
+};
+
+}
+
+#if FXDEBUG
+
+namespace D3DX11Debug
+{
+
+// This variable indicates how many ticks to go before rolling over
+// all of the timer variables in the FX system.
+// It is read from the system registry in debug builds; in retail the high bit is simply tested.
+
+_declspec(selectany) unsigned int g_TimerRolloverCount = 0x80000000;
+}
+
+#endif // FXDEBUG
+
+
+//////////////////////////////////////////////////////////////////////////
+// CEffectVector - A vector implementation
+//////////////////////////////////////////////////////////////////////////
+
+template<class T> class CEffectVector
+{
+protected:
+#if _DEBUG
+ T *m_pCastData; // makes debugging easier to have a casted version of the data
+#endif // _DEBUG
+
+ BYTE *m_pData;
+ UINT m_MaxSize;
+ UINT m_CurSize;
+
+ HRESULT Grow()
+ {
+ return Reserve(m_CurSize + 1);
+ }
+
+ HRESULT Reserve(UINT DesiredSize)
+ {
+ if (DesiredSize > m_MaxSize)
+ {
+ BYTE *pNewData;
+ UINT newSize = max(m_MaxSize * 2, DesiredSize);
+
+ if (newSize < 16)
+ newSize = 16;
+
+ if ((newSize < m_MaxSize) || (newSize < m_CurSize) || (newSize >= UINT_MAX / sizeof(T)))
+ {
+ m_hLastError = E_OUTOFMEMORY;
+ return m_hLastError;
+ }
+
+ pNewData = NEW BYTE[newSize * sizeof(T)];
+ if (pNewData == NULL)
+ {
+ m_hLastError = E_OUTOFMEMORY;
+ return m_hLastError;
+ }
+
+ if (m_pData)
+ {
+ memcpy(pNewData, m_pData, m_CurSize * sizeof(T));
+ delete []m_pData;
+ }
+
+ m_pData = pNewData;
+ m_MaxSize = newSize;
+ }
+#if _DEBUG
+ m_pCastData = (T*) m_pData;
+#endif // _DEBUG
+ return S_OK;
+ }
+
+public:
+ HRESULT m_hLastError;
+
+ CEffectVector<T>()
+ {
+ m_hLastError = S_OK;
+#if _DEBUG
+ m_pCastData = NULL;
+#endif // _DEBUG
+ m_pData = NULL;
+ m_CurSize = m_MaxSize = 0;
+ }
+
+ ~CEffectVector<T>()
+ {
+ Clear();
+ }
+
+ // cleanly swaps two vectors -- useful for when you want
+ // to reallocate a vector and copy data over, then swap them back
+ void SwapVector(CEffectVector<T> &vOther)
+ {
+ BYTE tempData[sizeof(*this)];
+
+ memcpy(tempData, this, sizeof(*this));
+ memcpy(this, &vOther, sizeof(*this));
+ memcpy(&vOther, tempData, sizeof(*this));
+ }
+
+ HRESULT CopyFrom(CEffectVector<T> &vOther)
+ {
+ HRESULT hr = S_OK;
+ Clear();
+ VN( m_pData = NEW BYTE[vOther.m_MaxSize * sizeof(T)] );
+
+ m_CurSize = vOther.m_CurSize;
+ m_MaxSize = vOther.m_MaxSize;
+ m_hLastError = vOther.m_hLastError;
+
+ UINT i;
+ for (i = 0; i < m_CurSize; ++ i)
+ {
+ ((T*)m_pData)[i] = ((T*)vOther.m_pData)[i];
+ }
+
+lExit:
+
+#if _DEBUG
+ m_pCastData = (T*) m_pData;
+#endif // _DEBUG
+
+ return hr;
+ }
+
+ void Clear()
+ {
+ Empty();
+ SAFE_DELETE_ARRAY(m_pData);
+ m_MaxSize = 0;
+#if _DEBUG
+ m_pCastData = NULL;
+#endif // _DEBUG
+ }
+
+ void ClearWithoutDestructor()
+ {
+ m_CurSize = 0;
+ m_hLastError = S_OK;
+ SAFE_DELETE_ARRAY(m_pData);
+ m_MaxSize = 0;
+
+#if _DEBUG
+ m_pCastData = NULL;
+#endif // _DEBUG
+ }
+
+ void Empty()
+ {
+ UINT i;
+
+ // manually invoke destructor on all elements
+ for (i = 0; i < m_CurSize; ++ i)
+ {
+ ((T*)m_pData + i)->~T();
+ }
+ m_CurSize = 0;
+ m_hLastError = S_OK;
+ }
+
+ T* Add()
+ {
+ if (FAILED(Grow()))
+ return NULL;
+
+ // placement new
+ return new((T*)m_pData + (m_CurSize ++)) T;
+ }
+
+ T* AddRange(UINT count)
+ {
+ if (m_CurSize + count < m_CurSize)
+ {
+ m_hLastError = E_OUTOFMEMORY;
+ return NULL;
+ }
+
+ if (FAILED(Reserve(m_CurSize + count)))
+ return NULL;
+
+ T *pData = (T*)m_pData + m_CurSize;
+ UINT i;
+ for (i = 0; i < count; ++ i)
+ {
+ new(pData + i) T;
+ }
+ m_CurSize += count;
+ return pData;
+ }
+
+ HRESULT Add(const T& var)
+ {
+ if (FAILED(Grow()))
+ return m_hLastError;
+
+ memcpy((T*)m_pData + m_CurSize, &var, sizeof(T));
+ m_CurSize++;
+
+ return S_OK;
+ }
+
+ HRESULT AddRange(const T *pVar, UINT count)
+ {
+ if (m_CurSize + count < m_CurSize)
+ {
+ m_hLastError = E_OUTOFMEMORY;
+ return m_hLastError;
+ }
+
+ if (FAILED(Reserve(m_CurSize + count)))
+ return m_hLastError;
+
+ memcpy((T*)m_pData + m_CurSize, pVar, count * sizeof(T));
+ m_CurSize += count;
+
+ return S_OK;
+ }
+
+ HRESULT Insert(const T& var, UINT index)
+ {
+ D3DXASSERT(index < m_CurSize);
+
+ if (FAILED(Grow()))
+ return m_hLastError;
+
+ memmove((T*)m_pData + index + 1, (T*)m_pData + index, (m_CurSize - index) * sizeof(T));
+ memcpy((T*)m_pData + index, &var, sizeof(T));
+ m_CurSize++;
+
+ return S_OK;
+ }
+
+ HRESULT InsertRange(const T *pVar, UINT index, UINT count)
+ {
+ D3DXASSERT(index < m_CurSize);
+
+ if (m_CurSize + count < m_CurSize)
+ {
+ m_hLastError = E_OUTOFMEMORY;
+ return m_hLastError;
+ }
+
+ if (FAILED(Reserve(m_CurSize + count)))
+ return m_hLastError;
+
+ memmove((T*)m_pData + index + count, (T*)m_pData + index, (m_CurSize - index) * sizeof(T));
+ memcpy((T*)m_pData + index, pVar, count * sizeof(T));
+ m_CurSize += count;
+
+ return S_OK;
+ }
+
+ inline T& operator[](UINT index)
+ {
+ D3DXASSERT(index < m_CurSize);
+ return ((T*)m_pData)[index];
+ }
+
+ // Deletes element at index and shifts all other values down
+ void Delete(UINT index)
+ {
+ D3DXASSERT(index < m_CurSize);
+
+ -- m_CurSize;
+ memmove((T*)m_pData + index, (T*)m_pData + index + 1, (m_CurSize - index) * sizeof(T));
+ }
+
+ // Deletes element at index and moves the last element into its place
+ void QuickDelete(UINT index)
+ {
+ D3DXASSERT(index < m_CurSize);
+
+ -- m_CurSize;
+ memcpy((T*)m_pData + index, (T*)m_pData + m_CurSize, sizeof(T));
+ }
+
+ inline UINT GetSize() const
+ {
+ return m_CurSize;
+ }
+
+ inline T* GetData() const
+ {
+ return (T*)m_pData;
+ }
+
+ UINT FindIndexOf(void *pEntry) const
+ {
+ UINT i;
+
+ for (i = 0; i < m_CurSize; ++ i)
+ {
+ if (((T*)m_pData + i) == pEntry)
+ return i;
+ }
+
+ return -1;
+ }
+
+ void Sort(int (__cdecl *pfnCompare)(const void *pElem1, const void *pElem2))
+ {
+ qsort(m_pData, m_CurSize, sizeof(T), pfnCompare);
+ }
+};
+
+//////////////////////////////////////////////////////////////////////////
+// CEffectVectorOwner - implements a vector of ptrs to objects. The vector owns the objects.
+//////////////////////////////////////////////////////////////////////////
+template<class T> class CEffectVectorOwner : public CEffectVector<T*>
+{
+public:
+ ~CEffectVectorOwner<T>()
+ {
+ Clear();
+ UINT i;
+
+ for (i=0; i<m_CurSize; i++)
+ SAFE_DELETE(((T**)m_pData)[i]);
+
+ SAFE_DELETE_ARRAY(m_pData);
+ }
+
+ void Clear()
+ {
+ Empty();
+ SAFE_DELETE_ARRAY(m_pData);
+ m_MaxSize = 0;
+ }
+
+ void Empty()
+ {
+ UINT i;
+
+ // manually invoke destructor on all elements
+ for (i = 0; i < m_CurSize; ++ i)
+ {
+ SAFE_DELETE(((T**)m_pData)[i]);
+ }
+ m_CurSize = 0;
+ m_hLastError = S_OK;
+ }
+
+ void Delete(UINT index)
+ {
+ D3DXASSERT(index < m_CurSize);
+
+ SAFE_DELETE(((T**)m_pData)[index]);
+
+ CEffectVector<T*>::Delete(index);
+ }
+};
+
+
+//////////////////////////////////////////////////////////////////////////
+// Checked UINT, DWORD64
+// Use CheckedNumber only with UINT and DWORD64
+//////////////////////////////////////////////////////////////////////////
+template <class T, T MaxValue> class CheckedNumber
+{
+ T m_Value;
+ BOOL m_bValid;
+
+public:
+ CheckedNumber<T, MaxValue>()
+ {
+ m_Value = 0;
+ m_bValid = TRUE;
+ }
+
+ CheckedNumber<T, MaxValue>(const T &value)
+ {
+ m_Value = value;
+ m_bValid = TRUE;
+ }
+
+ CheckedNumber<T, MaxValue>(const CheckedNumber<T, MaxValue> &value)
+ {
+ m_bValid = value.m_bValid;
+ m_Value = value.m_Value;
+ }
+
+ CheckedNumber<T, MaxValue> &operator+(const CheckedNumber<T, MaxValue> &other)
+ {
+ CheckedNumber<T, MaxValue> Res(*this);
+ return Res+=other;
+ }
+
+ CheckedNumber<T, MaxValue> &operator+=(const CheckedNumber<T, MaxValue> &other)
+ {
+ if (!other.m_bValid)
+ {
+ m_bValid = FALSE;
+ }
+ else
+ {
+ m_Value += other.m_Value;
+
+ if (m_Value < other.m_Value)
+ m_bValid = FALSE;
+ }
+
+ return *this;
+ }
+
+ CheckedNumber<T, MaxValue> &operator*(const CheckedNumber<T, MaxValue> &other)
+ {
+ CheckedNumber<T, MaxValue> Res(*this);
+ return Res*=other;
+ }
+
+ CheckedNumber<T, MaxValue> &operator*=(const CheckedNumber<T, MaxValue> &other)
+ {
+ if (!other.m_bValid)
+ {
+ m_bValid = FALSE;
+ }
+ else
+ {
+ if (other.m_Value != 0)
+ {
+ if (m_Value > MaxValue / other.m_Value)
+ {
+ m_bValid = FALSE;
+ }
+ }
+ m_Value *= other.m_Value;
+ }
+
+ return *this;
+ }
+
+ HRESULT GetValue(T *pValue)
+ {
+ if (!m_bValid)
+ {
+ *pValue = -1;
+ return E_FAIL;
+ }
+
+ *pValue = m_Value;
+ return S_OK;
+ }
+};
+
+typedef CheckedNumber<UINT, _UI32_MAX> CCheckedDword;
+typedef CheckedNumber<DWORD64, _UI64_MAX> CCheckedDword64;
+
+
+//////////////////////////////////////////////////////////////////////////
+// Data Block Store - A linked list of allocations
+//////////////////////////////////////////////////////////////////////////
+
+class CDataBlock
+{
+protected:
+ UINT m_size;
+ UINT m_maxSize;
+ BYTE *m_pData;
+ CDataBlock *m_pNext;
+
+ BOOL m_IsAligned; // Whether or not to align the data to c_DataAlignment
+
+public:
+ // AddData appends an existing use buffer to the data block
+ HRESULT AddData(const void *pNewData, UINT bufferSize, CDataBlock **ppBlock);
+
+ // Allocate reserves bufferSize bytes of contiguous memory and returns a pointer to the user
+ void* Allocate(UINT bufferSize, CDataBlock **ppBlock);
+
+ void EnableAlignment();
+
+ CDataBlock();
+ ~CDataBlock();
+
+ friend class CDataBlockStore;
+};
+
+
+class CDataBlockStore
+{
+protected:
+ CDataBlock *m_pFirst;
+ CDataBlock *m_pLast;
+ UINT m_Size;
+ UINT m_Offset; // m_Offset gets added to offsets returned from AddData & AddString. Use this to set a global for the entire string block
+ BOOL m_IsAligned; // Whether or not to align the data to c_DataAlignment
+
+public:
+#if _DEBUG
+ UINT m_cAllocations;
+#endif
+
+public:
+ HRESULT AddString(LPCSTR pString, UINT *pOffset); // Writes a null-terminated string to buffer
+ HRESULT AddData(const void *pNewData, UINT bufferSize, UINT *pOffset); // Writes data block to buffer
+
+ void* Allocate(UINT buffferSize); // Memory allocator support
+ UINT GetSize();
+ void EnableAlignment();
+
+ CDataBlockStore();
+ ~CDataBlockStore();
+};
+
+// Custom allocator that uses CDataBlockStore
+// The trick is that we never free, so we don't have to keep as much state around
+// Use PRIVATENEW in CEffectLoader
+
+static void* __cdecl operator new(size_t s, CDataBlockStore &pAllocator)
+{
+ D3DXASSERT( s <= 0xffffffff );
+ return pAllocator.Allocate( (UINT)s );
+}
+
+static void __cdecl operator delete(void* p, CDataBlockStore &pAllocator)
+{
+}
+
+
+//////////////////////////////////////////////////////////////////////////
+// Hash table
+//////////////////////////////////////////////////////////////////////////
+
+#define HASH_MIX(a,b,c) \
+{ \
+ a -= b; a -= c; a ^= (c>>13); \
+ b -= c; b -= a; b ^= (a<<8); \
+ c -= a; c -= b; c ^= (b>>13); \
+ a -= b; a -= c; a ^= (c>>12); \
+ b -= c; b -= a; b ^= (a<<16); \
+ c -= a; c -= b; c ^= (b>>5); \
+ a -= b; a -= c; a ^= (c>>3); \
+ b -= c; b -= a; b ^= (a<<10); \
+ c -= a; c -= b; c ^= (b>>15); \
+}
+
+static UINT ComputeHash(BYTE *pb, UINT cbToHash)
+{
+ UINT a;
+ UINT b;
+ UINT c;
+ UINT cbLeft;
+
+ cbLeft = cbToHash;
+
+ a = b = 0x9e3779b9; // the golden ratio; an arbitrary value
+ c = 0;
+
+ while (cbLeft >= 12)
+ {
+ UINT *pdw = reinterpret_cast<UINT *>(pb);
+
+ a += pdw[0];
+ b += pdw[1];
+ c += pdw[2];
+
+ HASH_MIX(a,b,c);
+ pb += 12;
+ cbLeft -= 12;
+ }
+
+ c += cbToHash;
+
+ switch(cbLeft) // all the case statements fall through
+ {
+ case 11: c+=((UINT) pb[10] << 24);
+ case 10: c+=((UINT) pb[9] << 16);
+ case 9 : c+=((UINT) pb[8] << 8);
+ // the first byte of c is reserved for the length
+ case 8 : b+=((UINT) pb[7] << 24);
+ case 7 : b+=((UINT) pb[6] << 16);
+ case 6 : b+=((UINT) pb[5] << 8);
+ case 5 : b+=pb[4];
+ case 4 : a+=((UINT) pb[3] << 24);
+ case 3 : a+=((UINT) pb[2] << 16);
+ case 2 : a+=((UINT) pb[1] << 8);
+ case 1 : a+=pb[0];
+ }
+
+ HASH_MIX(a,b,c);
+
+ return c;
+}
+
+static UINT ComputeHashLower(BYTE *pb, UINT cbToHash)
+{
+ UINT a;
+ UINT b;
+ UINT c;
+ UINT cbLeft;
+
+ cbLeft = cbToHash;
+
+ a = b = 0x9e3779b9; // the golden ratio; an arbitrary value
+ c = 0;
+
+ while (cbLeft >= 12)
+ {
+ BYTE pbT[12];
+ for( UINT i = 0; i < 12; i++ )
+ pbT[i] = (BYTE)tolower(pb[i]);
+
+ UINT *pdw = reinterpret_cast<UINT *>(pbT);
+
+ a += pdw[0];
+ b += pdw[1];
+ c += pdw[2];
+
+ HASH_MIX(a,b,c);
+ pb += 12;
+ cbLeft -= 12;
+ }
+
+ c += cbToHash;
+
+ BYTE pbT[12];
+ for( UINT i = 0; i < cbLeft; i++ )
+ pbT[i] = (BYTE)tolower(pb[i]);
+
+ switch(cbLeft) // all the case statements fall through
+ {
+ case 11: c+=((UINT) pbT[10] << 24);
+ case 10: c+=((UINT) pbT[9] << 16);
+ case 9 : c+=((UINT) pbT[8] << 8);
+ // the first byte of c is reserved for the length
+ case 8 : b+=((UINT) pbT[7] << 24);
+ case 7 : b+=((UINT) pbT[6] << 16);
+ case 6 : b+=((UINT) pbT[5] << 8);
+ case 5 : b+=pbT[4];
+ case 4 : a+=((UINT) pbT[3] << 24);
+ case 3 : a+=((UINT) pbT[2] << 16);
+ case 2 : a+=((UINT) pbT[1] << 8);
+ case 1 : a+=pbT[0];
+ }
+
+ HASH_MIX(a,b,c);
+
+ return c;
+}
+
+
+static UINT ComputeHash(LPCSTR pString)
+{
+ return ComputeHash((BYTE*) pString, (UINT)strlen(pString));
+}
+
+
+// 1) these numbers are prime
+// 2) each is slightly less than double the last
+// 4) each is roughly in between two powers of 2;
+// (2^n hash table sizes are VERY BAD; they effectively truncate your
+// precision down to the n least significant bits of the hash)
+static const UINT c_PrimeSizes[] =
+{
+ 11,
+ 23,
+ 53,
+ 97,
+ 193,
+ 389,
+ 769,
+ 1543,
+ 3079,
+ 6151,
+ 12289,
+ 24593,
+ 49157,
+ 98317,
+ 196613,
+ 393241,
+ 786433,
+ 1572869,
+ 3145739,
+ 6291469,
+ 12582917,
+ 25165843,
+ 50331653,
+ 100663319,
+ 201326611,
+ 402653189,
+ 805306457,
+ 1610612741,
+};
+
+static const UINT c_NumPrimes = sizeof(c_PrimeSizes) / sizeof(UINT);
+
+template<typename T, BOOL (*pfnIsEqual)(const T &Data1, const T &Data2)>
+class CEffectHashTable
+{
+protected:
+
+ struct SHashEntry
+ {
+ UINT Hash;
+ T Data;
+ SHashEntry *pNext;
+ };
+
+ // Array of hash entries
+ SHashEntry **m_rgpHashEntries;
+ UINT m_NumHashSlots;
+ UINT m_NumEntries;
+ bool m_bOwnHashEntryArray;
+
+public:
+ class CIterator
+ {
+ friend class CEffectHashTable;
+
+ protected:
+ SHashEntry **ppHashSlot;
+ SHashEntry *pHashEntry;
+
+ public:
+ T GetData()
+ {
+ D3DXASSERT(NULL != pHashEntry);
+ return pHashEntry->Data;
+ }
+
+ UINT GetHash()
+ {
+ D3DXASSERT(NULL != pHashEntry);
+ return pHashEntry->Hash;
+ }
+ };
+
+ CEffectHashTable()
+ {
+ m_rgpHashEntries = NULL;
+ m_NumHashSlots = 0;
+ m_NumEntries = 0;
+ m_bOwnHashEntryArray = false;
+ }
+
+ HRESULT Initialize(CEffectHashTable *pOther)
+ {
+ HRESULT hr = S_OK;
+ SHashEntry **rgpNewHashEntries = NULL;
+ SHashEntry ***rgppListEnds = NULL;
+ UINT i;
+ UINT valuesMigrated = 0;
+ UINT actualSize;
+
+ Cleanup();
+
+ actualSize = pOther->m_NumHashSlots;
+ VN( rgpNewHashEntries = NEW SHashEntry*[actualSize] );
+
+ ZeroMemory(rgpNewHashEntries, sizeof(SHashEntry*) * actualSize);
+
+ // Expensive operation: rebuild the hash table
+ CIterator iter, nextIter;
+ pOther->GetFirstEntry(&iter);
+ while (!pOther->PastEnd(&iter))
+ {
+ UINT index = iter.GetHash() % actualSize;
+
+ // we need to advance to the next element
+ // before we seize control of this element and move
+ // it to the new table
+ nextIter = iter;
+ pOther->GetNextEntry(&nextIter);
+
+ // seize this hash entry, migrate it to the new table
+ SHashEntry *pNewEntry;
+ VN( pNewEntry = NEW SHashEntry );
+
+ pNewEntry->pNext = rgpNewHashEntries[index];
+ pNewEntry->Data = iter.pHashEntry->Data;
+ pNewEntry->Hash = iter.pHashEntry->Hash;
+ rgpNewHashEntries[index] = pNewEntry;
+
+ iter = nextIter;
+ ++ valuesMigrated;
+ }
+
+ D3DXASSERT(valuesMigrated == pOther->m_NumEntries);
+
+ m_rgpHashEntries = rgpNewHashEntries;
+ m_NumHashSlots = actualSize;
+ m_NumEntries = pOther->m_NumEntries;
+ m_bOwnHashEntryArray = true;
+ rgpNewHashEntries = NULL;
+
+lExit:
+ SAFE_DELETE_ARRAY( rgpNewHashEntries );
+ return hr;
+ }
+
+protected:
+ void CleanArray()
+ {
+ if (m_bOwnHashEntryArray)
+ {
+ SAFE_DELETE_ARRAY(m_rgpHashEntries);
+ m_bOwnHashEntryArray = false;
+ }
+ }
+
+public:
+ void Cleanup()
+ {
+ UINT i;
+ for (i = 0; i < m_NumHashSlots; ++ i)
+ {
+ SHashEntry *pCurrentEntry = m_rgpHashEntries[i];
+ SHashEntry *pTempEntry;
+ while (NULL != pCurrentEntry)
+ {
+ pTempEntry = pCurrentEntry->pNext;
+ SAFE_DELETE(pCurrentEntry);
+ pCurrentEntry = pTempEntry;
+ -- m_NumEntries;
+ }
+ }
+ CleanArray();
+ m_NumHashSlots = 0;
+ D3DXASSERT(m_NumEntries == 0);
+ }
+
+ ~CEffectHashTable()
+ {
+ Cleanup();
+ }
+
+ static UINT GetNextHashTableSize(__in UINT DesiredSize)
+ {
+ // figure out the next logical size to use
+ for (UINT i = 0; i < c_NumPrimes; ++ i)
+ {
+ if (c_PrimeSizes[i] >= DesiredSize)
+ {
+ return c_PrimeSizes[i];
+ }
+ }
+
+ return DesiredSize;
+ }
+
+ // O(n) function
+ // Grows to the next suitable size (based off of the prime number table)
+ // DesiredSize is merely a suggestion
+ HRESULT Grow(__in UINT DesiredSize,
+ __in UINT ProvidedArraySize = 0,
+ __in_ecount_opt(ProvidedArraySize)
+ void** ProvidedArray = NULL,
+ __in bool OwnProvidedArray = false)
+ {
+ HRESULT hr = S_OK;
+ SHashEntry **rgpNewHashEntries = NULL;
+ SHashEntry ***rgppListEnds = NULL;
+ UINT valuesMigrated = 0;
+ UINT actualSize;
+
+ VB( DesiredSize > m_NumHashSlots );
+
+ actualSize = GetNextHashTableSize(DesiredSize);
+
+ if (ProvidedArray &&
+ ProvidedArraySize >= actualSize)
+ {
+ rgpNewHashEntries = reinterpret_cast<SHashEntry**>(ProvidedArray);
+ }
+ else
+ {
+ OwnProvidedArray = true;
+
+ VN( rgpNewHashEntries = NEW SHashEntry*[actualSize] );
+ }
+
+ ZeroMemory(rgpNewHashEntries, sizeof(SHashEntry*) * actualSize);
+
+ // Expensive operation: rebuild the hash table
+ CIterator iter, nextIter;
+ GetFirstEntry(&iter);
+ while (!PastEnd(&iter))
+ {
+ UINT index = iter.GetHash() % actualSize;
+
+ // we need to advance to the next element
+ // before we seize control of this element and move
+ // it to the new table
+ nextIter = iter;
+ GetNextEntry(&nextIter);
+
+ // seize this hash entry, migrate it to the new table
+ iter.pHashEntry->pNext = rgpNewHashEntries[index];
+ rgpNewHashEntries[index] = iter.pHashEntry;
+
+ iter = nextIter;
+ ++ valuesMigrated;
+ }
+
+ D3DXASSERT(valuesMigrated == m_NumEntries);
+
+ CleanArray();
+ m_rgpHashEntries = rgpNewHashEntries;
+ m_NumHashSlots = actualSize;
+ m_bOwnHashEntryArray = OwnProvidedArray;
+
+lExit:
+ return hr;
+ }
+
+ HRESULT AutoGrow()
+ {
+ // arbitrary heuristic -- grow if 1:1
+ if (m_NumEntries >= m_NumHashSlots)
+ {
+ // grows this hash table so that it is roughly 50% full
+ return Grow(m_NumEntries * 2 + 1);
+ }
+ return S_OK;
+ }
+
+#if _DEBUG
+ void PrintHashTableStats()
+ {
+ if (m_NumHashSlots == 0)
+ {
+ DPF(0, "Uninitialized hash table!");
+ return;
+ }
+
+ UINT i;
+ float variance = 0.0f;
+ float mean = (float)m_NumEntries / (float)m_NumHashSlots;
+ UINT unusedSlots = 0;
+
+ DPF(0, "Hash table slots: %d, Entries in table: %d", m_NumHashSlots, m_NumEntries);
+
+ for (i = 0; i < m_NumHashSlots; ++ i)
+ {
+ UINT entries = 0;
+ SHashEntry *pCurrentEntry = m_rgpHashEntries[i];
+
+ while (NULL != pCurrentEntry)
+ {
+ SHashEntry *pCurrentEntry2 = m_rgpHashEntries[i];
+
+ // check other hash entries in this slot for hash collisions or duplications
+ while (pCurrentEntry2 != pCurrentEntry)
+ {
+ if (pCurrentEntry->Hash == pCurrentEntry2->Hash)
+ {
+ if (pfnIsEqual(pCurrentEntry->Data, pCurrentEntry2->Data))
+ {
+ D3DXASSERT(0);
+ DPF(0, "Duplicate entry (identical hash, identical data) found!");
+ }
+ else
+ {
+ DPF(0, "Hash collision (hash: %d)", pCurrentEntry->Hash);
+ }
+ }
+ pCurrentEntry2 = pCurrentEntry2->pNext;
+ }
+
+ pCurrentEntry = pCurrentEntry->pNext;
+ ++ entries;
+ }
+
+ if (0 == entries)
+ {
+ ++ unusedSlots;
+ }
+
+ // mean must be greater than 0 at this point
+ variance += (float)entries * (float)entries / mean;
+ }
+
+ variance /= max(1.0f, (m_NumHashSlots - 1));
+ variance -= (mean * mean);
+
+ DPF(0, "Mean number of entries per slot: %f, Standard deviation: %f, Unused slots; %d", mean, variance, unusedSlots);
+ }
+#endif // _DEBUG
+
+ // S_OK if element is found, E_FAIL otherwise
+ HRESULT FindValueWithHash(T Data, UINT Hash, CIterator *pIterator)
+ {
+ D3DXASSERT(m_NumHashSlots > 0);
+
+ UINT index = Hash % m_NumHashSlots;
+ SHashEntry *pEntry = m_rgpHashEntries[index];
+ while (NULL != pEntry)
+ {
+ if (Hash == pEntry->Hash && pfnIsEqual(pEntry->Data, Data))
+ {
+ pIterator->ppHashSlot = m_rgpHashEntries + index;
+ pIterator->pHashEntry = pEntry;
+ return S_OK;
+ }
+ pEntry = pEntry->pNext;
+ }
+ return E_FAIL;
+ }
+
+ // S_OK if element is found, E_FAIL otherwise
+ HRESULT FindFirstMatchingValue(UINT Hash, CIterator *pIterator)
+ {
+ D3DXASSERT(m_NumHashSlots > 0);
+
+ UINT index = Hash % m_NumHashSlots;
+ SHashEntry *pEntry = m_rgpHashEntries[index];
+ while (NULL != pEntry)
+ {
+ if (Hash == pEntry->Hash)
+ {
+ pIterator->ppHashSlot = m_rgpHashEntries + index;
+ pIterator->pHashEntry = pEntry;
+ return S_OK;
+ }
+ pEntry = pEntry->pNext;
+ }
+ return E_FAIL;
+ }
+
+ // Adds data at the specified hash slot without checking for existence
+ HRESULT AddValueWithHash(T Data, UINT Hash)
+ {
+ HRESULT hr = S_OK;
+
+ D3DXASSERT(m_NumHashSlots > 0);
+
+ SHashEntry *pHashEntry;
+ UINT index = Hash % m_NumHashSlots;
+
+ VN( pHashEntry = NEW SHashEntry );
+ pHashEntry->pNext = m_rgpHashEntries[index];
+ pHashEntry->Data = Data;
+ pHashEntry->Hash = Hash;
+ m_rgpHashEntries[index] = pHashEntry;
+
+ ++ m_NumEntries;
+
+lExit:
+ return hr;
+ }
+
+ // Iterator code:
+ //
+ // CMyHashTable::CIterator myIt;
+ // for (myTable.GetFirstEntry(&myIt); !myTable.PastEnd(&myIt); myTable.GetNextEntry(&myIt)
+ // { myTable.GetData(&myIt); }
+ void GetFirstEntry(CIterator *pIterator)
+ {
+ SHashEntry **ppEnd = m_rgpHashEntries + m_NumHashSlots;
+ pIterator->ppHashSlot = m_rgpHashEntries;
+ while (pIterator->ppHashSlot < ppEnd)
+ {
+ if (NULL != *(pIterator->ppHashSlot))
+ {
+ pIterator->pHashEntry = *(pIterator->ppHashSlot);
+ return;
+ }
+ ++ pIterator->ppHashSlot;
+ }
+ }
+
+ BOOL PastEnd(CIterator *pIterator)
+ {
+ SHashEntry **ppEnd = m_rgpHashEntries + m_NumHashSlots;
+ D3DXASSERT(pIterator->ppHashSlot >= m_rgpHashEntries && pIterator->ppHashSlot <= ppEnd);
+ return (pIterator->ppHashSlot == ppEnd);
+ }
+
+ void GetNextEntry(CIterator *pIterator)
+ {
+ SHashEntry **ppEnd = m_rgpHashEntries + m_NumHashSlots;
+ D3DXASSERT(pIterator->ppHashSlot >= m_rgpHashEntries && pIterator->ppHashSlot <= ppEnd);
+ D3DXASSERT(NULL != pIterator->pHashEntry);
+
+ pIterator->pHashEntry = pIterator->pHashEntry->pNext;
+ if (NULL != pIterator->pHashEntry)
+ {
+ return;
+ }
+
+ ++ pIterator->ppHashSlot;
+ while (pIterator->ppHashSlot < ppEnd)
+ {
+ pIterator->pHashEntry = *(pIterator->ppHashSlot);
+ if (NULL != pIterator->pHashEntry)
+ {
+ return;
+ }
+ ++ pIterator->ppHashSlot;
+ }
+ // hit the end of the list, ppHashSlot == ppEnd
+ }
+
+ void RemoveEntry(CIterator *pIterator)
+ {
+ SHashEntry *pTemp;
+ SHashEntry **ppPrev;
+ SHashEntry **ppEnd = m_rgpHashEntries + m_NumHashSlots;
+
+ D3DXASSERT(pIterator && !PastEnd(pIterator));
+ ppPrev = pIterator->ppHashSlot;
+ pTemp = *ppPrev;
+ while (pTemp)
+ {
+ if (pTemp == pIterator->pHashEntry)
+ {
+ *ppPrev = pTemp->pNext;
+ pIterator->ppHashSlot = ppEnd;
+ delete pTemp;
+ return;
+ }
+ ppPrev = &pTemp->pNext;
+ pTemp = pTemp->pNext;
+ }
+
+ // Should never get here
+ D3DXASSERT(0);
+ }
+
+};
+
+// Allocates the hash slots on the regular heap (since the
+// hash table can grow), but all hash entries are allocated on
+// a private heap
+
+template<typename T, BOOL (*pfnIsEqual)(const T &Data1, const T &Data2)>
+class CEffectHashTableWithPrivateHeap : public CEffectHashTable<T, pfnIsEqual>
+{
+protected:
+ CDataBlockStore *m_pPrivateHeap;
+
+public:
+ CEffectHashTableWithPrivateHeap()
+ {
+ m_pPrivateHeap = NULL;
+ }
+
+ void Cleanup()
+ {
+ CleanArray();
+ m_NumHashSlots = 0;
+ m_NumEntries = 0;
+ }
+
+ ~CEffectHashTableWithPrivateHeap()
+ {
+ Cleanup();
+ }
+
+ // Call this only once
+ void SetPrivateHeap(CDataBlockStore *pPrivateHeap)
+ {
+ D3DXASSERT(NULL == m_pPrivateHeap);
+ m_pPrivateHeap = pPrivateHeap;
+ }
+
+ // Adds data at the specified hash slot without checking for existence
+ HRESULT AddValueWithHash(T Data, UINT Hash)
+ {
+ HRESULT hr = S_OK;
+
+ D3DXASSERT(NULL != m_pPrivateHeap);
+ D3DXASSERT(m_NumHashSlots > 0);
+
+ SHashEntry *pHashEntry;
+ UINT index = Hash % m_NumHashSlots;
+
+ VN( pHashEntry = new(*m_pPrivateHeap) SHashEntry );
+ pHashEntry->pNext = m_rgpHashEntries[index];
+ pHashEntry->Data = Data;
+ pHashEntry->Hash = Hash;
+ m_rgpHashEntries[index] = pHashEntry;
+
+ ++ m_NumEntries;
+
+lExit:
+ return hr;
+ }
+};