Esempio n. 1
0
        private void WriteResourceBinding(IrResourceBinding binding)
        {
            if (binding.Kind == IrResourceKind.CBuffer || binding.Kind == IrResourceKind.TBuffer)
            {
                WriteLineFormat("//{0} {1}", binding.Kind, binding.Name);
                return;
            }
            var typeName = GetBindingTypeName(binding);

            WriteFormat("{0}", typeName);
            if (binding.ReturnType != null)
            {
                var dimStr = binding.Dimension > 0 ? $", {binding.Dimension}" : "";
                if (binding.ReturnType.VariableClass == ShaderVariableClass.Struct)
                {
                    WriteFormat("<struct {0}>", binding.ReturnType.BaseTypeName);
                }
                else
                {
                    WriteFormat("<{0}{1}>", GetShaderTypeDeclaration(binding.ReturnType), dimStr);
                }
            }
            WriteFormat(" {0}", binding.Name);
            if (binding.BindCount > 0)
            {
                WriteFormat("[{0}]", binding.BindCount);
            }
            if (EmitRegisterDeclarations)
            {
                WriteFormat(" : register({0})", binding.GetBindPointDescription());
            }
            WriteLine(";");
        }
Esempio n. 2
0
        static IrResourceBinding ParseBinding(ResourceBinding binding)
        {
            var irBinding = new IrResourceBinding()
            {
                Name      = binding.Name,
                Class     = GetResourceClass(binding),
                Kind      = GetResourceKind(binding),
                Dimension = binding.NumSamples == uint.MaxValue ? 0 : binding.NumSamples,
                BindPoint = binding.BindPoint,
                BindCount = binding.BindCount,
                Debug     = binding.ToString()
            };

            if ((irBinding.Class == IrResourceClass.SRV || irBinding.Class == IrResourceClass.UAV) &&
                irBinding.Kind != IrResourceKind.TBuffer)
            {
                irBinding.ReturnType = ParseShaderReturnType(binding);
            }
            return(irBinding);
        }
Esempio n. 3
0
        string GetBindingTypeName(IrResourceBinding binding)
        {
            switch (binding.Class)
            {
            case IrResourceClass.CBuffer:
                return("cbuffer");

            case IrResourceClass.Sampler:
                return("SamplerState");

            case IrResourceClass.SRV:
                switch (binding.Kind)
                {
                case IrResourceKind.Texture1D:
                    return("Texture1D");

                case IrResourceKind.Texture2D:
                    return("Texture2D");

                case IrResourceKind.Texture2DMS:
                    return("Texture2DMS");

                case IrResourceKind.Texture3D:
                    return("Texture3D");

                case IrResourceKind.TextureCube:
                    return("TextureCube");

                case IrResourceKind.Texture1DArray:
                    return("Texture1DArray");

                case IrResourceKind.Texture2DArray:
                    return("Texture2DArray");

                case IrResourceKind.Texture2DMSArray:
                    return("Texture2DMSArray");

                case IrResourceKind.TextureCubeArray:
                    return("TextureCubeArray");

                case IrResourceKind.TypedBuffer:
                    return("Buffer");

                case IrResourceKind.RawBuffer:
                    return("ByteAddressBuffer");

                case IrResourceKind.StructuredBuffer:
                    return("StructuredBuffer");

                default:
                    return($"Invalid_{binding.Class}_{binding.Kind}");
                }

            case IrResourceClass.UAV:
                switch (binding.Kind)
                {
                case IrResourceKind.Texture1D:
                    return("RWTexture1D");

                case IrResourceKind.Texture2D:
                    return("RWTexture2D");

                case IrResourceKind.Texture2DMS:
                    return("RWTexture2DMS");

                case IrResourceKind.Texture3D:
                    return("RWTexture3D");

                case IrResourceKind.TextureCube:
                    return("RWTextureCube");

                case IrResourceKind.Texture1DArray:
                    return("RWTexture1DArray");

                case IrResourceKind.Texture2DArray:
                    return("RWTexture2DArray");

                case IrResourceKind.Texture2DMSArray:
                    return("RWTexture2DMSArray");

                case IrResourceKind.TextureCubeArray:
                    return("RWTextureCubeArray");

                case IrResourceKind.TypedBuffer:
                    return("RWBuffer");

                case IrResourceKind.RawBuffer:
                    return("RWByteAddressBuffer");

                case IrResourceKind.StructuredBuffer:
                    return("RWStructuredBuffer");

                default:
                    return($"Invalid_{binding.Class}_{binding.Kind}");
                }

            default:
                return($"Invalid_{binding.Class}_{binding.Kind}");
            }
        }