Exemplo n.º 1
0
        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());
            }
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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());
            }
        }