0

I am currently working on implementing dynamic shader linkage into my shader reflection code. It works quite nicely, but to make my code as dynamic as possible i would like to automate the process of getting the offset into the dynamicLinkageArray. Microsoft suggests something like this in their sample:

g_iNumPSInterfaces = pReflector->GetNumInterfaceSlots(); 
g_dynamicLinkageArray = (ID3D11ClassInstance**) malloc( sizeof(ID3D11ClassInstance*) * g_iNumPSInterfaces );
if ( !g_dynamicLinkageArray )
    return E_FAIL;

ID3D11ShaderReflectionVariable* pAmbientLightingVar = pReflector->GetVariableByName("g_abstractAmbientLighting");
g_iAmbientLightingOffset = pAmbientLightingVar->GetInterfaceSlot(0);

I would like to this without giving the exact name, so when the shader changes i do not have to manually change this code. To accomplish this i would need to get the name i marked below through shader reflection. Is this possible? I searched through the References of the Shader-Reflection but did not find anything useful, besides the number of interface slots (GetNumInterfaceSlots()).

#include "BasicShader_PSBuffers.hlsli"

iBaseLight     g_abstractAmbientLighting;
               ^^^^^^^^^^^^^^^^^^^^^^^^^^

struct PixelInput
{
    float4 position : SV_POSITION;
    float3 normals : NORMAL;
    float2 tex: TEXCOORD0;
};

float4 main(PixelInput input) : SV_TARGET
{
    float3 Ambient = (float3)0.0f;
    Ambient = g_txDiffuse.Sample(g_samplerLin, input.tex) * g_abstractAmbientLighting.IlluminateAmbient(input.normals);

    return float4(saturate(Ambient), 1.0f);
}

If this is not possible, how would one go about this? Just add anything i can think of there so that i have to change as little as possible manually?

Thanks in advance

puelo
  • 5,464
  • 2
  • 34
  • 62
  • You can iterate trough all variables using GetVariableByIndex instead, then use GetDesc on ID3D11ShaderReflectionVariable to retrieve name/offsets... – mrvux Jun 23 '14 at 10:27
  • Holy jebus, I am flabbergasted that they are still producing C++ samples that call malloc. Hello, the 1980s called and they want their code back! – legalize Jul 03 '14 at 15:03

0 Answers0