1) Do you create separate immutable constant buffers (ID3D11Buffer*) for each material instance (StateGroup in your terminology from other thread) during loading?
(if i understand you correctly, material parameters defined by artists don't change at runtime so the CBs can be simply bound to slots without costly updating.)
2) How is your StateGroup structure defined in code?
How do you resolve pointers to graphics resources when loading StateGroups?
Does your low-level platform-independent graphics layer have functions like UpdateConstantBuffer(), SetConstantBuffers(), SetSamplers(), SetTextures() ?
mine goes like this:
// shader dependencies
struct rsShaderPass
{
TBuffer< HUniformBuffer > CBsItems; // handles to constant buffers
UINT16 CBsStart;
TBuffer< HSamplerState > SSsItems; // handles to sampler states
UINT16 SSsStart;
TBuffer< HShaderResource > SRsItems; // handles to shader resources
UINT16 SRsStart;
// metadata for resolving shader dependencies (@todo: get rid of this crap)
rsShaderPassInfo meta;
};

Find content
Not Telling