private void EmitShaderBinds( IEmitBlock block, string prefix, EmitContextHLSL hlslContext) { block.CallCOM( SubmitContext, "ID3D11DeviceContext", string.Format("{0}SetConstantBuffers", prefix), block.LiteralU32(0), block.LiteralU32(1), block.GetArrow(SubmitThis, EmitPass.CBField).GetAddress()); var resources = hlslContext.ShaderResources.ToArray(); var resourceCount = resources.Length; if (resourceCount != 0) { var resourceVals = (from r in resources select EmitContext.EmitExp(r, block, SubmitEnv)).ToArray(); var resourcesVal = block.Temp( string.Format("{0}Resources", prefix), block.Array( EmitTarget.GetOpaqueType("ID3D11ShaderResourceView*"), resourceVals)); block.CallCOM( SubmitContext, "ID3D11DeviceContext", string.Format("{0}SetShaderResources", prefix), block.LiteralU32(0), block.LiteralU32((UInt32)resourceCount), resourcesVal.GetAddress()); } var samplers = hlslContext.SamplerStates.ToArray(); var samplerCount = samplers.Length; if (samplerCount != 0) { var samplerVals = (from s in samplers select EmitContext.EmitExp(s, block, SubmitEnv)).ToArray(); var samplersVal = block.Temp( string.Format("{0}Samplers", prefix), block.Array( EmitTarget.GetOpaqueType("ID3D11SamplerState*"), samplerVals)); block.CallCOM( SubmitContext, "ID3D11DeviceContext", string.Format("{0}SetSamplers", prefix), block.LiteralU32(0), block.LiteralU32((UInt32)samplerCount), samplersVal.GetAddress()); } }
public IEmitVal EmitAttributeRef( MidAttributeDecl decl, IEmitBlock block, EmitEnv env) { if (env.ContainsKey(decl)) { return(env.Lookup(decl, block)); } IEmitVal attributeVal = null; if (decl.Exp != null) { attributeVal = block.Temp( decl.Name.ToString(), EmitExp(decl.Exp, block, env)); } else { // \todo: This is a *huge* hack, // since we use @Constant attributes // to make various D3D constants visible... :( attributeVal = block.BuiltinApp( EmitType(decl.Type, env), decl.Name.ToString(), null); } env.Insert(decl, (b) => attributeVal); return(attributeVal); }