internal unsafe void __MarshalFrom(ref __Native @ref)
        {
            Parameters = new RootParameter[@ref.NumParameters];
            if (@ref.NumParameters > 0)
            {
                Interop.Read(@ref.PParameters, Parameters);
            }

            StaticSamplers = new StaticSamplerDescription[@ref.NumStaticSamplers];
            if (@ref.NumStaticSamplers > 0)
            {
                Interop.Read(@ref.PStaticSamplers, StaticSamplers);
            }

            Flags = @ref.Flags;
        }
Ejemplo n.º 2
0
 internal void ReloadLocalRootSignature(IReadOnlyList <ResourceAccessType> Descs)
 {
     descs = Descs.ToArray();
     flags = RootSignatureFlags.LocalRootSignature;
 }
Ejemplo n.º 3
0
 public void ReloadCompute(IReadOnlyList <ResourceAccessType> Descs)
 {
     descs = Descs.ToArray();
     flags = RootSignatureFlags.AllowInputAssemblerInputLayout;
 }
Ejemplo n.º 4
0
 public void Reload(ResourceAccessType[] Descs)
 {
     descs = Descs.ToArray();
     flags = RootSignatureFlags.AllowInputAssemblerInputLayout;
 }
Ejemplo n.º 5
0
 /// <summary>
 /// Initializes a new instance of the <see cref="RootSignatureDescription"/> class.
 /// </summary>
 /// <param name="flags">The flags.</param>
 /// <param name="parameters">The parameters.</param>
 /// <param name="samplers">The samplers.</param>
 public RootSignatureDescription(RootSignatureFlags flags, RootParameter[] parameters = null, StaticSamplerDescription[] samplers = null)
 {
     Parameters     = parameters;
     StaticSamplers = samplers;
     Flags          = flags;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="RootSignatureDescription"/> class.
 /// </summary>
 /// <param name="flags">The flags.</param>
 /// <param name="parameters">The parameters.</param>
 /// <param name="samplers">The samplers.</param>
 public RootSignatureDescription(RootSignatureFlags flags, RootParameter[] parameters = null, StaticSamplerDescription[] samplers = null)
 {
     Parameters = parameters;
     StaticSamplers = samplers;
     Flags = flags;
 }
Ejemplo n.º 7
0
 private RootSignatureDescription(int parameterCount, IntPtr nativeParameters, int samplerCount, IntPtr nativeSamplers, RootSignatureFlags flags)
 {
     Parameters = new RootParameterArray(parameterCount, nativeParameters);
     StaticSamplers = new StaticSamplerArray(samplerCount, nativeSamplers);
     Flags = flags;
 }
Ejemplo n.º 8
0
 public RootSignatureDescription(RootSignatureFlags flags, RootParameter[] parameters = null, StaticSamplerDescription[] samplers = null)
 {
     Parameters = new RootParameterArray(parameters);
     StaticSamplers = new StaticSamplerArray(samplers);
     Flags = flags;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="RootSignatureDescription"/> class.
 /// </summary>
 /// <param name="flags">The flags.</param>
 /// <param name="parameters">The parameters.</param>
 /// <param name="samplers">The samplers.</param>
 public RootSignatureDescription(RootSignatureFlags flags, RootParameter[]?parameters = default, StaticSamplerDescription[]?samplers = default)
 {
     Parameters     = parameters;
     StaticSamplers = samplers;
     Flags          = flags;
 }
Ejemplo n.º 10
0
 private RootSignatureDescription(int parameterCount, IntPtr nativeParameters, int samplerCount, IntPtr nativeSamplers, RootSignatureFlags flags)
 {
     Parameters     = new RootParameterArray(parameterCount, nativeParameters);
     StaticSamplers = new StaticSamplerArray(samplerCount, nativeSamplers);
     Flags          = flags;
 }
Ejemplo n.º 11
0
 public RootSignatureDescription(RootSignatureFlags flags, RootParameter[] parameters = null, StaticSampler[] samplers = null)
 {
     Parameters     = new RootParameterArray(parameters);
     StaticSamplers = new StaticSamplerArray(samplers);
     Flags          = flags;
 }
Ejemplo n.º 12
0
        public Boolean Finalize(RootSignatureFlags flags)
        {
            if (m_Finalized)
            {
                return(false);
            }

            if (m_NumInitializedStaticSamplers != m_NumSamplers)
            {
                return(false);
            }

            // make root parameter array
            List <RootParameter> rootParams = new List <RootParameter>();

            foreach (H1RootParameterDX12 param in m_ParamArray)
            {
                rootParams.Add(param.Parameter);
            }

            // create root signature description
            RootSignatureDescription rootSigDesc = new RootSignatureDescription(flags, rootParams.ToArray(), m_SamplerArray.ToArray());

            // clear descriptor table bit map
            for (Int32 i = 0; i < m_DescriptorTableBitMap.Count; ++i)
            {
                m_DescriptorTableBitMap[i] = false;
            }

            m_MaxDescriptorCacheHandleCount = 0;

            for (Int32 param = 0; param < m_NumParameters; ++param)
            {
                RootParameter rootParam = rootSigDesc.Parameters[param];
                m_DescriptorTableSize[param] = 0;

                if (rootParam.ParameterType == RootParameterType.DescriptorTable)
                {
                    // if there is no descriptor range for descriptor table
                    if (rootParam.DescriptorTable.Count() == 0)
                    {
                        return(false);
                    }

                    // we don't care about sampler descriptor tables
                    // we don't manage them in descriptor cache
                    if (rootParam.DescriptorTable[0].RangeType == DescriptorRangeType.Sampler)
                    {
                        continue;
                    }

                    // set the descriptor table bit map as true
                    m_DescriptorTableBitMap[param] = true;
                    // looping descriptor table and calculate descriptor table size for current root parameter
                    for (Int32 tableRange = 0; tableRange < rootParam.DescriptorTable.Count(); ++tableRange)
                    {
                        m_DescriptorTableSize[param] += rootParam.DescriptorTable[tableRange].DescriptorCount;
                    }

                    m_MaxDescriptorCacheHandleCount += m_DescriptorTableSize[param];
                }
            }

            // create root signature instance
            Device deviceRef = H1Global <H1ManagedRenderer> .Instance.Device;

            m_RootSignature = deviceRef.CreateRootSignature(rootSigDesc.Serialize());

            // mark as finalized
            m_Finalized = true;

            return(true);
        }