OSDN Git Service

Merge branch 'feature/#36529_SlimDXからSharpDXへの移行' into develop
[dtxmania/dtxmania.git] / SlimDXc_Jun2010(VC++2008) / external / Effects11 / EffectReflection.cpp
diff --git a/SlimDXc_Jun2010(VC++2008)/external/Effects11/EffectReflection.cpp b/SlimDXc_Jun2010(VC++2008)/external/Effects11/EffectReflection.cpp
deleted file mode 100644 (file)
index af0e33f..0000000
+++ /dev/null
@@ -1,2151 +0,0 @@
-//////////////////////////////////////////////////////////////////////////////\r
-//\r
-//  Copyright (C) Microsoft Corporation.  All Rights Reserved.\r
-//\r
-//  File:       EffectReflection.cpp\r
-//  Content:    D3DX11 Effects public reflection APIs\r
-//\r
-//////////////////////////////////////////////////////////////////////////////\r
-\r
-#include "pchfx.h"\r
-\r
-namespace D3DX11Effects\r
-{\r
-\r
-SEffectInvalidType g_InvalidType;\r
-\r
-SEffectInvalidScalarVariable g_InvalidScalarVariable;\r
-SEffectInvalidVectorVariable g_InvalidVectorVariable;\r
-SEffectInvalidMatrixVariable g_InvalidMatrixVariable;\r
-SEffectInvalidStringVariable g_InvalidStringVariable;\r
-SEffectInvalidClassInstanceVariable g_InvalidClassInstanceVariable;\r
-SEffectInvalidInterfaceVariable g_InvalidInterfaceVariable;\r
-SEffectInvalidShaderResourceVariable g_InvalidShaderResourceVariable;\r
-SEffectInvalidUnorderedAccessViewVariable g_InvalidUnorderedAccessViewVariable;\r
-SEffectInvalidRenderTargetViewVariable g_InvalidRenderTargetViewVariable;\r
-SEffectInvalidDepthStencilViewVariable g_InvalidDepthStencilViewVariable;\r
-SEffectInvalidConstantBuffer g_InvalidConstantBuffer;\r
-SEffectInvalidShaderVariable g_InvalidShaderVariable;\r
-SEffectInvalidBlendVariable g_InvalidBlendVariable;\r
-SEffectInvalidDepthStencilVariable g_InvalidDepthStencilVariable;\r
-SEffectInvalidRasterizerVariable g_InvalidRasterizerVariable;\r
-SEffectInvalidSamplerVariable g_InvalidSamplerVariable;\r
-\r
-SEffectInvalidPass g_InvalidPass;\r
-SEffectInvalidTechnique g_InvalidTechnique;\r
-SEffectInvalidGroup g_InvalidGroup;\r
-\r
-\r
-//////////////////////////////////////////////////////////////////////////\r
-// Helper routine implementations\r
-//////////////////////////////////////////////////////////////////////////\r
-\r
-ID3DX11EffectConstantBuffer * NoParentCB()\r
-{\r
-    DPF(0, "ID3DX11EffectVariable::GetParentConstantBuffer: Variable does not have a parent constant buffer");\r
-    // have to typecast because the type of g_InvalidScalarVariable has not been declared yet\r
-    return &g_InvalidConstantBuffer;\r
-}\r
-\r
-ID3DX11EffectVariable * GetAnnotationByIndexHelper(const char *pClassName, UINT  Index, UINT  AnnotationCount, SAnnotation *pAnnotations)\r
-{\r
-    if (Index >= AnnotationCount)\r
-    {\r
-        DPF(0, "%s::GetAnnotationByIndex: Invalid index (%d, total: %d)", pClassName, Index, AnnotationCount);\r
-        return &g_InvalidScalarVariable;\r
-    }\r
-\r
-    return pAnnotations + Index;\r
-}\r
-\r
-ID3DX11EffectVariable * GetAnnotationByNameHelper(const char *pClassName, LPCSTR Name, UINT  AnnotationCount, SAnnotation *pAnnotations)\r
-{\r
-    UINT  i;\r
-    for (i = 0; i < AnnotationCount; ++ i)\r
-    {\r
-        if (strcmp(pAnnotations[i].pName, Name) == 0)\r
-        {\r
-            return pAnnotations + i;\r
-        }\r
-    }\r
-\r
-    DPF(0, "%s::GetAnnotationByName: Annotation [%s] not found", pClassName, Name);\r
-    return &g_InvalidScalarVariable;\r
-}\r
-\r
-//////////////////////////////////////////////////////////////////////////\r
-// Effect routines to pool interfaces\r
-//////////////////////////////////////////////////////////////////////////\r
-\r
-ID3DX11EffectType * CEffect::CreatePooledSingleElementTypeInterface(SType *pType)\r
-{\r
-    UINT  i;\r
-\r
-    if (IsOptimized())\r
-    {\r
-        DPF(0, "ID3DX11Effect: Cannot create new type interfaces since the effect has been Optimize()'ed");\r
-        return &g_InvalidType;\r
-    }\r
-\r
-    for (i = 0; i < m_pTypeInterfaces.GetSize(); ++ i)\r
-    {\r
-        if (m_pTypeInterfaces[i]->pType == pType)\r
-        {\r
-            return (SSingleElementType*)m_pTypeInterfaces[i];\r
-        }\r
-    }\r
-    SSingleElementType *pNewType;\r
-    if (NULL == (pNewType = NEW SSingleElementType))\r
-    {\r
-        DPF(0, "ID3DX11Effect: Out of memory while trying to create new type interface");\r
-        return &g_InvalidType;\r
-    }\r
-\r
-    pNewType->pType = pType;\r
-    m_pTypeInterfaces.Add(pNewType);\r
-\r
-    return pNewType;\r
-}\r
-\r
-// Create a member variable (via GetMemberBy* or GetElement)\r
-ID3DX11EffectVariable * CEffect::CreatePooledVariableMemberInterface(TTopLevelVariable<ID3DX11EffectVariable> *pTopLevelEntity, SVariable *pMember, UDataPointer Data, BOOL IsSingleElement, UINT Index)\r
-{\r
-    BOOL IsAnnotation;\r
-    UINT  i;\r
-\r
-    if (IsOptimized())\r
-    {\r
-        DPF(0, "ID3DX11Effect: Cannot create new variable interfaces since the effect has been Optimize()'ed");\r
-        return &g_InvalidScalarVariable;\r
-    }\r
-\r
-    for (i = 0; i < m_pMemberInterfaces.GetSize(); ++ i)\r
-    {\r
-        if (m_pMemberInterfaces[i]->pType == pMember->pType && \r
-            m_pMemberInterfaces[i]->pName == pMember->pName &&\r
-            m_pMemberInterfaces[i]->pSemantic == pMember->pSemantic &&\r
-            m_pMemberInterfaces[i]->Data.pGeneric == Data.pGeneric &&\r
-            m_pMemberInterfaces[i]->IsSingleElement == IsSingleElement &&\r
-            ((SMember*)m_pMemberInterfaces[i])->pTopLevelEntity == pTopLevelEntity)\r
-        {\r
-            return (ID3DX11EffectVariable *) m_pMemberInterfaces[i];\r
-        }\r
-    }\r
-\r
-    // is this annotation or runtime data?\r
-    if( pTopLevelEntity->pEffect->IsReflectionData(pTopLevelEntity) )\r
-    {\r
-        D3DXASSERT( pTopLevelEntity->pEffect->IsReflectionData(Data.pGeneric) );\r
-        IsAnnotation = TRUE;\r
-    }\r
-    else\r
-    {\r
-        // if the heap is empty, we are still loading the Effect, and thus creating a member for a variable initializer\r
-        // ex. Interface myInt = myClassArray[2];\r
-        if( pTopLevelEntity->pEffect->m_Heap.GetSize() > 0 )\r
-        {\r
-            D3DXASSERT( pTopLevelEntity->pEffect->IsRuntimeData(pTopLevelEntity) );\r
-            if (!pTopLevelEntity->pType->IsObjectType(EOT_String))\r
-            {\r
-                // strings are funny; their data is reflection data, so ignore those\r
-                D3DXASSERT( pTopLevelEntity->pEffect->IsRuntimeData(Data.pGeneric) );\r
-            }\r
-        }\r
-        IsAnnotation = FALSE;\r
-    }\r
-\r
-    SMember *pNewMember;\r
-\r
-    if (NULL == (pNewMember = CreateNewMember((SType*)pMember->pType, IsAnnotation)))\r
-    {\r
-        DPF(0, "ID3DX11Effect: Out of memory while trying to create new member variable interface");\r
-        return &g_InvalidScalarVariable;\r
-    }\r
-    \r
-    pNewMember->pType = pMember->pType;\r
-    pNewMember->pName = pMember->pName;\r
-    pNewMember->pSemantic = pMember->pSemantic;\r
-    pNewMember->Data.pGeneric = Data.pGeneric;\r
-    pNewMember->IsSingleElement = IsSingleElement;\r
-    pNewMember->pTopLevelEntity = pTopLevelEntity;\r
-\r
-    if( IsSingleElement && pMember->pMemberData )\r
-    {\r
-        D3DXASSERT( !IsAnnotation );\r
-        // This is an element of a global variable array\r
-        pNewMember->pMemberData = pMember->pMemberData + Index;\r
-    }\r
-\r
-    if (FAILED(m_pMemberInterfaces.Add(pNewMember)))\r
-    {\r
-        SAFE_DELETE(pNewMember);\r
-        DPF(0, "ID3DX11Effect: Out of memory while trying to create new member variable interface");\r
-        return &g_InvalidScalarVariable;\r
-    }\r
-\r
-    return (ID3DX11EffectVariable *) pNewMember;\r
-}\r
-\r
-//////////////////////////////////////////////////////////////////////////\r
-// ID3DX11EffectType (SType, SSingleElementType implementations)\r
-//////////////////////////////////////////////////////////////////////////\r
-\r
-static ID3DX11EffectType * GetTypeByIndexHelper(UINT Index, UINT  VariableCount, \r
-                                               SVariable *pVariables, UINT  SizeOfVariableType)\r
-{\r
-    LPCSTR pFuncName = "ID3DX11EffectType::GetMemberTypeByIndex";\r
-\r
-    if (Index >= VariableCount)\r
-    {\r
-        DPF(0, "%s: Invalid index (%d, total: %d)", pFuncName, Index, VariableCount);\r
-        return &g_InvalidType;\r
-    }\r
-\r
-    SVariable *pVariable = (SVariable *)((BYTE *)pVariables + Index * SizeOfVariableType);\r
-    if (NULL == pVariable->pName)\r
-    {\r
-        DPF(0, "%s: Cannot get member types; Effect has been Optimize()'ed", pFuncName);\r
-        return &g_InvalidType;\r
-    }\r
-\r
-    return (ID3DX11EffectType *) pVariable->pType;\r
-}\r
-\r
-static ID3DX11EffectType * GetTypeByNameHelper(LPCSTR Name, UINT  VariableCount, \r
-                                              SVariable *pVariables, UINT  SizeOfVariableType)\r
-{\r
-    LPCSTR pFuncName = "ID3DX11EffectType::GetMemberTypeByName";\r
-\r
-    if (NULL == Name)\r
-    {\r
-        DPF(0, "%s: Parameter Name was NULL.", pFuncName);\r
-        return &g_InvalidType;\r
-    }\r
-\r
-    UINT  i;\r
-    SVariable *pVariable;\r
-\r
-    for (i = 0; i < VariableCount; ++ i)\r
-    {\r
-        pVariable = (SVariable *)((BYTE *)pVariables + i * SizeOfVariableType);\r
-        if (NULL == pVariable->pName)\r
-        {\r
-            DPF(0, "%s: Cannot get member types; Effect has been Optimize()'ed", pFuncName);\r
-            return &g_InvalidType;\r
-        }\r
-        if (strcmp(pVariable->pName, Name) == 0)\r
-        {\r
-            return (ID3DX11EffectType *) pVariable->pType;\r
-        }\r
-    }\r
-\r
-    DPF(0, "%s: Member type [%s] not found", pFuncName, Name);\r
-    return &g_InvalidType;\r
-}\r
-\r
-\r
-static ID3DX11EffectType * GetTypeBySemanticHelper(LPCSTR Semantic, UINT  VariableCount, \r
-                                                  SVariable *pVariables, UINT  SizeOfVariableType)\r
-{\r
-    LPCSTR pFuncName = "ID3DX11EffectType::GetMemberTypeBySemantic";\r
-\r
-    if (NULL == Semantic)\r
-    {\r
-        DPF(0, "%s: Parameter Semantic was NULL.", pFuncName);\r
-        return &g_InvalidType;\r
-    }\r
-\r
-    UINT  i;\r
-    SVariable *pVariable;\r
-\r
-    for (i = 0; i < VariableCount; ++ i)\r
-    {\r
-        pVariable = (SVariable *)((BYTE *)pVariables + i * SizeOfVariableType);\r
-        if (NULL == pVariable->pName)\r
-        {\r
-            DPF(0, "%s: Cannot get member types; Effect has been Optimize()'ed", pFuncName);\r
-            return &g_InvalidType;\r
-        }\r
-        if (NULL != pVariable->pSemantic &&\r
-            _stricmp(pVariable->pSemantic, Semantic) == 0)\r
-        {\r
-            return (ID3DX11EffectType *) pVariable->pType;\r
-        }\r
-    }\r
-\r
-    DPF(0, "%s: Member type with semantic [%s] not found", pFuncName, Semantic);\r
-    return &g_InvalidType;\r
-}\r
-\r
-ID3DX11EffectType * SType::GetMemberTypeByIndex(UINT Index)\r
-{\r
-    if (VarType != EVT_Struct)\r
-    {\r
-        DPF(0, "ID3DX11EffectType::GetMemberTypeByIndex: This interface does not refer to a structure");\r
-        return &g_InvalidType;\r
-    }\r
-\r
-    return GetTypeByIndexHelper(Index, StructType.Members, StructType.pMembers, sizeof(SVariable));\r
-}\r
-\r
-ID3DX11EffectType * SType::GetMemberTypeByName(LPCSTR Name)\r
-{\r
-    if (VarType != EVT_Struct)\r
-    {\r
-        DPF(0, "ID3DX11EffectType::GetMemberTypeByName: This interface does not refer to a structure");\r
-        return &g_InvalidType;\r
-    }\r
-\r
-    return GetTypeByNameHelper(Name, StructType.Members, StructType.pMembers, sizeof(SVariable));\r
-}\r
-\r
-ID3DX11EffectType * SType::GetMemberTypeBySemantic(LPCSTR Semantic)\r
-{\r
-    if (VarType != EVT_Struct)\r
-    {\r
-        DPF(0, "ID3DX11EffectType::GetMemberTypeBySemantic: This interface does not refer to a structure");\r
-        return &g_InvalidType;\r
-    }\r
-\r
-    return GetTypeBySemanticHelper(Semantic, StructType.Members, StructType.pMembers, sizeof(SVariable));\r
-}\r
-\r
-LPCSTR SType::GetMemberName(UINT Index)\r
-{\r
-    LPCSTR pFuncName = "ID3DX11EffectType::GetMemberName";\r
-\r
-    if (VarType != EVT_Struct)\r
-    {\r
-        DPF(0, "%s: This interface does not refer to a structure", pFuncName);\r
-        return NULL;\r
-    }\r
-\r
-    if (Index >= StructType.Members)\r
-    {\r
-        DPF(0, "%s: Invalid index (%d, total: %d)", pFuncName, Index, StructType.Members);\r
-        return NULL;\r
-    }\r
-\r
-    SVariable *pVariable = StructType.pMembers + Index;\r
-\r
-    if (NULL == pVariable->pName)\r
-    {\r
-        DPF(0, "%s: Cannot get member names; Effect has been Optimize()'ed", pFuncName);\r
-        return NULL;\r
-    }\r
-\r
-    return pVariable->pName;\r
-}\r
-\r
-LPCSTR SType::GetMemberSemantic(UINT Index)\r
-{\r
-    LPCSTR pFuncName = "ID3DX11EffectType::GetMemberSemantic";\r
-\r
-    if (VarType != EVT_Struct)\r
-    {\r
-        DPF(0, "%s: This interface does not refer to a structure", pFuncName);\r
-        return NULL;\r
-    }\r
-\r
-    if (Index >= StructType.Members)\r
-    {\r
-        DPF(0, "%s: Invalid index (%d, total: %d)", pFuncName, Index, StructType.Members);\r
-        return NULL;\r
-    }\r
-\r
-    SVariable *pVariable = StructType.pMembers + Index;\r
-\r
-    if (NULL == pVariable->pName)\r
-    {\r
-        DPF(0, "%s: Cannot get member semantics; Effect has been Optimize()'ed", pFuncName);\r
-        return NULL;\r
-    }\r
-\r
-    return pVariable->pSemantic;\r
-}\r
-\r
-HRESULT SType::GetDescHelper(D3DX11_EFFECT_TYPE_DESC *pDesc, BOOL IsSingleElement) const\r
-{\r
-    HRESULT hr = S_OK;\r
-    LPCSTR pFuncName = "ID3DX11EffectType::GetDesc";\r
-\r
-    VERIFYPARAMETER(pDesc);\r
-    \r
-    pDesc->TypeName = pTypeName;\r
-\r
-    // intentionally return 0 so they know it's not a single element array\r
-    pDesc->Elements = IsSingleElement ? 0 : Elements;\r
-    pDesc->PackedSize = GetTotalPackedSize(IsSingleElement);\r
-    pDesc->UnpackedSize = GetTotalUnpackedSize(IsSingleElement);\r
-    pDesc->Stride = Stride;\r
-\r
-    switch (VarType)\r
-    {\r
-    case EVT_Numeric:\r
-        switch (NumericType.NumericLayout)\r
-        {\r
-        case ENL_Matrix:\r
-            if (NumericType.IsColumnMajor)\r
-            {\r
-                pDesc->Class = D3D10_SVC_MATRIX_COLUMNS;\r
-            }\r
-            else\r
-            {\r
-                pDesc->Class = D3D10_SVC_MATRIX_ROWS;\r
-            }\r
-            break;\r
-        case ENL_Vector:\r
-            pDesc->Class = D3D10_SVC_VECTOR;\r
-            break;\r
-        case ENL_Scalar:\r
-            pDesc->Class = D3D10_SVC_SCALAR;\r
-            break;\r
-        default:\r
-            D3DXASSERT(0);\r
-        }\r
-\r
-        switch (NumericType.ScalarType)\r
-        {\r
-        case EST_Bool:\r
-            pDesc->Type = D3D10_SVT_BOOL;\r
-            break;\r
-        case EST_Int:\r
-            pDesc->Type = D3D10_SVT_INT;\r
-            break;\r
-        case EST_UInt:\r
-            pDesc->Type = D3D10_SVT_UINT;\r
-            break;\r
-        case EST_Float:\r
-            pDesc->Type = D3D10_SVT_FLOAT;\r
-            break;\r
-        default:\r
-            D3DXASSERT(0);\r
-        }\r
-\r
-        pDesc->Rows = NumericType.Rows;\r
-        pDesc->Columns = NumericType.Columns;\r
-        pDesc->Members = 0;\r
-\r
-        break;\r
-\r
-    case EVT_Struct:\r
-        pDesc->Rows = 0;\r
-        pDesc->Columns = 0;\r
-        pDesc->Members = StructType.Members;\r
-        if( StructType.ImplementsInterface )\r
-        {\r
-            pDesc->Class = D3D11_SVC_INTERFACE_CLASS;\r
-        }\r
-        else\r
-        {\r
-            pDesc->Class = D3D10_SVC_STRUCT;\r
-        }\r
-        pDesc->Type = D3D10_SVT_VOID;\r
-        break;\r
-\r
-    case EVT_Interface:\r
-        pDesc->Rows = 0;\r
-        pDesc->Columns = 0;\r
-        pDesc->Members = 0;\r
-        pDesc->Class = D3D11_SVC_INTERFACE_POINTER;\r
-        pDesc->Type = D3D11_SVT_INTERFACE_POINTER;\r
-        break;\r
-\r
-    case EVT_Object:\r
-        pDesc->Rows = 0;\r
-        pDesc->Columns = 0;\r
-        pDesc->Members = 0;\r
-        pDesc->Class = D3D10_SVC_OBJECT;            \r
-\r
-        switch (ObjectType)\r
-        {\r
-        case EOT_String:\r
-            pDesc->Type = D3D10_SVT_STRING;\r
-            break;\r
-        case EOT_Blend:\r
-            pDesc->Type = D3D10_SVT_BLEND; \r
-            break;\r
-        case EOT_DepthStencil:\r
-            pDesc->Type = D3D10_SVT_DEPTHSTENCIL;\r
-            break;\r
-        case EOT_Rasterizer:\r
-            pDesc->Type = D3D10_SVT_RASTERIZER;\r
-            break;\r
-        case EOT_PixelShader:\r
-        case EOT_PixelShader5:\r
-            pDesc->Type = D3D10_SVT_PIXELSHADER;\r
-            break;\r
-        case EOT_VertexShader:\r
-        case EOT_VertexShader5:\r
-            pDesc->Type = D3D10_SVT_VERTEXSHADER;\r
-            break;\r
-        case EOT_GeometryShader:\r
-        case EOT_GeometryShaderSO:\r
-        case EOT_GeometryShader5:\r
-            pDesc->Type = D3D10_SVT_GEOMETRYSHADER;\r
-            break;\r
-        case EOT_HullShader5:\r
-            pDesc->Type = D3D11_SVT_HULLSHADER;\r
-            break;\r
-        case EOT_DomainShader5:\r
-            pDesc->Type = D3D11_SVT_DOMAINSHADER;\r
-            break;\r
-        case EOT_ComputeShader5:\r
-            pDesc->Type = D3D11_SVT_COMPUTESHADER;\r
-            break;\r
-        case EOT_Texture:\r
-            pDesc->Type = D3D10_SVT_TEXTURE;\r
-            break;\r
-        case EOT_Texture1D:\r
-            pDesc->Type = D3D10_SVT_TEXTURE1D;\r
-            break;\r
-        case EOT_Texture1DArray:\r
-            pDesc->Type = D3D10_SVT_TEXTURE1DARRAY;\r
-            break;\r
-        case EOT_Texture2D:\r
-            pDesc->Type = D3D10_SVT_TEXTURE2D;\r
-            break;\r
-        case EOT_Texture2DArray:\r
-            pDesc->Type = D3D10_SVT_TEXTURE2DARRAY;\r
-            break;\r
-        case EOT_Texture2DMS:\r
-            pDesc->Type = D3D10_SVT_TEXTURE2DMS;\r
-            break;\r
-        case EOT_Texture2DMSArray:\r
-            pDesc->Type = D3D10_SVT_TEXTURE2DMSARRAY;\r
-            break;\r
-        case EOT_Texture3D:\r
-            pDesc->Type = D3D10_SVT_TEXTURE3D;\r
-            break;\r
-        case EOT_TextureCube:\r
-            pDesc->Type = D3D10_SVT_TEXTURECUBE;\r
-            break;\r
-        case EOT_TextureCubeArray:\r
-            pDesc->Type = D3D10_SVT_TEXTURECUBEARRAY;\r
-            break;\r
-        case EOT_Buffer:\r
-            pDesc->Type = D3D10_SVT_BUFFER;\r
-            break;\r
-        case EOT_Sampler:\r
-            pDesc->Type = D3D10_SVT_SAMPLER;\r
-            break;\r
-        case EOT_RenderTargetView:\r
-            pDesc->Type = D3D10_SVT_RENDERTARGETVIEW;\r
-            break;\r
-        case EOT_DepthStencilView:\r
-            pDesc->Type = D3D10_SVT_DEPTHSTENCILVIEW;\r
-            break;\r
-        case EOT_RWTexture1D:\r
-            pDesc->Type = D3D11_SVT_RWTEXTURE1D;\r
-            break;\r
-        case EOT_RWTexture1DArray:\r
-            pDesc->Type = D3D11_SVT_RWTEXTURE1DARRAY;\r
-            break;\r
-        case EOT_RWTexture2D:\r
-            pDesc->Type = D3D11_SVT_RWTEXTURE2D;\r
-            break;\r
-        case EOT_RWTexture2DArray:\r
-            pDesc->Type = D3D11_SVT_RWTEXTURE2DARRAY;\r
-            break;\r
-        case EOT_RWTexture3D:\r
-            pDesc->Type = D3D11_SVT_RWTEXTURE3D;\r
-            break;\r
-        case EOT_RWBuffer:\r
-            pDesc->Type = D3D11_SVT_RWBUFFER;\r
-            break;\r
-        case EOT_ByteAddressBuffer:\r
-            pDesc->Type = D3D11_SVT_BYTEADDRESS_BUFFER;\r
-            break;\r
-        case EOT_RWByteAddressBuffer:\r
-            pDesc->Type = D3D11_SVT_RWBYTEADDRESS_BUFFER;\r
-            break;\r
-        case EOT_StructuredBuffer:\r
-            pDesc->Type = D3D11_SVT_STRUCTURED_BUFFER;\r
-            break;\r
-        case EOT_RWStructuredBuffer:\r
-        case EOT_RWStructuredBufferAlloc:\r
-        case EOT_RWStructuredBufferConsume:\r
-            pDesc->Type = D3D11_SVT_RWSTRUCTURED_BUFFER;\r
-            break;\r
-        case EOT_AppendStructuredBuffer:\r
-            pDesc->Type = D3D11_SVT_APPEND_STRUCTURED_BUFFER;\r
-            break;\r
-        case EOT_ConsumeStructuredBuffer:\r
-            pDesc->Type = D3D11_SVT_CONSUME_STRUCTURED_BUFFER;\r
-            break;\r
-\r
-        default:\r
-            D3DXASSERT(0);\r
-        }\r
-        break;\r
-\r
-    default:\r
-        D3DXASSERT(0);\r
-    }\r
-\r
-lExit:\r
-    return hr;\r
-\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////////////\r
-// ID3DX11EffectShaderVariable (SAnonymousShader implementation)\r
-////////////////////////////////////////////////////////////////////////////////\r
-\r
-SAnonymousShader::SAnonymousShader(SShaderBlock *pBlock)\r
-{\r
-    pShaderBlock = pBlock;\r
-}\r
-\r
-BOOL SAnonymousShader::IsValid()\r
-{\r
-    return pShaderBlock && pShaderBlock->IsValid;\r
-}\r
-\r
-ID3DX11EffectType * SAnonymousShader::GetType()\r
-{\r
-    return (ID3DX11EffectType *) this;\r
-}\r
-\r
-HRESULT SAnonymousShader::GetDesc(D3DX11_EFFECT_VARIABLE_DESC *pDesc)\r
-{\r
-    pDesc->Annotations = 0;\r
-    pDesc->Flags = 0;\r
-\r
-    pDesc->Name = "$Anonymous";\r
-    pDesc->Semantic = NULL;\r
-    pDesc->BufferOffset = 0;\r
-\r
-    return S_OK;\r
-}\r
-\r
-ID3DX11EffectVariable * SAnonymousShader::GetAnnotationByIndex(UINT Index)\r
-{\r
-    DPF(0, "ID3DX11EffectVariable::GetAnnotationByIndex: Anonymous shaders cannot have annotations");\r
-    return &g_InvalidScalarVariable;\r
-}\r
-\r
-ID3DX11EffectVariable * SAnonymousShader::GetAnnotationByName(LPCSTR Name)\r
-{\r
-    DPF(0, "ID3DX11EffectVariable::GetAnnotationByName: Anonymous shaders cannot have annotations");\r
-    return &g_InvalidScalarVariable;\r
-}\r
-\r
-ID3DX11EffectVariable * SAnonymousShader::GetMemberByIndex(UINT  Index)\r
-{\r
-    DPF(0, "ID3DX11EffectVariable::GetMemberByIndex: Variable is not a structure");\r
-    return &g_InvalidScalarVariable;\r
-}\r
-\r
-ID3DX11EffectVariable * SAnonymousShader::GetMemberByName(LPCSTR Name)\r
-{\r
-    DPF(0, "ID3DX11EffectVariable::GetMemberByName: Variable is not a structure");\r
-    return &g_InvalidScalarVariable;\r
-}\r
-\r
-ID3DX11EffectVariable * SAnonymousShader::GetMemberBySemantic(LPCSTR Semantic)\r
-{\r
-    DPF(0, "ID3DX11EffectVariable::GetMemberBySemantic: Variable is not a structure");\r
-    return &g_InvalidScalarVariable;\r
-}\r
-\r
-ID3DX11EffectVariable * SAnonymousShader::GetElement(UINT Index)\r
-{\r
-    DPF(0, "ID3DX11EffectVariable::GetElement: Anonymous shaders cannot have elements");\r
-    return &g_InvalidScalarVariable;\r
-}\r
-\r
-ID3DX11EffectConstantBuffer * SAnonymousShader::GetParentConstantBuffer()\r
-{\r
-    return NoParentCB();\r
-}\r
-\r
-ID3DX11EffectShaderVariable * SAnonymousShader::AsShader()\r
-{\r
-    return (ID3DX11EffectShaderVariable *) this;\r
-}\r
-\r
-HRESULT SAnonymousShader::SetRawValue(CONST void *pData, UINT Offset, UINT Count) \r
-{ \r
-    return ObjectSetRawValue(); \r
-}\r
-\r
-HRESULT SAnonymousShader::GetRawValue(__out_bcount(Count) void *pData, UINT Offset, UINT Count) \r
-{ \r
-    return ObjectGetRawValue(); \r
-}\r
-\r
-#define ANONYMOUS_SHADER_INDEX_CHECK() \\r
-    HRESULT hr = S_OK; \\r
-    if (0 != ShaderIndex) \\r
-    { \\r
-        DPF(0, "%s: Invalid index specified", pFuncName); \\r
-        VH(E_INVALIDARG); \\r
-    } \\r
-\r
-HRESULT SAnonymousShader::GetShaderDesc(UINT ShaderIndex, D3DX11_EFFECT_SHADER_DESC *pDesc)\r
-{\r
-    LPCSTR pFuncName = "ID3DX11EffectShaderVariable::GetShaderDesc";\r
-\r
-    ANONYMOUS_SHADER_INDEX_CHECK();\r
-\r
-    pShaderBlock->GetShaderDesc(pDesc, TRUE);\r
-\r
-lExit:\r
-    return hr;\r
-}\r
-\r
-HRESULT SAnonymousShader::GetVertexShader(UINT ShaderIndex, ID3D11VertexShader **ppVS)\r
-{\r
-    LPCSTR pFuncName = "ID3DX11EffectShaderVariable::GetVertexShader";\r
-\r
-    ANONYMOUS_SHADER_INDEX_CHECK();\r
-\r
-    VH( pShaderBlock->GetVertexShader(ppVS) );\r
-\r
-lExit:\r
-    return hr;\r
-}\r
-\r
-HRESULT SAnonymousShader::GetGeometryShader(UINT ShaderIndex, ID3D11GeometryShader **ppGS)\r
-{\r
-    LPCSTR pFuncName = "ID3DX11EffectShaderVariable::GetGeometryShader";\r
-\r
-    ANONYMOUS_SHADER_INDEX_CHECK();\r
-\r
-    VH( pShaderBlock->GetGeometryShader(ppGS) );\r
-\r
-lExit:\r
-    return hr;\r
-}\r
-\r
-HRESULT SAnonymousShader::GetPixelShader(UINT ShaderIndex, ID3D11PixelShader **ppPS)\r
-{\r
-    LPCSTR pFuncName = "ID3DX11EffectShaderVariable::GetPixelShader";\r
-\r
-    ANONYMOUS_SHADER_INDEX_CHECK();\r
-\r
-    VH( pShaderBlock->GetPixelShader(ppPS) );\r
-\r
-lExit:\r
-    return hr;\r
-}\r
-\r
-HRESULT SAnonymousShader::GetHullShader(UINT ShaderIndex, ID3D11HullShader **ppHS)\r
-{\r
-    LPCSTR pFuncName = "ID3DX11EffectShaderVariable::GetHullShader";\r
-\r
-    ANONYMOUS_SHADER_INDEX_CHECK();\r
-\r
-    VH( pShaderBlock->GetHullShader(ppHS) );\r
-\r
-lExit:\r
-    return hr;\r
-}\r
-\r
-HRESULT SAnonymousShader::GetDomainShader(UINT ShaderIndex, ID3D11DomainShader **ppCS)\r
-{\r
-    LPCSTR pFuncName = "ID3DX11EffectShaderVariable::GetDomainShader";\r
-\r
-    ANONYMOUS_SHADER_INDEX_CHECK();\r
-\r
-    VH( pShaderBlock->GetDomainShader(ppCS) );\r
-\r
-lExit:\r
-    return hr;\r
-}\r
-\r
-HRESULT SAnonymousShader::GetComputeShader(UINT ShaderIndex, ID3D11ComputeShader **ppCS)\r
-{\r
-    LPCSTR pFuncName = "ID3DX11EffectShaderVariable::GetComputeShader";\r
-\r
-    ANONYMOUS_SHADER_INDEX_CHECK();\r
-\r
-    VH( pShaderBlock->GetComputeShader(ppCS) );\r
-\r
-lExit:\r
-    return hr;\r
-}\r
-\r
-HRESULT SAnonymousShader::GetInputSignatureElementDesc(UINT ShaderIndex, UINT Element, D3D11_SIGNATURE_PARAMETER_DESC *pDesc)\r
-{\r
-    LPCSTR pFuncName = "ID3DX11EffectShaderVariable::GetInputSignatureElementDesc";\r
-\r
-    ANONYMOUS_SHADER_INDEX_CHECK();\r
-\r
-    VH( pShaderBlock->GetSignatureElementDesc(SShaderBlock::ST_Input, Element, pDesc) );\r
-\r
-lExit:\r
-    return hr;\r
-}\r
-\r
-HRESULT SAnonymousShader::GetOutputSignatureElementDesc(UINT ShaderIndex, UINT Element, D3D11_SIGNATURE_PARAMETER_DESC *pDesc)\r
-{\r
-    LPCSTR pFuncName = "ID3DX11EffectShaderVariable::GetOutputSignatureElementDesc";\r
-\r
-    ANONYMOUS_SHADER_INDEX_CHECK();\r
-\r
-    VH( pShaderBlock->GetSignatureElementDesc(SShaderBlock::ST_Output, Element, pDesc) );\r
-\r
-lExit:\r
-    return hr;\r
-}\r
-\r
-HRESULT SAnonymousShader::GetPatchConstantSignatureElementDesc(UINT ShaderIndex, UINT Element, D3D11_SIGNATURE_PARAMETER_DESC *pDesc)\r
-{\r
-    LPCSTR pFuncName = "ID3DX11EffectShaderVariable::GetPatchConstantSignatureElementDesc";\r
-\r
-    ANONYMOUS_SHADER_INDEX_CHECK();\r
-\r
-    VH( pShaderBlock->GetSignatureElementDesc(SShaderBlock::ST_PatchConstant, Element, pDesc) );\r
-\r
-lExit:\r
-    return hr;\r
-}\r
-\r
-HRESULT SAnonymousShader::GetDesc(D3DX11_EFFECT_TYPE_DESC *pDesc)\r
-{\r
-    pDesc->Class = D3D10_SVC_OBJECT;\r
-\r
-    switch (pShaderBlock->GetShaderType())\r
-    {\r
-    case EOT_VertexShader:\r
-    case EOT_VertexShader5:\r
-        pDesc->TypeName = "vertexshader";\r
-        pDesc->Type = D3D10_SVT_VERTEXSHADER;\r
-        break;\r
-    case EOT_GeometryShader:\r
-    case EOT_GeometryShader5:\r
-        pDesc->TypeName = "geometryshader";\r
-        pDesc->Type = D3D10_SVT_GEOMETRYSHADER;\r
-        break;\r
-    case EOT_PixelShader:\r
-    case EOT_PixelShader5:\r
-        pDesc->TypeName = "pixelshader";\r
-        pDesc->Type = D3D10_SVT_PIXELSHADER;\r
-        break;\r
-    case EOT_HullShader5:\r
-        pDesc->TypeName = "Hullshader";\r
-        pDesc->Type = D3D11_SVT_HULLSHADER;\r
-        break;\r
-    case EOT_DomainShader5:\r
-        pDesc->TypeName = "Domainshader";\r
-        pDesc->Type = D3D11_SVT_DOMAINSHADER;\r
-        break;\r
-    case EOT_ComputeShader5:\r
-        pDesc->TypeName = "Computeshader";\r
-        pDesc->Type = D3D11_SVT_COMPUTESHADER;\r
-        break;\r
-    }\r
-\r
-    pDesc->Elements = 0;\r
-    pDesc->Members = 0;\r
-    pDesc->Rows = 0;\r
-    pDesc->Columns = 0;\r
-    pDesc->PackedSize = 0;\r
-    pDesc->UnpackedSize = 0;\r
-    pDesc->Stride = 0;\r
-\r
-    return S_OK;\r
-}\r
-\r
-ID3DX11EffectType * SAnonymousShader::GetMemberTypeByIndex(UINT  Index)\r
-{\r
-    DPF(0, "ID3DX11EffectType::GetMemberTypeByIndex: This interface does not refer to a structure");\r
-    return &g_InvalidType;\r
-}\r
-\r
-ID3DX11EffectType * SAnonymousShader::GetMemberTypeByName(LPCSTR Name)\r
-{\r
-    DPF(0, "ID3DX11EffectType::GetMemberTypeByName: This interface does not refer to a structure");\r
-    return &g_InvalidType;\r
-}\r
-\r
-ID3DX11EffectType * SAnonymousShader::GetMemberTypeBySemantic(LPCSTR Semantic)\r
-{\r
-    DPF(0, "ID3DX11EffectType::GetMemberTypeBySemantic: This interface does not refer to a structure");\r
-    return &g_InvalidType;\r
-}\r
-\r
-LPCSTR SAnonymousShader::GetMemberName(UINT Index)\r
-{\r
-    DPF(0, "ID3DX11EffectType::GetMemberName: This interface does not refer to a structure");\r
-    return NULL;\r
-}\r
-\r
-LPCSTR SAnonymousShader::GetMemberSemantic(UINT Index)\r
-{\r
-    DPF(0, "ID3DX11EffectType::GetMemberSemantic: This interface does not refer to a structure");\r
-    return NULL;\r
-}\r
-\r
-//////////////////////////////////////////////////////////////////////////\r
-// ID3DX11EffectConstantBuffer (SConstantBuffer implementation)\r
-//////////////////////////////////////////////////////////////////////////\r
-\r
-BOOL SConstantBuffer::IsValid()\r
-{\r
-    return TRUE;\r
-}\r
-\r
-ID3DX11EffectType * SConstantBuffer::GetType()\r
-{\r
-    return (ID3DX11EffectType *) this;\r
-}\r
-\r
-HRESULT SConstantBuffer::GetDesc(D3DX11_EFFECT_VARIABLE_DESC *pDesc)\r
-{\r
-    pDesc->Annotations = AnnotationCount;\r
-    pDesc->Flags = 0;\r
-\r
-    pDesc->Name = pName;\r
-    pDesc->Semantic = NULL;\r
-    pDesc->BufferOffset = 0;\r
-\r
-    if (ExplicitBindPoint != -1)\r
-    {\r
-        pDesc->ExplicitBindPoint = ExplicitBindPoint;\r
-        pDesc->Flags |= D3DX11_EFFECT_VARIABLE_EXPLICIT_BIND_POINT;\r
-    }\r
-    else\r
-    {\r
-        pDesc->ExplicitBindPoint = 0;\r
-    }\r
-\r
-    return S_OK;\r
-}\r
-\r
-ID3DX11EffectVariable * SConstantBuffer::GetAnnotationByIndex(UINT  Index)\r
-{\r
-    return GetAnnotationByIndexHelper("ID3DX11EffectVariable", Index, AnnotationCount, pAnnotations);\r
-}\r
-\r
-ID3DX11EffectVariable * SConstantBuffer::GetAnnotationByName(LPCSTR Name)\r
-{\r
-    return GetAnnotationByNameHelper("ID3DX11EffectVariable", Name, AnnotationCount, pAnnotations);\r
-}\r
-\r
-ID3DX11EffectVariable * SConstantBuffer::GetMemberByIndex(UINT  Index)\r
-{\r
-    SGlobalVariable *pMember;\r
-    UDataPointer dataPtr;\r
-\r
-    if (IsEffectOptimized)\r
-    {\r
-        DPF(0, "ID3DX11EffectVariable::GetMemberByIndex: Cannot get members; effect has been Optimize()'ed");\r
-        return &g_InvalidScalarVariable;\r
-    }\r
-\r
-    if (!GetVariableByIndexHelper<SGlobalVariable>(Index, VariableCount, (SGlobalVariable*)pVariables, \r
-        NULL, &pMember, &dataPtr.pGeneric))\r
-    {\r
-        return &g_InvalidScalarVariable;\r
-    }\r
-\r
-    return (ID3DX11EffectVariable *) pMember;\r
-}\r
-\r
-ID3DX11EffectVariable * SConstantBuffer::GetMemberByName(LPCSTR Name)\r
-{\r
-    SGlobalVariable *pMember;\r
-    UDataPointer dataPtr;\r
-    UINT index;\r
-\r
-    if (IsEffectOptimized)\r
-    {\r
-        DPF(0, "ID3DX11EffectVariable::GetMemberByName: Cannot get members; effect has been Optimize()'ed");\r
-        return &g_InvalidScalarVariable;\r
-    }\r
-\r
-    if (!GetVariableByNameHelper<SGlobalVariable>(Name, VariableCount, (SGlobalVariable*)pVariables, \r
-        NULL, &pMember, &dataPtr.pGeneric, &index))\r
-    {\r
-        return &g_InvalidScalarVariable;\r
-    }\r
-\r
-    return (ID3DX11EffectVariable *) pMember;\r
-}\r
-\r
-ID3DX11EffectVariable * SConstantBuffer::GetMemberBySemantic(LPCSTR Semantic)\r
-{\r
-    SGlobalVariable *pMember;\r
-    UDataPointer dataPtr;\r
-    UINT index;\r
-\r
-    if (IsEffectOptimized)\r
-    {\r
-        DPF(0, "ID3DX11EffectVariable::GetMemberBySemantic: Cannot get members; effect has been Optimize()'ed");\r
-        return &g_InvalidScalarVariable;\r
-    }\r
-\r
-    if (!GetVariableBySemanticHelper<SGlobalVariable>(Semantic, VariableCount, (SGlobalVariable*)pVariables, \r
-        NULL, &pMember, &dataPtr.pGeneric, &index))\r
-    {\r
-        return &g_InvalidScalarVariable;\r
-    }\r
-\r
-    return (ID3DX11EffectVariable *) pMember;\r
-}\r
-\r
-ID3DX11EffectVariable * SConstantBuffer::GetElement(UINT  Index)\r
-{\r
-    LPCSTR pFuncName = "ID3DX11EffectVariable::GetElement";\r
-    DPF(0, "%s: This interface does not refer to an array", pFuncName);\r
-    return &g_InvalidScalarVariable;\r
-}\r
-\r
-ID3DX11EffectConstantBuffer * SConstantBuffer::GetParentConstantBuffer()\r
-{\r
-    LPCSTR pFuncName = "ID3DX11EffectVariable::GetParentConstantBuffer";\r
-    DPF(0, "%s: Constant buffers do not have parent constant buffers", pFuncName);\r
-    return &g_InvalidConstantBuffer;\r
-}\r
-\r
-ID3DX11EffectConstantBuffer * SConstantBuffer::AsConstantBuffer()\r
-{\r
-    return (ID3DX11EffectConstantBuffer *) this;\r
-}\r
-\r
-HRESULT SConstantBuffer::GetDesc(D3DX11_EFFECT_TYPE_DESC *pDesc)\r
-{\r
-    pDesc->TypeName = IsTBuffer ? "tbuffer" : "cbuffer";\r
-    pDesc->Class = D3D10_SVC_OBJECT;\r
-    pDesc->Type = IsTBuffer ? D3D10_SVT_TBUFFER : D3D10_SVT_CBUFFER;\r
-\r
-    pDesc->Elements = 0;\r
-    pDesc->Members = VariableCount;\r
-    pDesc->Rows = 0;\r
-    pDesc->Columns = 0;\r
-\r
-    UINT  i;\r
-    pDesc->PackedSize = 0;\r
-    for (i = 0; i < VariableCount; ++ i)\r
-    {\r
-        pDesc->PackedSize += pVariables[i].pType->PackedSize;\r
-    }\r
-\r
-    pDesc->UnpackedSize = Size;\r
-    D3DXASSERT(pDesc->UnpackedSize >= pDesc->PackedSize);\r
-\r
-    pDesc->Stride = AlignToPowerOf2(pDesc->UnpackedSize, SType::c_RegisterSize);\r
-\r
-    return S_OK;\r
-}\r
-\r
-ID3DX11EffectType * SConstantBuffer::GetMemberTypeByIndex(UINT  Index)\r
-{\r
-    return GetTypeByIndexHelper(Index, VariableCount, pVariables, sizeof (SGlobalVariable));\r
-}\r
-\r
-ID3DX11EffectType * SConstantBuffer::GetMemberTypeByName(LPCSTR Name)\r
-{\r
-    return GetTypeByNameHelper(Name, VariableCount, pVariables, sizeof (SGlobalVariable));\r
-}\r
-\r
-ID3DX11EffectType * SConstantBuffer::GetMemberTypeBySemantic(LPCSTR Semantic)\r
-{\r
-    return GetTypeBySemanticHelper(Semantic, VariableCount, pVariables, sizeof (SGlobalVariable));\r
-}\r
-\r
-LPCSTR SConstantBuffer::GetMemberName(UINT Index)\r
-{\r
-    LPCSTR pFuncName = "ID3DX11EffectType::GetMemberName";\r
-\r
-    if (IsEffectOptimized)\r
-    {\r
-        DPF(0, "%s: Cannot get member names; Effect has been Optimize()'ed", pFuncName);\r
-        return NULL;\r
-    }\r
-\r
-    if (Index >= VariableCount)\r
-    {\r
-        DPF(0, "%s: Invalid index (%d, total: %d)", pFuncName, Index, VariableCount);\r
-        return NULL;\r
-    }\r
-\r
-    return pVariables[Index].pName;\r
-}\r
-\r
-LPCSTR SConstantBuffer::GetMemberSemantic(UINT Index)\r
-{\r
-    LPCSTR pFuncName = "ID3DX11EffectType::GetMemberSemantic";\r
-\r
-    if (IsEffectOptimized)\r
-    {\r
-        DPF(0, "%s: Cannot get member semantics; Effect has been Optimize()'ed", pFuncName);\r
-        return NULL;\r
-    }\r
-\r
-    if (Index >= VariableCount)\r
-    {\r
-        DPF(0, "%s: Invalid index (%d, total: %d)", pFuncName, Index, VariableCount);\r
-        return NULL;\r
-    }\r
-\r
-    return pVariables[Index].pSemantic;\r
-}\r
-\r
-HRESULT SConstantBuffer::SetRawValue(CONST void *pData, UINT  Offset, UINT  Count)\r
-{\r
-    HRESULT hr = S_OK;    \r
-\r
-#ifdef _DEBUG\r
-    LPCSTR pFuncName = "ID3DX11EffectVariable::SetRawValue";\r
-\r
-    VERIFYPARAMETER(pData);\r
-\r
-    if ((Offset + Count < Offset) ||\r
-        (Count + (BYTE*)pData < (BYTE*)pData) ||\r
-        ((Offset + Count) > Size))\r
-    {\r
-        // overflow of some kind\r
-        DPF(0, "%s: Invalid range specified", pFuncName);\r
-        VH(E_INVALIDARG);\r
-    }\r
-#endif\r
-\r
-    if (IsUsedByExpression)\r
-    {\r
-        UINT  i;\r
-        for (i = 0; i < VariableCount; ++ i)\r
-        {\r
-            ((SGlobalVariable*)pVariables)[i].DirtyVariable();\r
-        }\r
-    }\r
-    else\r
-    {\r
-        IsDirty = TRUE;\r
-    }\r
-\r
-    memcpy(pBackingStore + Offset, pData, Count);\r
-\r
-lExit:\r
-    return hr;\r
-}\r
-\r
-HRESULT SConstantBuffer::GetRawValue(__out_bcount(Count) void *pData, UINT  Offset, UINT  Count)\r
-{\r
-    HRESULT hr = S_OK;    \r
-\r
-#ifdef _DEBUG\r
-    LPCSTR pFuncName = "ID3DX11EffectVariable::GetRawValue";\r
-\r
-    VERIFYPARAMETER(pData);\r
-\r
-    if ((Offset + Count < Offset) ||\r
-        (Count + (BYTE*)pData < (BYTE*)pData) ||\r
-        ((Offset + Count) > Size))\r
-    {\r
-        // overflow of some kind\r
-        DPF(0, "%s: Invalid range specified", pFuncName);\r
-        VH(E_INVALIDARG);\r
-    }\r
-#endif\r
-\r
-    memcpy(pData, pBackingStore + Offset, Count);\r
-\r
-lExit:\r
-    return hr;\r
-}\r
-\r
-bool SConstantBuffer::ClonedSingle() const\r
-{\r
-    return IsSingle && ( pEffect->m_Flags & D3DX11_EFFECT_CLONE );\r
-}\r
-\r
-HRESULT SConstantBuffer::SetConstantBuffer(ID3D11Buffer *pConstantBuffer)\r
-{\r
-    HRESULT hr = S_OK;\r
-    LPCSTR pFuncName = "ID3DX11EffectConstantBuffer::SetConstantBuffer";\r
-\r
-    if (IsTBuffer)\r
-    {\r
-        DPF(0, "%s: This is a texture buffer; use SetTextureBuffer instead", pFuncName);\r
-        VH(D3DERR_INVALIDCALL);\r
-    }\r
-\r
-    // Replace all references to the old shader block with this one\r
-    pEffect->ReplaceCBReference(this, pConstantBuffer);\r
-\r
-    if( !IsUserManaged )\r
-    {\r
-        // Save original cbuffer in case we UndoSet\r
-        D3DXASSERT( pMemberData[0].Type == MDT_Buffer );\r
-        VB( pMemberData[0].Data.pD3DEffectsManagedConstantBuffer == NULL );\r
-        pMemberData[0].Data.pD3DEffectsManagedConstantBuffer = pD3DObject;\r
-        pD3DObject = NULL;\r
-        IsUserManaged = TRUE;\r
-        IsNonUpdatable = TRUE;\r
-    }\r
-\r
-    SAFE_ADDREF( pConstantBuffer );\r
-    SAFE_RELEASE( pD3DObject );\r
-    pD3DObject = pConstantBuffer;\r
-\r
-lExit:\r
-    return hr;\r
-}\r
-\r
-HRESULT SConstantBuffer::GetConstantBuffer(ID3D11Buffer **ppConstantBuffer)\r
-{\r
-    HRESULT hr = S_OK;\r
-    LPCSTR pFuncName = "ID3DX11EffectConstantBuffer::GetConstantBuffer";\r
-\r
-    VERIFYPARAMETER(ppConstantBuffer);\r
-\r
-    if (IsTBuffer)\r
-    {\r
-        DPF(0, "%s: This is a texture buffer; use GetTextureBuffer instead", pFuncName);\r
-        VH(D3DERR_INVALIDCALL);\r
-    }\r
-\r
-    *ppConstantBuffer = pD3DObject;\r
-    SAFE_ADDREF(*ppConstantBuffer);\r
-\r
-lExit:\r
-    return hr;\r
-}\r
-\r
-HRESULT SConstantBuffer::UndoSetConstantBuffer() \r
-{\r
-    HRESULT hr = S_OK;\r
-    LPCSTR pFuncName = "ID3DX11EffectConstantBuffer::UndoSetConstantBuffer";\r
-\r
-    if (IsTBuffer)\r
-    {\r
-        DPF(0, "%s: This is a texture buffer; use UndoSetTextureBuffer instead", pFuncName);\r
-        VH(D3DERR_INVALIDCALL);\r
-    }\r
-\r
-    if( !IsUserManaged )\r
-    {\r
-        return S_FALSE;\r
-    }\r
-\r
-    // Replace all references to the old shader block with this one\r
-    pEffect->ReplaceCBReference(this, pMemberData[0].Data.pD3DEffectsManagedConstantBuffer);\r
-\r
-    // Revert to original cbuffer\r
-    SAFE_RELEASE( pD3DObject );\r
-    pD3DObject = pMemberData[0].Data.pD3DEffectsManagedConstantBuffer;\r
-    pMemberData[0].Data.pD3DEffectsManagedConstantBuffer = NULL;\r
-    IsUserManaged = FALSE;\r
-    IsNonUpdatable = ClonedSingle();\r
-\r
-lExit:\r
-    return hr;\r
-}\r
-\r
-HRESULT SConstantBuffer::SetTextureBuffer(ID3D11ShaderResourceView *pTextureBuffer)\r
-{\r
-    HRESULT hr = S_OK;\r
-    LPCSTR pFuncName = "ID3DX11EffectConstantBuffer::SetTextureBuffer";\r
-\r
-    if (!IsTBuffer)\r
-    {\r
-        DPF(0, "%s: This is a constant buffer; use SetConstantBuffer instead", pFuncName);\r
-        VH(D3DERR_INVALIDCALL);\r
-    }\r
-\r
-    if( !IsUserManaged )\r
-    {\r
-        // Save original cbuffer and tbuffer in case we UndoSet\r
-        D3DXASSERT( pMemberData[0].Type == MDT_Buffer );\r
-        VB( pMemberData[0].Data.pD3DEffectsManagedConstantBuffer == NULL );\r
-        pMemberData[0].Data.pD3DEffectsManagedConstantBuffer = pD3DObject;\r
-        pD3DObject = NULL;\r
-        D3DXASSERT( pMemberData[1].Type == MDT_ShaderResourceView );\r
-        VB( pMemberData[1].Data.pD3DEffectsManagedTextureBuffer == NULL );\r
-        pMemberData[1].Data.pD3DEffectsManagedTextureBuffer = TBuffer.pShaderResource;\r
-        TBuffer.pShaderResource = NULL;\r
-        IsUserManaged = TRUE;\r
-        IsNonUpdatable = TRUE;\r
-    }\r
-\r
-    SAFE_ADDREF( pTextureBuffer );\r
-    SAFE_RELEASE(pD3DObject); // won't be needing this anymore...\r
-    SAFE_RELEASE( TBuffer.pShaderResource );\r
-    TBuffer.pShaderResource = pTextureBuffer;\r
-\r
-lExit:\r
-    return hr;\r
-}\r
-\r
-HRESULT SConstantBuffer::GetTextureBuffer(ID3D11ShaderResourceView **ppTextureBuffer)\r
-{\r
-    HRESULT hr = S_OK;\r
-    LPCSTR pFuncName = "ID3DX11EffectConstantBuffer::GetTextureBuffer";\r
-\r
-    VERIFYPARAMETER(ppTextureBuffer);\r
-\r
-    if (!IsTBuffer)\r
-    {\r
-        DPF(0, "%s: This is a constant buffer; use GetConstantBuffer instead", pFuncName);\r
-        VH(D3DERR_INVALIDCALL);\r
-    }\r
-\r
-    *ppTextureBuffer = TBuffer.pShaderResource;\r
-    SAFE_ADDREF(*ppTextureBuffer);\r
-\r
-lExit:\r
-    return hr;\r
-}\r
-\r
-HRESULT SConstantBuffer::UndoSetTextureBuffer()\r
-{\r
-    HRESULT hr = S_OK;\r
-    LPCSTR pFuncName = "ID3DX11EffectConstantBuffer::UndoSetTextureBuffer";\r
-\r
-    if (!IsTBuffer)\r
-    {\r
-        DPF(0, "%s: This is a texture buffer; use UndoSetConstantBuffer instead", pFuncName);\r
-        VH(D3DERR_INVALIDCALL);\r
-    }\r
-\r
-    if( !IsUserManaged )\r
-    {\r
-        return S_FALSE;\r
-    }\r
-\r
-    // Revert to original cbuffer\r
-    SAFE_RELEASE( pD3DObject );\r
-    pD3DObject = pMemberData[0].Data.pD3DEffectsManagedConstantBuffer;\r
-    pMemberData[0].Data.pD3DEffectsManagedConstantBuffer = NULL;\r
-    SAFE_RELEASE( TBuffer.pShaderResource );\r
-    TBuffer.pShaderResource = pMemberData[1].Data.pD3DEffectsManagedTextureBuffer;\r
-    pMemberData[1].Data.pD3DEffectsManagedTextureBuffer = NULL;\r
-    IsUserManaged = FALSE;\r
-    IsNonUpdatable = ClonedSingle();\r
-\r
-lExit:\r
-    return hr;\r
-}\r
-\r
-//////////////////////////////////////////////////////////////////////////\r
-// ID3DX11EffectPass (CEffectPass implementation)\r
-//////////////////////////////////////////////////////////////////////////\r
-\r
-BOOL SPassBlock::IsValid()\r
-{\r
-    if( HasDependencies )\r
-        return pEffect->ValidatePassBlock( this );\r
-    return InitiallyValid;\r
-}\r
-\r
-HRESULT SPassBlock::GetDesc(D3DX11_PASS_DESC *pDesc)\r
-{\r
-    HRESULT hr = S_OK;\r
-    LPCSTR pFuncName = "ID3DX11EffectPass::GetDesc";\r
-\r
-    VERIFYPARAMETER(pDesc);\r
-\r
-    ZeroMemory(pDesc, sizeof(*pDesc));\r
-\r
-    pDesc->Name = pName;\r
-    pDesc->Annotations = AnnotationCount;\r
-    \r
-    SAssignment *pAssignment;\r
-    SAssignment *pLastAssn;\r
-\r
-    pEffect->IncrementTimer();\r
-\r
-    pAssignment = pAssignments;\r
-    pLastAssn = pAssignments + AssignmentCount;\r
-\r
-    for(; pAssignment < pLastAssn; pAssignment++)\r
-    {\r
-        pEffect->EvaluateAssignment(pAssignment);\r
-    }\r
-\r
-    if( BackingStore.pVertexShaderBlock && BackingStore.pVertexShaderBlock->pInputSignatureBlob )\r
-    {\r
-        // pInputSignatureBlob can be null if we're setting a NULL VS "SetVertexShader( NULL )"\r
-        pDesc->pIAInputSignature = (BYTE*)BackingStore.pVertexShaderBlock->pInputSignatureBlob->GetBufferPointer();\r
-        pDesc->IAInputSignatureSize = BackingStore.pVertexShaderBlock->pInputSignatureBlob->GetBufferSize();\r
-    }\r
-\r
-    pDesc->StencilRef = BackingStore.StencilRef;\r
-    pDesc->SampleMask = BackingStore.SampleMask;\r
-    pDesc->BlendFactor[0] = BackingStore.BlendFactor[0];\r
-    pDesc->BlendFactor[1] = BackingStore.BlendFactor[1];\r
-    pDesc->BlendFactor[2] = BackingStore.BlendFactor[2];\r
-    pDesc->BlendFactor[3] = BackingStore.BlendFactor[3];\r
-\r
-lExit:\r
-    return hr;\r
-}\r
-\r
-extern SShaderBlock g_NullVS;\r
-extern SShaderBlock g_NullGS;\r
-extern SShaderBlock g_NullPS;\r
-extern SShaderBlock g_NullHS;\r
-extern SShaderBlock g_NullDS;\r
-extern SShaderBlock g_NullCS;\r
-\r
-SAnonymousShader g_AnonymousNullVS(&g_NullVS);\r
-SAnonymousShader g_AnonymousNullGS(&g_NullGS);\r
-SAnonymousShader g_AnonymousNullPS(&g_NullPS);\r
-SAnonymousShader g_AnonymousNullHS(&g_NullHS);\r
-SAnonymousShader g_AnonymousNullDS(&g_NullDS);\r
-SAnonymousShader g_AnonymousNullCS(&g_NullCS);\r
-\r
-template<EObjectType EShaderType>\r
-HRESULT SPassBlock::GetShaderDescHelper(D3DX11_PASS_SHADER_DESC *pDesc)\r
-{\r
-    HRESULT hr = S_OK;\r
-    UINT  i;\r
-    LPCSTR pFuncName = NULL;\r
-    SShaderBlock *pShaderBlock = NULL;\r
-\r
-    ApplyPassAssignments();\r
-\r
-    switch (EShaderType)\r
-    {\r
-    case EOT_VertexShader:\r
-    case EOT_VertexShader5:\r
-#pragma prefast(suppress:__WARNING_UNUSED_POINTER_ASSIGNMENT, "pFuncName used in DPF")\r
-        pFuncName = "ID3DX11EffectPass::GetVertexShaderDesc";\r
-        pShaderBlock = BackingStore.pVertexShaderBlock;\r
-        break;\r
-    case EOT_PixelShader:\r
-    case EOT_PixelShader5:\r
-#pragma prefast(suppress:__WARNING_UNUSED_POINTER_ASSIGNMENT, "pFuncName used in DPF")\r
-        pFuncName = "ID3DX11EffectPass::GetPixelShaderDesc";\r
-        pShaderBlock = BackingStore.pPixelShaderBlock;\r
-        break;\r
-    case EOT_GeometryShader:\r
-    case EOT_GeometryShader5:\r
-#pragma prefast(suppress:__WARNING_UNUSED_POINTER_ASSIGNMENT, "pFuncName used in DPF")\r
-        pFuncName = "ID3DX11EffectPass::GetGeometryShaderDesc";\r
-        pShaderBlock = BackingStore.pGeometryShaderBlock;\r
-        break;\r
-    case EOT_HullShader5:\r
-#pragma prefast(suppress:__WARNING_UNUSED_POINTER_ASSIGNMENT, "pFuncName used in DPF")\r
-        pFuncName = "ID3DX11EffectPass::GetHullShaderDesc";\r
-        pShaderBlock = BackingStore.pHullShaderBlock;\r
-        break;\r
-    case EOT_DomainShader5:\r
-#pragma prefast(suppress:__WARNING_UNUSED_POINTER_ASSIGNMENT, "pFuncName used in DPF")\r
-        pFuncName = "ID3DX11EffectPass::GetDomainShaderDesc";\r
-        pShaderBlock = BackingStore.pDomainShaderBlock;\r
-        break;\r
-    case EOT_ComputeShader5:\r
-#pragma prefast(suppress:__WARNING_UNUSED_POINTER_ASSIGNMENT, "pFuncName used in DPF")\r
-        pFuncName = "ID3DX11EffectPass::GetComputeShaderDesc";\r
-        pShaderBlock = BackingStore.pComputeShaderBlock;\r
-        break;\r
-    default:\r
-        D3DXASSERT(0);\r
-    }\r
-\r
-    VERIFYPARAMETER(pDesc);\r
-\r
-    // in case of error (or in case the assignment doesn't exist), return something reasonable\r
-    pDesc->pShaderVariable = &g_InvalidShaderVariable;\r
-    pDesc->ShaderIndex = 0;\r
-\r
-    if (NULL != pShaderBlock)\r
-    {\r
-        UINT elements, varCount, anonymousShaderCount;\r
-        SGlobalVariable *pVariables;\r
-        SAnonymousShader *pAnonymousShaders;\r
-\r
-        if (pShaderBlock == &g_NullVS)\r
-        {\r
-            pDesc->pShaderVariable = &g_AnonymousNullVS;\r
-            pDesc->ShaderIndex = 0;\r
-            // we're done\r
-            goto lExit;\r
-        }\r
-        else if (pShaderBlock == &g_NullGS)\r
-        {\r
-            pDesc->pShaderVariable = &g_AnonymousNullGS;\r
-            pDesc->ShaderIndex = 0;\r
-            // we're done\r
-            goto lExit;\r
-        }\r
-        else if (pShaderBlock == &g_NullPS)\r
-        {\r
-            pDesc->pShaderVariable = &g_AnonymousNullPS;\r
-            pDesc->ShaderIndex = 0;\r
-            // we're done\r
-            goto lExit;\r
-        }\r
-        else if (pShaderBlock == &g_NullHS)\r
-        {\r
-            pDesc->pShaderVariable = &g_AnonymousNullHS;\r
-            pDesc->ShaderIndex = 0;\r
-            // we're done\r
-            goto lExit;\r
-        }\r
-        else if (pShaderBlock == &g_NullDS)\r
-        {\r
-            pDesc->pShaderVariable = &g_AnonymousNullDS;\r
-            pDesc->ShaderIndex = 0;\r
-            // we're done\r
-            goto lExit;\r
-        }\r
-        else if (pShaderBlock == &g_NullCS)\r
-        {\r
-            pDesc->pShaderVariable = &g_AnonymousNullCS;\r
-            pDesc->ShaderIndex = 0;\r
-            // we're done\r
-            goto lExit;\r
-        }\r
-        else \r
-        {\r
-            VB( pEffect->IsRuntimeData(pShaderBlock) );\r
-            varCount = pEffect->m_VariableCount;\r
-            pVariables = pEffect->m_pVariables;\r
-            anonymousShaderCount = pEffect->m_AnonymousShaderCount;\r
-            pAnonymousShaders = pEffect->m_pAnonymousShaders;\r
-        }\r
-\r
-        for (i = 0; i < varCount; ++ i)\r
-        {\r
-            elements = max(1, pVariables[i].pType->Elements);\r
-            // make sure the variable type matches, and don't forget about GeometryShaderSO's\r
-            if (pVariables[i].pType->IsShader())\r
-            {\r
-                if (pShaderBlock >= pVariables[i].Data.pShader && pShaderBlock < pVariables[i].Data.pShader + elements)\r
-                {\r
-                    pDesc->pShaderVariable = (ID3DX11EffectShaderVariable *)(pVariables + i);\r
-                    pDesc->ShaderIndex = (UINT)(UINT_PTR)(pShaderBlock - pVariables[i].Data.pShader);\r
-                    // we're done\r
-                    goto lExit;\r
-                }\r
-            }\r
-        }\r
-\r
-        for (i = 0; i < anonymousShaderCount; ++ i)\r
-        {\r
-            if (pShaderBlock == pAnonymousShaders[i].pShaderBlock)\r
-            {\r
-                VB(EShaderType == pAnonymousShaders[i].pShaderBlock->GetShaderType())\r
-                pDesc->pShaderVariable = (pAnonymousShaders + i);\r
-                pDesc->ShaderIndex = 0;\r
-                // we're done\r
-                goto lExit;\r
-            }\r
-        }\r
-\r
-        DPF(0, "%s: Internal error; shader not found", pFuncName);\r
-        VH( E_FAIL );\r
-    }\r
-\r
-lExit:\r
-    return hr;\r
-}\r
-\r
-HRESULT SPassBlock::GetVertexShaderDesc(D3DX11_PASS_SHADER_DESC *pDesc)\r
-{\r
-    return GetShaderDescHelper<EOT_VertexShader>(pDesc);\r
-}\r
-\r
-HRESULT SPassBlock::GetPixelShaderDesc(D3DX11_PASS_SHADER_DESC *pDesc)\r
-{\r
-    return GetShaderDescHelper<EOT_PixelShader>(pDesc);\r
-}\r
-\r
-HRESULT SPassBlock::GetGeometryShaderDesc(D3DX11_PASS_SHADER_DESC *pDesc)\r
-{\r
-    return GetShaderDescHelper<EOT_GeometryShader>(pDesc);\r
-}\r
-\r
-HRESULT SPassBlock::GetHullShaderDesc(D3DX11_PASS_SHADER_DESC *pDesc)\r
-{\r
-    return GetShaderDescHelper<EOT_HullShader5>(pDesc);\r
-}\r
-\r
-HRESULT SPassBlock::GetDomainShaderDesc(D3DX11_PASS_SHADER_DESC *pDesc)\r
-{\r
-    return GetShaderDescHelper<EOT_DomainShader5>(pDesc);\r
-}\r
-\r
-HRESULT SPassBlock::GetComputeShaderDesc(D3DX11_PASS_SHADER_DESC *pDesc)\r
-{\r
-    return GetShaderDescHelper<EOT_ComputeShader5>(pDesc);\r
-}\r
-\r
-ID3DX11EffectVariable * SPassBlock::GetAnnotationByIndex(UINT  Index)\r
-{\r
-    return GetAnnotationByIndexHelper("ID3DX11EffectPass", Index, AnnotationCount, pAnnotations);\r
-}\r
-\r
-ID3DX11EffectVariable * SPassBlock::GetAnnotationByName(LPCSTR Name)\r
-{\r
-    return GetAnnotationByNameHelper("ID3DX11EffectPass", Name, AnnotationCount, pAnnotations);\r
-}\r
-\r
-HRESULT SPassBlock::Apply(UINT  Flags, ID3D11DeviceContext* pContext)\r
-{\r
-    HRESULT hr = S_OK;\r
-\r
-    // TODO: Flags are not yet implemented    \r
-\r
-    D3DXASSERT( pEffect->m_pContext == NULL );\r
-    pEffect->m_pContext = pContext;\r
-    pEffect->ApplyPassBlock(this);\r
-    pEffect->m_pContext = NULL;\r
-\r
-lExit:\r
-    return hr;\r
-}\r
-\r
-HRESULT SPassBlock::ComputeStateBlockMask(D3DX11_STATE_BLOCK_MASK *pStateBlockMask)\r
-{\r
-    HRESULT hr = S_OK;\r
-    UINT i, j;\r
-    \r
-    // flags indicating whether the following shader types were caught by assignment checks or not\r
-    BOOL bVS = FALSE, bGS = FALSE, bPS = FALSE, bHS = FALSE, bDS = FALSE, bCS = FALSE;\r
-\r
-    for (i = 0; i < AssignmentCount; ++ i)\r
-    {\r
-        BOOL bShader = FALSE;\r
-        \r
-        switch (pAssignments[i].LhsType)\r
-        {\r
-        case ELHS_VertexShaderBlock:\r
-            bVS = TRUE;\r
-            bShader = TRUE;\r
-            break;\r
-        case ELHS_GeometryShaderBlock:\r
-            bGS = TRUE;\r
-            bShader = TRUE;\r
-            break;\r
-        case ELHS_PixelShaderBlock:\r
-            bPS = TRUE;\r
-            bShader = TRUE;\r
-            break;\r
-        case ELHS_HullShaderBlock:\r
-            bHS = TRUE;\r
-            bShader = TRUE;\r
-            break;\r
-        case ELHS_DomainShaderBlock:\r
-            bDS = TRUE;\r
-            bShader = TRUE;\r
-            break;\r
-        case ELHS_ComputeShaderBlock:\r
-            bCS = TRUE;\r
-            bShader = TRUE;\r
-            break;\r
-\r
-        case ELHS_RasterizerBlock:\r
-            pStateBlockMask->RSRasterizerState = 1;\r
-            break;\r
-        case ELHS_BlendBlock:\r
-            pStateBlockMask->OMBlendState = 1;\r
-            break;\r
-        case ELHS_DepthStencilBlock:\r
-            pStateBlockMask->OMDepthStencilState = 1;\r
-            break;\r
-\r
-        default:            \r
-            // ignore this assignment (must be a scalar/vector assignment associated with a state object)\r
-            break;\r
-        }\r
-\r
-        if (bShader)\r
-        {\r
-            for (j = 0; j < pAssignments[i].MaxElements; ++ j)\r
-            {\r
-                // compute state block mask for the union of ALL shaders\r
-                VH( pAssignments[i].Source.pShader[j].ComputeStateBlockMask(pStateBlockMask) );\r
-            }\r
-        }\r
-    }\r
-\r
-    // go over the state block objects in case there was no corresponding assignment\r
-    if (NULL != BackingStore.pRasterizerBlock)\r
-    {\r
-        pStateBlockMask->RSRasterizerState = 1;\r
-    }\r
-    if (NULL != BackingStore.pBlendBlock)\r
-    {\r
-        pStateBlockMask->OMBlendState = 1;\r
-    }\r
-    if (NULL != BackingStore.pDepthStencilBlock)\r
-    {\r
-        pStateBlockMask->OMDepthStencilState = 1;\r
-    }\r
-\r
-    // go over the shaders only if an assignment didn't already catch them\r
-    if (FALSE == bVS && NULL != BackingStore.pVertexShaderBlock)\r
-    {\r
-        VH( BackingStore.pVertexShaderBlock->ComputeStateBlockMask(pStateBlockMask) );\r
-    }\r
-    if (FALSE == bGS && NULL != BackingStore.pGeometryShaderBlock)\r
-    {\r
-        VH( BackingStore.pGeometryShaderBlock->ComputeStateBlockMask(pStateBlockMask) );\r
-    }\r
-    if (FALSE == bPS && NULL != BackingStore.pPixelShaderBlock)\r
-    {\r
-        VH( BackingStore.pPixelShaderBlock->ComputeStateBlockMask(pStateBlockMask) );\r
-    }\r
-    if (FALSE == bHS && NULL != BackingStore.pHullShaderBlock)\r
-    {\r
-        VH( BackingStore.pHullShaderBlock->ComputeStateBlockMask(pStateBlockMask) );\r
-    }\r
-    if (FALSE == bDS && NULL != BackingStore.pDomainShaderBlock)\r
-    {\r
-        VH( BackingStore.pDomainShaderBlock->ComputeStateBlockMask(pStateBlockMask) );\r
-    }\r
-    if (FALSE == bCS && NULL != BackingStore.pComputeShaderBlock)\r
-    {\r
-        VH( BackingStore.pComputeShaderBlock->ComputeStateBlockMask(pStateBlockMask) );\r
-    }\r
-    \r
-lExit:\r
-    return hr;\r
-}\r
-\r
-//////////////////////////////////////////////////////////////////////////\r
-// ID3DX11EffectTechnique (STechnique implementation)\r
-//////////////////////////////////////////////////////////////////////////\r
-\r
-BOOL STechnique::IsValid()\r
-{ \r
-    if( HasDependencies )\r
-    {\r
-        for( UINT i = 0; i < PassCount; i++ )\r
-        {\r
-            if( !((SPassBlock*)pPasses)[i].IsValid() )\r
-                return FALSE;\r
-        }\r
-        return TRUE;\r
-    }\r
-    return InitiallyValid;\r
-}\r
-\r
-HRESULT STechnique::GetDesc(D3DX11_TECHNIQUE_DESC *pDesc)\r
-{\r
-    HRESULT hr = S_OK;\r
-\r
-    LPCSTR pFuncName = "ID3DX11EffectTechnique::GetDesc";\r
-\r
-    VERIFYPARAMETER(pDesc);\r
-\r
-    pDesc->Name = pName;\r
-    pDesc->Annotations = AnnotationCount;\r
-    pDesc->Passes = PassCount;\r
-\r
-lExit:\r
-    return hr;\r
-}\r
-\r
-ID3DX11EffectVariable * STechnique::GetAnnotationByIndex(UINT  Index)\r
-{\r
-    return GetAnnotationByIndexHelper("ID3DX11EffectTechnique", Index, AnnotationCount, pAnnotations);\r
-}\r
-\r
-ID3DX11EffectVariable * STechnique::GetAnnotationByName(LPCSTR Name)\r
-{\r
-    return GetAnnotationByNameHelper("ID3DX11EffectTechnique", Name, AnnotationCount, pAnnotations);\r
-}\r
-\r
-ID3DX11EffectPass * STechnique::GetPassByIndex(UINT  Index)\r
-{\r
-    LPCSTR pFuncName = "ID3DX11EffectTechnique::GetPassByIndex";\r
-\r
-    if (Index >= PassCount)\r
-    {\r
-        DPF(0, "%s: Invalid pass index (%d, total: %d)", pFuncName, Index, PassCount);\r
-        return &g_InvalidPass;\r
-    }\r
-\r
-    return (ID3DX11EffectPass *)(pPasses + Index);\r
-}\r
-\r
-ID3DX11EffectPass * STechnique::GetPassByName(LPCSTR Name)\r
-{\r
-    LPCSTR pFuncName = "ID3DX11EffectTechnique::GetPassByName";\r
-\r
-    UINT  i;\r
-\r
-    for (i = 0; i < PassCount; ++ i)\r
-    {\r
-        if (NULL != pPasses[i].pName &&\r
-            strcmp(pPasses[i].pName, Name) == 0)\r
-        {\r
-            break;\r
-        }\r
-    }\r
-\r
-    if (i == PassCount)\r
-    {\r
-        DPF(0, "%s: Pass [%s] not found", pFuncName, Name);\r
-        return &g_InvalidPass;\r
-    }\r
-\r
-    return (ID3DX11EffectPass *)(pPasses + i);\r
-}\r
-\r
-HRESULT STechnique::ComputeStateBlockMask(D3DX11_STATE_BLOCK_MASK *pStateBlockMask)\r
-{\r
-    HRESULT hr = S_OK;\r
-    UINT i;\r
-\r
-    for (i = 0; i < PassCount; ++ i)\r
-    {\r
-        VH( ((SPassBlock*)pPasses)[i].ComputeStateBlockMask(pStateBlockMask) );\r
-    }\r
-\r
-lExit:\r
-    return hr;\r
-}\r
-\r
-//////////////////////////////////////////////////////////////////////////\r
-// ID3DX11EffectGroup (SGroup implementation)\r
-//////////////////////////////////////////////////////////////////////////\r
-\r
-BOOL SGroup::IsValid()\r
-{ \r
-    if( HasDependencies )\r
-    {\r
-        for( UINT i = 0; i < TechniqueCount; i++ )\r
-        {\r
-            if( !((STechnique*)pTechniques)[i].IsValid() )\r
-                return FALSE;\r
-        }\r
-        return TRUE;\r
-    }\r
-    return InitiallyValid;\r
-}\r
-\r
-HRESULT SGroup::GetDesc(D3DX11_GROUP_DESC *pDesc)\r
-{\r
-    HRESULT hr = S_OK;\r
-\r
-    LPCSTR pFuncName = "ID3DX11EffectGroup::GetDesc";\r
-\r
-    VERIFYPARAMETER(pDesc);\r
-\r
-    pDesc->Name = pName;\r
-    pDesc->Annotations = AnnotationCount;\r
-    pDesc->Techniques = TechniqueCount;\r
-\r
-lExit:\r
-    return hr;\r
-}\r
-\r
-ID3DX11EffectVariable * SGroup::GetAnnotationByIndex(UINT  Index)\r
-{\r
-    return GetAnnotationByIndexHelper("ID3DX11EffectGroup", Index, AnnotationCount, pAnnotations);\r
-}\r
-\r
-ID3DX11EffectVariable * SGroup::GetAnnotationByName(LPCSTR Name)\r
-{\r
-    return GetAnnotationByNameHelper("ID3DX11EffectGroup", Name, AnnotationCount, pAnnotations);\r
-}\r
-\r
-ID3DX11EffectTechnique * SGroup::GetTechniqueByIndex(UINT  Index)\r
-{\r
-    LPCSTR pFuncName = "ID3DX11EffectGroup::GetTechniqueByIndex";\r
-\r
-    if (Index >= TechniqueCount)\r
-    {\r
-        DPF(0, "%s: Invalid pass index (%d, total: %d)", pFuncName, Index, TechniqueCount);\r
-        return &g_InvalidTechnique;\r
-    }\r
-\r
-    return (ID3DX11EffectTechnique *)(pTechniques + Index);\r
-}\r
-\r
-ID3DX11EffectTechnique * SGroup::GetTechniqueByName(LPCSTR Name)\r
-{\r
-    LPCSTR pFuncName = "ID3DX11EffectGroup::GetTechniqueByName";\r
-\r
-    UINT  i;\r
-\r
-    for (i = 0; i < TechniqueCount; ++ i)\r
-    {\r
-        if (NULL != pTechniques[i].pName &&\r
-            strcmp(pTechniques[i].pName, Name) == 0)\r
-        {\r
-            break;\r
-        }\r
-    }\r
-\r
-    if (i == TechniqueCount)\r
-    {\r
-        DPF(0, "%s: Technique [%s] not found", pFuncName, Name);\r
-        return &g_InvalidTechnique;\r
-    }\r
-\r
-    return (ID3DX11EffectTechnique *)(pTechniques + i);\r
-}\r
-\r
-//////////////////////////////////////////////////////////////////////////\r
-// ID3DX11Effect Public Reflection APIs (CEffect)\r
-//////////////////////////////////////////////////////////////////////////\r
-\r
-HRESULT CEffect::GetDevice(ID3D11Device **ppDevice)\r
-{\r
-    HRESULT hr = S_OK;\r
-    LPCSTR pFuncName = "ID3DX11Effect::GetDevice";\r
-    VERIFYPARAMETER(ppDevice);\r
-\r
-    m_pDevice->AddRef();\r
-    *ppDevice = m_pDevice;\r
-\r
-lExit:\r
-    return hr;\r
-}\r
-\r
-HRESULT CEffect::GetDesc(D3DX11_EFFECT_DESC *pDesc)\r
-{\r
-    HRESULT hr = S_OK;\r
-\r
-    LPCSTR pFuncName = "ID3DX11Effect::GetDesc";\r
-\r
-    VERIFYPARAMETER(pDesc);\r
-\r
-    pDesc->ConstantBuffers = m_CBCount;\r
-    pDesc->GlobalVariables = m_VariableCount;\r
-    pDesc->Techniques = m_TechniqueCount;\r
-    pDesc->Groups = m_GroupCount;\r
-    pDesc->InterfaceVariables = m_InterfaceCount;\r
-\r
-lExit:\r
-    return hr;    \r
-}\r
-\r
-ID3DX11EffectConstantBuffer * CEffect::GetConstantBufferByIndex(UINT  Index)\r
-{\r
-    LPCSTR pFuncName = "ID3DX11Effect::GetConstantBufferByIndex";\r
-\r
-    if (Index < m_CBCount)\r
-    {\r
-        return m_pCBs + Index;\r
-    }\r
-\r
-    DPF(0, "%s: Invalid constant buffer index", pFuncName);\r
-    return &g_InvalidConstantBuffer;\r
-}\r
-\r
-ID3DX11EffectConstantBuffer * CEffect::GetConstantBufferByName(LPCSTR Name)\r
-{\r
-    HRESULT hr = S_OK;\r
-    LPCSTR pFuncName = "ID3DX11Effect::GetConstantBufferByName";\r
-\r
-    if (IsOptimized())\r
-    {\r
-        DPF(0, "%s: Cannot get constant buffer interfaces by name since the effect has been Optimize()'ed", pFuncName);\r
-        return &g_InvalidConstantBuffer;\r
-    }\r
-\r
-    if (NULL == Name)\r
-    {\r
-        DPF(0, "%s: Parameter Name was NULL.", pFuncName);\r
-        return &g_InvalidConstantBuffer;\r
-    }\r
-\r
-    UINT  i;\r
-\r
-    for (i = 0; i < m_CBCount; ++ i)\r
-    {\r
-        if (strcmp(m_pCBs[i].pName, Name) == 0)\r
-        {\r
-            return m_pCBs + i;\r
-        }\r
-    }\r
-\r
-    DPF(0, "%s: Constant Buffer [%s] not found", pFuncName, Name);\r
-    return &g_InvalidConstantBuffer;\r
-}\r
-\r
-ID3DX11EffectVariable * CEffect::GetVariableByIndex(UINT  Index)\r
-{\r
-    LPCSTR pFuncName = "ID3DX11Effect::GetVariableByIndex";\r
-\r
-    if (Index < m_VariableCount)\r
-    {\r
-        return m_pVariables + Index;\r
-    }\r
-\r
-    DPF(0, "%s: Invalid variable index", pFuncName);\r
-    return &g_InvalidScalarVariable;\r
-}\r
-\r
-ID3DX11EffectVariable * CEffect::GetVariableByName(LPCSTR Name)\r
-{\r
-    HRESULT hr = S_OK;\r
-    LPCSTR pFuncName = "ID3DX11Effect::GetVariableByName";\r
-\r
-    if (IsOptimized())\r
-    {\r
-        DPF(0, "%s: Cannot get variable interfaces by name since the effect has been Optimize()'ed", pFuncName);\r
-        return &g_InvalidScalarVariable;\r
-    }\r
-\r
-    if (NULL == Name)\r
-    {\r
-        DPF(0, "%s: Parameter Name was NULL.", pFuncName);\r
-        return &g_InvalidScalarVariable;\r
-    }\r
-\r
-    UINT  i;\r
-\r
-    for (i = 0; i < m_VariableCount; ++ i)\r
-    {\r
-        if (strcmp(m_pVariables[i].pName, Name) == 0)\r
-        {\r
-            return m_pVariables + i;\r
-        }\r
-    }\r
-\r
-    DPF(0, "%s: Variable [%s] not found", pFuncName, Name);\r
-    return &g_InvalidScalarVariable;\r
-}\r
-\r
-ID3DX11EffectVariable * CEffect::GetVariableBySemantic(LPCSTR Semantic)\r
-{    \r
-    LPCSTR pFuncName = "ID3DX11Effect::GetVariableBySemantic";\r
-\r
-    if (IsOptimized())\r
-    {\r
-        DPF(0, "%s: Cannot get variable interfaces by semantic since the effect has been Optimize()'ed", pFuncName);\r
-        return &g_InvalidScalarVariable;\r
-    }\r
-\r
-    if (NULL == Semantic)\r
-    {\r
-        DPF(0, "%s: Parameter Semantic was NULL.", pFuncName);\r
-        return &g_InvalidScalarVariable;\r
-    }\r
-\r
-    UINT  i;\r
-\r
-    for (i = 0; i < m_VariableCount; ++ i)\r
-    {\r
-        if (NULL != m_pVariables[i].pSemantic && \r
-            _stricmp(m_pVariables[i].pSemantic, Semantic) == 0)\r
-        {\r
-            return (ID3DX11EffectVariable *)(m_pVariables + i);\r
-        }\r
-    }\r
-\r
-    DPF(0, "%s: Variable with semantic [%s] not found", pFuncName, Semantic);\r
-    return &g_InvalidScalarVariable;\r
-}\r
-\r
-ID3DX11EffectTechnique * CEffect::GetTechniqueByIndex(UINT  Index)\r
-{\r
-    LPCSTR pFuncName = "ID3DX11Effect::GetTechniqueByIndex";\r
-\r
-    if( Index < m_TechniqueCount )\r
-    {\r
-        UINT i;\r
-        for( i=0; i < m_GroupCount; i++ )\r
-        {\r
-            if( Index < m_pGroups[i].TechniqueCount )\r
-            {\r
-                return (ID3DX11EffectTechnique *)(m_pGroups[i].pTechniques + Index);\r
-            }\r
-            Index -= m_pGroups[i].TechniqueCount;\r
-        }\r
-        D3DXASSERT( FALSE );\r
-    }\r
-    DPF(0, "%s: Invalid technique index (%d)", pFuncName, Index);\r
-    return &g_InvalidTechnique;\r
-}\r
-\r
-ID3DX11EffectTechnique * CEffect::GetTechniqueByName(LPCSTR Name)\r
-{\r
-    HRESULT hr = S_OK;\r
-    LPCSTR pFuncName = "ID3DX11Effect::GetTechniqueByName";\r
-    const UINT MAX_GROUP_TECHNIQUE_SIZE = 256;\r
-    char NameCopy[MAX_GROUP_TECHNIQUE_SIZE];\r
-\r
-    if (IsOptimized())\r
-    {\r
-        DPF(0, "ID3DX11Effect::GetTechniqueByName: Cannot get technique interfaces by name since the effect has been Optimize()'ed");\r
-        return &g_InvalidTechnique;\r
-    }\r
-\r
-    if (NULL == Name)\r
-    {\r
-        DPF(0, "%s: Parameter Name was NULL.", pFuncName);\r
-        return &g_InvalidTechnique;\r
-    }\r
-\r
-    if( FAILED( StringCchCopyA( NameCopy, MAX_GROUP_TECHNIQUE_SIZE, Name ) ) )\r
-    {\r
-        DPF( 0, "Group|Technique name has a length greater than %d.", MAX_GROUP_TECHNIQUE_SIZE );\r
-        return &g_InvalidTechnique;\r
-    }\r
-\r
-    char* pDelimiter = strchr( NameCopy, '|' );\r
-    if( pDelimiter == NULL )\r
-    {\r
-        if ( m_pNullGroup == NULL )\r
-        {\r
-            DPF( 0, "The effect contains no default group." );\r
-            return &g_InvalidTechnique;\r
-        }\r
-\r
-        return m_pNullGroup->GetTechniqueByName( Name );\r
-    }\r
-\r
-    // separate group name and technique name\r
-    *pDelimiter = 0; \r
-\r
-    return GetGroupByName( NameCopy )->GetTechniqueByName( pDelimiter + 1 );\r
-}\r
-\r
-ID3D11ClassLinkage * CEffect::GetClassLinkage()\r
-{\r
-    SAFE_ADDREF( m_pClassLinkage );\r
-    return m_pClassLinkage;\r
-}\r
-\r
-ID3DX11EffectGroup * CEffect::GetGroupByIndex(UINT  Index)\r
-{\r
-    LPCSTR pFuncName = "ID3DX11Effect::GetGroupByIndex";\r
-\r
-    if( Index < m_GroupCount )\r
-    {\r
-        return (ID3DX11EffectGroup *)(m_pGroups + Index);\r
-    }\r
-    DPF(0, "%s: Invalid group index (%d)", pFuncName, Index);\r
-    return &g_InvalidGroup;\r
-}\r
-\r
-ID3DX11EffectGroup * CEffect::GetGroupByName(LPCSTR Name)\r
-{\r
-    HRESULT hr = S_OK;\r
-    LPCSTR pFuncName = "ID3DX11Effect::GetGroupByName";\r
-\r
-    if (IsOptimized())\r
-    {\r
-        DPF(0, "ID3DX11Effect::GetGroupByName: Cannot get group interfaces by name since the effect has been Optimize()'ed");\r
-        return &g_InvalidGroup;\r
-    }\r
-\r
-    if (NULL == Name || Name[0] == 0 )\r
-    {\r
-        return m_pNullGroup ? (ID3DX11EffectGroup *)m_pNullGroup : &g_InvalidGroup;\r
-    }\r
-\r
-    UINT  i;\r
-\r
-    for (i = 0; i < m_GroupCount; ++ i)\r
-    {\r
-        if (NULL != m_pGroups[i].pName && \r
-            strcmp(m_pGroups[i].pName, Name) == 0)\r
-        {\r
-            break;\r
-        }\r
-    }\r
-\r
-    if (i == m_GroupCount)\r
-    {\r
-        DPF(0, "%s: Group [%s] not found", pFuncName, Name);\r
-        return &g_InvalidGroup;\r
-    }\r
-\r
-    return (ID3DX11EffectGroup *)(m_pGroups + i);\r
-}\r
-\r
-}\r