本文整理汇总了C#中System.Function.ResolveLocalParameter方法的典型用法代码示例。如果您正苦于以下问题:C# Function.ResolveLocalParameter方法的具体用法?C# Function.ResolveLocalParameter怎么用?C# Function.ResolveLocalParameter使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类System.Function
的用法示例。
在下文中一共展示了Function.ResolveLocalParameter方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: GenerateLocalSplitParameters
/// <summary>
/// Generates local parameters for the split parameters and perform packing/unpacking operation using them.
/// </summary>
/// <param name="fun"> </param>
/// <param name="progType"> </param>
/// <param name="mergedParams"> </param>
/// <param name="splitParams"> </param>
/// <param name="localParamsMap"> </param>
internal static void GenerateLocalSplitParameters( Function func, GpuProgramType progType,
List<MergeParameter> mergedParams,
List<Parameter> splitParams,
Dictionary<Parameter, Parameter> localParamsMap )
{
//No split params created.
if ( splitParams.Count == 0 )
{
return;
}
//Create the local parameters + map from source to local
for ( int i = 0; i < splitParams.Count; i++ )
{
Parameter srcParameter = splitParams[ i ];
Parameter localParameter = func.ResolveLocalParameter( srcParameter.Semantic, srcParameter.Index,
"lssplit_" + srcParameter.Name, srcParameter.Type );
localParamsMap.Add( srcParameter, localParameter );
}
int invocationCounter = 0;
//Establish link between the local parameter to the merged parameter.
for ( int i = 0; i < mergedParams.Count; i++ )
{
var curMergeParameter = mergedParams[ i ];
for ( int p = 0; p < curMergeParameter.SourceParameterCount; p++ )
{
Parameter srcMergedParameter = curMergeParameter.SourceParameter[ p ];
if ( localParamsMap.ContainsKey( srcMergedParameter ) )
{
//Case it is the vertex shader -> assign the local parameter to the output merged parameter
if ( progType == GpuProgramType.Vertex )
{
var curFuncInvocation = new FunctionInvocation( FFPRenderState.FFPFuncAssign,
(int)
FFPRenderState.FFPVertexShaderStage.
VSPostProcess, invocationCounter++ );
curFuncInvocation.PushOperand( localParamsMap[ srcMergedParameter ], Operand.OpSemantic.In,
curMergeParameter.GetSourceParameterMask( p ) );
curFuncInvocation.PushOperand(
curMergeParameter.GetDestinationParameter( (int)Operand.OpSemantic.Out, i ),
Operand.OpSemantic.Out, curMergeParameter.GetDestinationParameterMask( p ) );
func.AddAtomInstance( curFuncInvocation );
}
else if ( progType == GpuProgramType.Fragment )
{
var curFuncInvocation = new FunctionInvocation( FFPRenderState.FFPFuncAssign,
(int)
FFPRenderState.FFPFragmentShaderStage.
PSPreProcess, invocationCounter++ );
curFuncInvocation.PushOperand(
curMergeParameter.GetDestinationParameter( (int)Operand.OpSemantic.In, i ),
Operand.OpSemantic.In, curMergeParameter.GetDestinationParameterMask( p ) );
curFuncInvocation.PushOperand( localParamsMap[ srcMergedParameter ], Operand.OpSemantic.Out,
curMergeParameter.GetSourceParameterMask( p ) );
func.AddAtomInstance( curFuncInvocation );
}
}
}
}
}