Merge pull request #1051 from LoopDawg/bug-1049
HLSL: allow split type in InputPatch template type, & HS return types.
This commit is contained in:
commit
346dd7c747
@ -3555,7 +3555,7 @@ spv::Id TGlslangToSpvTraverser::handleUserFunctionCall(const glslang::TIntermAgg
|
|||||||
const glslang::TIntermSequence& glslangArgs = node->getSequence();
|
const glslang::TIntermSequence& glslangArgs = node->getSequence();
|
||||||
const glslang::TQualifierList& qualifiers = node->getQualifierList();
|
const glslang::TQualifierList& qualifiers = node->getQualifierList();
|
||||||
|
|
||||||
// Encapsulate lvalue logic, used in two places below, for safety.
|
// Encapsulate lvalue logic, used in several places below, for safety.
|
||||||
const auto isLValue = [](int qualifier, const glslang::TType& paramType) -> bool {
|
const auto isLValue = [](int qualifier, const glslang::TType& paramType) -> bool {
|
||||||
return qualifier != glslang::EvqConstReadOnly || paramType.containsOpaque();
|
return qualifier != glslang::EvqConstReadOnly || paramType.containsOpaque();
|
||||||
};
|
};
|
||||||
|
@ -32,7 +32,7 @@ vertex spacing = equal_spacing
|
|||||||
0:? 'm_cpid' ( temp uint)
|
0:? 'm_cpid' ( temp uint)
|
||||||
0:? 'm_cpid' ( in uint InvocationID)
|
0:? 'm_cpid' ( in uint InvocationID)
|
||||||
0:26 move second child to first child ( temp structure{ temp 3-component vector of float cpoint})
|
0:26 move second child to first child ( temp structure{ temp 3-component vector of float cpoint})
|
||||||
0:26 indirect index ( temp structure{ temp 3-component vector of float cpoint})
|
0:26 indirect index (layout( location=0) out structure{ temp 3-component vector of float cpoint})
|
||||||
0:? '@entryPointOutput' (layout( location=0) out 4-element array of structure{ temp 3-component vector of float cpoint})
|
0:? '@entryPointOutput' (layout( location=0) out 4-element array of structure{ temp 3-component vector of float cpoint})
|
||||||
0:? 'm_cpid' ( in uint InvocationID)
|
0:? 'm_cpid' ( in uint InvocationID)
|
||||||
0:26 Function Call: @main(struct-VS_OUT-vf31[4];u1; ( temp structure{ temp 3-component vector of float cpoint})
|
0:26 Function Call: @main(struct-VS_OUT-vf31[4];u1; ( temp structure{ temp 3-component vector of float cpoint})
|
||||||
@ -146,7 +146,7 @@ vertex spacing = equal_spacing
|
|||||||
0:? 'm_cpid' ( temp uint)
|
0:? 'm_cpid' ( temp uint)
|
||||||
0:? 'm_cpid' ( in uint InvocationID)
|
0:? 'm_cpid' ( in uint InvocationID)
|
||||||
0:26 move second child to first child ( temp structure{ temp 3-component vector of float cpoint})
|
0:26 move second child to first child ( temp structure{ temp 3-component vector of float cpoint})
|
||||||
0:26 indirect index ( temp structure{ temp 3-component vector of float cpoint})
|
0:26 indirect index (layout( location=0) out structure{ temp 3-component vector of float cpoint})
|
||||||
0:? '@entryPointOutput' (layout( location=0) out 4-element array of structure{ temp 3-component vector of float cpoint})
|
0:? '@entryPointOutput' (layout( location=0) out 4-element array of structure{ temp 3-component vector of float cpoint})
|
||||||
0:? 'm_cpid' ( in uint InvocationID)
|
0:? 'm_cpid' ( in uint InvocationID)
|
||||||
0:26 Function Call: @main(struct-VS_OUT-vf31[4];u1; ( temp structure{ temp 3-component vector of float cpoint})
|
0:26 Function Call: @main(struct-VS_OUT-vf31[4];u1; ( temp structure{ temp 3-component vector of float cpoint})
|
||||||
|
@ -28,7 +28,7 @@ vertex spacing = equal_spacing
|
|||||||
0:? 'ip' ( temp 4-element array of structure{ temp 3-component vector of float cpoint})
|
0:? 'ip' ( temp 4-element array of structure{ temp 3-component vector of float cpoint})
|
||||||
0:? 'ip' (layout( location=0) in 4-element array of structure{ temp 3-component vector of float cpoint})
|
0:? 'ip' (layout( location=0) in 4-element array of structure{ temp 3-component vector of float cpoint})
|
||||||
0:26 move second child to first child ( temp structure{ temp 3-component vector of float cpoint})
|
0:26 move second child to first child ( temp structure{ temp 3-component vector of float cpoint})
|
||||||
0:26 indirect index ( temp structure{ temp 3-component vector of float cpoint})
|
0:26 indirect index (layout( location=0) out structure{ temp 3-component vector of float cpoint})
|
||||||
0:? '@entryPointOutput' (layout( location=0) out 4-element array of structure{ temp 3-component vector of float cpoint})
|
0:? '@entryPointOutput' (layout( location=0) out 4-element array of structure{ temp 3-component vector of float cpoint})
|
||||||
0:? 'InvocationId' ( in uint InvocationID)
|
0:? 'InvocationId' ( in uint InvocationID)
|
||||||
0:26 Function Call: @main(struct-VS_OUT-vf31[4]; ( temp structure{ temp 3-component vector of float cpoint})
|
0:26 Function Call: @main(struct-VS_OUT-vf31[4]; ( temp structure{ temp 3-component vector of float cpoint})
|
||||||
@ -140,7 +140,7 @@ vertex spacing = equal_spacing
|
|||||||
0:? 'ip' ( temp 4-element array of structure{ temp 3-component vector of float cpoint})
|
0:? 'ip' ( temp 4-element array of structure{ temp 3-component vector of float cpoint})
|
||||||
0:? 'ip' (layout( location=0) in 4-element array of structure{ temp 3-component vector of float cpoint})
|
0:? 'ip' (layout( location=0) in 4-element array of structure{ temp 3-component vector of float cpoint})
|
||||||
0:26 move second child to first child ( temp structure{ temp 3-component vector of float cpoint})
|
0:26 move second child to first child ( temp structure{ temp 3-component vector of float cpoint})
|
||||||
0:26 indirect index ( temp structure{ temp 3-component vector of float cpoint})
|
0:26 indirect index (layout( location=0) out structure{ temp 3-component vector of float cpoint})
|
||||||
0:? '@entryPointOutput' (layout( location=0) out 4-element array of structure{ temp 3-component vector of float cpoint})
|
0:? '@entryPointOutput' (layout( location=0) out 4-element array of structure{ temp 3-component vector of float cpoint})
|
||||||
0:? 'InvocationId' ( in uint InvocationID)
|
0:? 'InvocationId' ( in uint InvocationID)
|
||||||
0:26 Function Call: @main(struct-VS_OUT-vf31[4]; ( temp structure{ temp 3-component vector of float cpoint})
|
0:26 Function Call: @main(struct-VS_OUT-vf31[4]; ( temp structure{ temp 3-component vector of float cpoint})
|
||||||
|
@ -28,7 +28,7 @@ vertex spacing = equal_spacing
|
|||||||
0:? 'ip' ( temp 4-element array of structure{ temp 3-component vector of float cpoint})
|
0:? 'ip' ( temp 4-element array of structure{ temp 3-component vector of float cpoint})
|
||||||
0:? 'ip' (layout( location=0) in 4-element array of structure{ temp 3-component vector of float cpoint})
|
0:? 'ip' (layout( location=0) in 4-element array of structure{ temp 3-component vector of float cpoint})
|
||||||
0:26 move second child to first child ( temp structure{ temp 3-component vector of float cpoint})
|
0:26 move second child to first child ( temp structure{ temp 3-component vector of float cpoint})
|
||||||
0:26 indirect index ( temp structure{ temp 3-component vector of float cpoint})
|
0:26 indirect index (layout( location=0) out structure{ temp 3-component vector of float cpoint})
|
||||||
0:? '@entryPointOutput' (layout( location=0) out 4-element array of structure{ temp 3-component vector of float cpoint})
|
0:? '@entryPointOutput' (layout( location=0) out 4-element array of structure{ temp 3-component vector of float cpoint})
|
||||||
0:? 'InvocationId' ( in uint InvocationID)
|
0:? 'InvocationId' ( in uint InvocationID)
|
||||||
0:26 Function Call: @main(struct-VS_OUT-vf31[4]; ( temp structure{ temp 3-component vector of float cpoint})
|
0:26 Function Call: @main(struct-VS_OUT-vf31[4]; ( temp structure{ temp 3-component vector of float cpoint})
|
||||||
@ -140,7 +140,7 @@ vertex spacing = equal_spacing
|
|||||||
0:? 'ip' ( temp 4-element array of structure{ temp 3-component vector of float cpoint})
|
0:? 'ip' ( temp 4-element array of structure{ temp 3-component vector of float cpoint})
|
||||||
0:? 'ip' (layout( location=0) in 4-element array of structure{ temp 3-component vector of float cpoint})
|
0:? 'ip' (layout( location=0) in 4-element array of structure{ temp 3-component vector of float cpoint})
|
||||||
0:26 move second child to first child ( temp structure{ temp 3-component vector of float cpoint})
|
0:26 move second child to first child ( temp structure{ temp 3-component vector of float cpoint})
|
||||||
0:26 indirect index ( temp structure{ temp 3-component vector of float cpoint})
|
0:26 indirect index (layout( location=0) out structure{ temp 3-component vector of float cpoint})
|
||||||
0:? '@entryPointOutput' (layout( location=0) out 4-element array of structure{ temp 3-component vector of float cpoint})
|
0:? '@entryPointOutput' (layout( location=0) out 4-element array of structure{ temp 3-component vector of float cpoint})
|
||||||
0:? 'InvocationId' ( in uint InvocationID)
|
0:? 'InvocationId' ( in uint InvocationID)
|
||||||
0:26 Function Call: @main(struct-VS_OUT-vf31[4]; ( temp structure{ temp 3-component vector of float cpoint})
|
0:26 Function Call: @main(struct-VS_OUT-vf31[4]; ( temp structure{ temp 3-component vector of float cpoint})
|
||||||
|
681
Test/baseResults/hlsl.hull.4.tesc.out
Normal file
681
Test/baseResults/hlsl.hull.4.tesc.out
Normal file
@ -0,0 +1,681 @@
|
|||||||
|
hlsl.hull.4.tesc
|
||||||
|
Shader version: 500
|
||||||
|
vertices = 3
|
||||||
|
vertex spacing = fractional_odd_spacing
|
||||||
|
triangle order = cw
|
||||||
|
0:? Sequence
|
||||||
|
0:25 Function Definition: HS_ConstFunc(struct-HS_Input-vf4-vf41[3]; ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
|
||||||
|
0:25 Function Parameters:
|
||||||
|
0:25 'I' ( in 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
|
||||||
|
0:? Sequence
|
||||||
|
0:26 Sequence
|
||||||
|
0:26 move second child to first child ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
|
||||||
|
0:26 'O' ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
|
||||||
|
0:26 Constant:
|
||||||
|
0:26 0.000000
|
||||||
|
0:26 0.000000
|
||||||
|
0:26 0.000000
|
||||||
|
0:26 0.000000
|
||||||
|
0:28 move second child to first child ( temp float)
|
||||||
|
0:28 fInsideTessFactor: direct index for structure ( temp float)
|
||||||
|
0:28 'O' ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
|
||||||
|
0:28 Constant:
|
||||||
|
0:28 1 (const int)
|
||||||
|
0:28 add ( temp float)
|
||||||
|
0:28 direct index ( temp float)
|
||||||
|
0:28 m_Position: direct index for structure ( temp 4-component vector of float)
|
||||||
|
0:28 direct index ( temp structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
|
||||||
|
0:28 'I' ( in 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
|
||||||
|
0:28 Constant:
|
||||||
|
0:28 0 (const int)
|
||||||
|
0:28 Constant:
|
||||||
|
0:28 0 (const int)
|
||||||
|
0:28 Constant:
|
||||||
|
0:28 3 (const int)
|
||||||
|
0:28 direct index ( temp float)
|
||||||
|
0:28 m_Normal: direct index for structure ( temp 4-component vector of float)
|
||||||
|
0:28 direct index ( temp structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
|
||||||
|
0:28 'I' ( in 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
|
||||||
|
0:28 Constant:
|
||||||
|
0:28 0 (const int)
|
||||||
|
0:28 Constant:
|
||||||
|
0:28 1 (const int)
|
||||||
|
0:28 Constant:
|
||||||
|
0:28 3 (const int)
|
||||||
|
0:30 Branch: Return with expression
|
||||||
|
0:30 'O' ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
|
||||||
|
0:39 Function Definition: @main(struct-HS_Input-vf4-vf41[3];u1; ( temp structure{ temp 4-component vector of float m_Position})
|
||||||
|
0:39 Function Parameters:
|
||||||
|
0:39 'I' ( in 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
|
||||||
|
0:39 'cpid' ( in uint)
|
||||||
|
0:? Sequence
|
||||||
|
0:40 Sequence
|
||||||
|
0:40 move second child to first child ( temp structure{ temp 4-component vector of float m_Position})
|
||||||
|
0:40 'output' ( temp structure{ temp 4-component vector of float m_Position})
|
||||||
|
0:40 Constant:
|
||||||
|
0:40 0.000000
|
||||||
|
0:40 0.000000
|
||||||
|
0:40 0.000000
|
||||||
|
0:40 0.000000
|
||||||
|
0:41 move second child to first child ( temp 4-component vector of float)
|
||||||
|
0:41 m_Position: direct index for structure ( temp 4-component vector of float)
|
||||||
|
0:41 'output' ( temp structure{ temp 4-component vector of float m_Position})
|
||||||
|
0:41 Constant:
|
||||||
|
0:41 0 (const int)
|
||||||
|
0:41 Constant:
|
||||||
|
0:41 0.000000
|
||||||
|
0:41 0.000000
|
||||||
|
0:41 0.000000
|
||||||
|
0:41 0.000000
|
||||||
|
0:42 Branch: Return with expression
|
||||||
|
0:42 'output' ( temp structure{ temp 4-component vector of float m_Position})
|
||||||
|
0:39 Function Definition: main( ( temp void)
|
||||||
|
0:39 Function Parameters:
|
||||||
|
0:? Sequence
|
||||||
|
0:39 Sequence
|
||||||
|
0:39 move second child to first child ( temp 4-component vector of float)
|
||||||
|
0:39 m_Position: direct index for structure ( temp 4-component vector of float)
|
||||||
|
0:39 direct index ( temp structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
|
||||||
|
0:? 'I' ( temp 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
|
||||||
|
0:39 Constant:
|
||||||
|
0:39 0 (const int)
|
||||||
|
0:39 Constant:
|
||||||
|
0:39 0 (const int)
|
||||||
|
0:39 direct index ( in 4-component vector of float Position)
|
||||||
|
0:? 'I.m_Position' ( in 3-element array of 4-component vector of float Position)
|
||||||
|
0:39 Constant:
|
||||||
|
0:39 0 (const int)
|
||||||
|
0:39 move second child to first child ( temp 4-component vector of float)
|
||||||
|
0:39 m_Normal: direct index for structure ( temp 4-component vector of float)
|
||||||
|
0:39 direct index ( temp structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
|
||||||
|
0:? 'I' ( temp 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
|
||||||
|
0:39 Constant:
|
||||||
|
0:39 0 (const int)
|
||||||
|
0:39 Constant:
|
||||||
|
0:39 1 (const int)
|
||||||
|
0:39 m_Normal: direct index for structure ( temp 4-component vector of float)
|
||||||
|
0:39 direct index (layout( location=0) in structure{ temp 4-component vector of float m_Normal})
|
||||||
|
0:39 'I' (layout( location=0) in 3-element array of structure{ temp 4-component vector of float m_Normal})
|
||||||
|
0:39 Constant:
|
||||||
|
0:39 0 (const int)
|
||||||
|
0:39 Constant:
|
||||||
|
0:39 0 (const int)
|
||||||
|
0:39 move second child to first child ( temp 4-component vector of float)
|
||||||
|
0:39 m_Position: direct index for structure ( temp 4-component vector of float)
|
||||||
|
0:39 direct index ( temp structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
|
||||||
|
0:? 'I' ( temp 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
|
||||||
|
0:39 Constant:
|
||||||
|
0:39 1 (const int)
|
||||||
|
0:39 Constant:
|
||||||
|
0:39 0 (const int)
|
||||||
|
0:39 direct index ( in 4-component vector of float Position)
|
||||||
|
0:? 'I.m_Position' ( in 3-element array of 4-component vector of float Position)
|
||||||
|
0:39 Constant:
|
||||||
|
0:39 1 (const int)
|
||||||
|
0:39 move second child to first child ( temp 4-component vector of float)
|
||||||
|
0:39 m_Normal: direct index for structure ( temp 4-component vector of float)
|
||||||
|
0:39 direct index ( temp structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
|
||||||
|
0:? 'I' ( temp 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
|
||||||
|
0:39 Constant:
|
||||||
|
0:39 1 (const int)
|
||||||
|
0:39 Constant:
|
||||||
|
0:39 1 (const int)
|
||||||
|
0:39 m_Normal: direct index for structure ( temp 4-component vector of float)
|
||||||
|
0:39 direct index (layout( location=0) in structure{ temp 4-component vector of float m_Normal})
|
||||||
|
0:39 'I' (layout( location=0) in 3-element array of structure{ temp 4-component vector of float m_Normal})
|
||||||
|
0:39 Constant:
|
||||||
|
0:39 1 (const int)
|
||||||
|
0:39 Constant:
|
||||||
|
0:39 0 (const int)
|
||||||
|
0:39 move second child to first child ( temp 4-component vector of float)
|
||||||
|
0:39 m_Position: direct index for structure ( temp 4-component vector of float)
|
||||||
|
0:39 direct index ( temp structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
|
||||||
|
0:? 'I' ( temp 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
|
||||||
|
0:39 Constant:
|
||||||
|
0:39 2 (const int)
|
||||||
|
0:39 Constant:
|
||||||
|
0:39 0 (const int)
|
||||||
|
0:39 direct index ( in 4-component vector of float Position)
|
||||||
|
0:? 'I.m_Position' ( in 3-element array of 4-component vector of float Position)
|
||||||
|
0:39 Constant:
|
||||||
|
0:39 2 (const int)
|
||||||
|
0:39 move second child to first child ( temp 4-component vector of float)
|
||||||
|
0:39 m_Normal: direct index for structure ( temp 4-component vector of float)
|
||||||
|
0:39 direct index ( temp structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
|
||||||
|
0:? 'I' ( temp 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
|
||||||
|
0:39 Constant:
|
||||||
|
0:39 2 (const int)
|
||||||
|
0:39 Constant:
|
||||||
|
0:39 1 (const int)
|
||||||
|
0:39 m_Normal: direct index for structure ( temp 4-component vector of float)
|
||||||
|
0:39 direct index (layout( location=0) in structure{ temp 4-component vector of float m_Normal})
|
||||||
|
0:39 'I' (layout( location=0) in 3-element array of structure{ temp 4-component vector of float m_Normal})
|
||||||
|
0:39 Constant:
|
||||||
|
0:39 2 (const int)
|
||||||
|
0:39 Constant:
|
||||||
|
0:39 0 (const int)
|
||||||
|
0:39 move second child to first child ( temp uint)
|
||||||
|
0:? 'cpid' ( temp uint)
|
||||||
|
0:? 'cpid' ( in uint InvocationID)
|
||||||
|
0:39 Sequence
|
||||||
|
0:39 move second child to first child ( temp 4-component vector of float)
|
||||||
|
0:39 direct index ( out 4-component vector of float Position)
|
||||||
|
0:? '@entryPointOutput.m_Position' ( out 3-element array of 4-component vector of float Position)
|
||||||
|
0:39 Constant:
|
||||||
|
0:39 0 (const int)
|
||||||
|
0:39 m_Position: direct index for structure ( temp 4-component vector of float)
|
||||||
|
0:39 Function Call: @main(struct-HS_Input-vf4-vf41[3];u1; ( temp structure{ temp 4-component vector of float m_Position})
|
||||||
|
0:? 'I' ( temp 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
|
||||||
|
0:? 'cpid' ( temp uint)
|
||||||
|
0:39 Constant:
|
||||||
|
0:39 0 (const int)
|
||||||
|
0:? Barrier ( temp void)
|
||||||
|
0:? Test condition and select ( temp void)
|
||||||
|
0:? Condition
|
||||||
|
0:? Compare Equal ( temp bool)
|
||||||
|
0:? 'cpid' ( in uint InvocationID)
|
||||||
|
0:? Constant:
|
||||||
|
0:? 0 (const int)
|
||||||
|
0:? true case
|
||||||
|
0:? Sequence
|
||||||
|
0:? move second child to first child ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
|
||||||
|
0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
|
||||||
|
0:? Function Call: HS_ConstFunc(struct-HS_Input-vf4-vf41[3]; ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
|
||||||
|
0:? 'I' ( temp 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
|
||||||
|
0:? Sequence
|
||||||
|
0:? move second child to first child ( temp float)
|
||||||
|
0:? direct index ( patch out float TessLevelOuter)
|
||||||
|
0:? '@patchConstantOutput.fTessFactor' ( patch out 4-element array of float TessLevelOuter)
|
||||||
|
0:? Constant:
|
||||||
|
0:? 0 (const int)
|
||||||
|
0:? direct index ( temp float)
|
||||||
|
0:? fTessFactor: direct index for structure ( temp 3-element array of float)
|
||||||
|
0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
|
||||||
|
0:? Constant:
|
||||||
|
0:? 0 (const int)
|
||||||
|
0:? Constant:
|
||||||
|
0:? 0 (const int)
|
||||||
|
0:? move second child to first child ( temp float)
|
||||||
|
0:? direct index ( patch out float TessLevelOuter)
|
||||||
|
0:? '@patchConstantOutput.fTessFactor' ( patch out 4-element array of float TessLevelOuter)
|
||||||
|
0:? Constant:
|
||||||
|
0:? 1 (const int)
|
||||||
|
0:? direct index ( temp float)
|
||||||
|
0:? fTessFactor: direct index for structure ( temp 3-element array of float)
|
||||||
|
0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
|
||||||
|
0:? Constant:
|
||||||
|
0:? 0 (const int)
|
||||||
|
0:? Constant:
|
||||||
|
0:? 1 (const int)
|
||||||
|
0:? move second child to first child ( temp float)
|
||||||
|
0:? direct index ( patch out float TessLevelOuter)
|
||||||
|
0:? '@patchConstantOutput.fTessFactor' ( patch out 4-element array of float TessLevelOuter)
|
||||||
|
0:? Constant:
|
||||||
|
0:? 2 (const int)
|
||||||
|
0:? direct index ( temp float)
|
||||||
|
0:? fTessFactor: direct index for structure ( temp 3-element array of float)
|
||||||
|
0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
|
||||||
|
0:? Constant:
|
||||||
|
0:? 0 (const int)
|
||||||
|
0:? Constant:
|
||||||
|
0:? 2 (const int)
|
||||||
|
0:? move second child to first child ( temp float)
|
||||||
|
0:? direct index ( patch out float TessLevelInner)
|
||||||
|
0:? '@patchConstantOutput.fInsideTessFactor' ( patch out 2-element array of float TessLevelInner)
|
||||||
|
0:? Constant:
|
||||||
|
0:? 0 (const int)
|
||||||
|
0:? fInsideTessFactor: direct index for structure ( temp float)
|
||||||
|
0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
|
||||||
|
0:? Constant:
|
||||||
|
0:? 1 (const int)
|
||||||
|
0:? Linker Objects
|
||||||
|
0:? '@entryPointOutput.m_Position' ( out 3-element array of 4-component vector of float Position)
|
||||||
|
0:? 'I.m_Position' ( in 3-element array of 4-component vector of float Position)
|
||||||
|
0:? 'I' (layout( location=0) in 3-element array of structure{ temp 4-component vector of float m_Normal})
|
||||||
|
0:? 'cpid' ( in uint InvocationID)
|
||||||
|
0:? '@patchConstantOutput.fTessFactor' ( patch out 4-element array of float TessLevelOuter)
|
||||||
|
0:? '@patchConstantOutput.fInsideTessFactor' ( patch out 2-element array of float TessLevelInner)
|
||||||
|
|
||||||
|
|
||||||
|
Linked tessellation control stage:
|
||||||
|
|
||||||
|
|
||||||
|
Shader version: 500
|
||||||
|
vertices = 3
|
||||||
|
vertex spacing = fractional_odd_spacing
|
||||||
|
triangle order = cw
|
||||||
|
0:? Sequence
|
||||||
|
0:25 Function Definition: HS_ConstFunc(struct-HS_Input-vf4-vf41[3]; ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
|
||||||
|
0:25 Function Parameters:
|
||||||
|
0:25 'I' ( in 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
|
||||||
|
0:? Sequence
|
||||||
|
0:26 Sequence
|
||||||
|
0:26 move second child to first child ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
|
||||||
|
0:26 'O' ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
|
||||||
|
0:26 Constant:
|
||||||
|
0:26 0.000000
|
||||||
|
0:26 0.000000
|
||||||
|
0:26 0.000000
|
||||||
|
0:26 0.000000
|
||||||
|
0:28 move second child to first child ( temp float)
|
||||||
|
0:28 fInsideTessFactor: direct index for structure ( temp float)
|
||||||
|
0:28 'O' ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
|
||||||
|
0:28 Constant:
|
||||||
|
0:28 1 (const int)
|
||||||
|
0:28 add ( temp float)
|
||||||
|
0:28 direct index ( temp float)
|
||||||
|
0:28 m_Position: direct index for structure ( temp 4-component vector of float)
|
||||||
|
0:28 direct index ( temp structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
|
||||||
|
0:28 'I' ( in 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
|
||||||
|
0:28 Constant:
|
||||||
|
0:28 0 (const int)
|
||||||
|
0:28 Constant:
|
||||||
|
0:28 0 (const int)
|
||||||
|
0:28 Constant:
|
||||||
|
0:28 3 (const int)
|
||||||
|
0:28 direct index ( temp float)
|
||||||
|
0:28 m_Normal: direct index for structure ( temp 4-component vector of float)
|
||||||
|
0:28 direct index ( temp structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
|
||||||
|
0:28 'I' ( in 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
|
||||||
|
0:28 Constant:
|
||||||
|
0:28 0 (const int)
|
||||||
|
0:28 Constant:
|
||||||
|
0:28 1 (const int)
|
||||||
|
0:28 Constant:
|
||||||
|
0:28 3 (const int)
|
||||||
|
0:30 Branch: Return with expression
|
||||||
|
0:30 'O' ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
|
||||||
|
0:39 Function Definition: @main(struct-HS_Input-vf4-vf41[3];u1; ( temp structure{ temp 4-component vector of float m_Position})
|
||||||
|
0:39 Function Parameters:
|
||||||
|
0:39 'I' ( in 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
|
||||||
|
0:39 'cpid' ( in uint)
|
||||||
|
0:? Sequence
|
||||||
|
0:40 Sequence
|
||||||
|
0:40 move second child to first child ( temp structure{ temp 4-component vector of float m_Position})
|
||||||
|
0:40 'output' ( temp structure{ temp 4-component vector of float m_Position})
|
||||||
|
0:40 Constant:
|
||||||
|
0:40 0.000000
|
||||||
|
0:40 0.000000
|
||||||
|
0:40 0.000000
|
||||||
|
0:40 0.000000
|
||||||
|
0:41 move second child to first child ( temp 4-component vector of float)
|
||||||
|
0:41 m_Position: direct index for structure ( temp 4-component vector of float)
|
||||||
|
0:41 'output' ( temp structure{ temp 4-component vector of float m_Position})
|
||||||
|
0:41 Constant:
|
||||||
|
0:41 0 (const int)
|
||||||
|
0:41 Constant:
|
||||||
|
0:41 0.000000
|
||||||
|
0:41 0.000000
|
||||||
|
0:41 0.000000
|
||||||
|
0:41 0.000000
|
||||||
|
0:42 Branch: Return with expression
|
||||||
|
0:42 'output' ( temp structure{ temp 4-component vector of float m_Position})
|
||||||
|
0:39 Function Definition: main( ( temp void)
|
||||||
|
0:39 Function Parameters:
|
||||||
|
0:? Sequence
|
||||||
|
0:39 Sequence
|
||||||
|
0:39 move second child to first child ( temp 4-component vector of float)
|
||||||
|
0:39 m_Position: direct index for structure ( temp 4-component vector of float)
|
||||||
|
0:39 direct index ( temp structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
|
||||||
|
0:? 'I' ( temp 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
|
||||||
|
0:39 Constant:
|
||||||
|
0:39 0 (const int)
|
||||||
|
0:39 Constant:
|
||||||
|
0:39 0 (const int)
|
||||||
|
0:39 direct index ( in 4-component vector of float Position)
|
||||||
|
0:? 'I.m_Position' ( in 3-element array of 4-component vector of float Position)
|
||||||
|
0:39 Constant:
|
||||||
|
0:39 0 (const int)
|
||||||
|
0:39 move second child to first child ( temp 4-component vector of float)
|
||||||
|
0:39 m_Normal: direct index for structure ( temp 4-component vector of float)
|
||||||
|
0:39 direct index ( temp structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
|
||||||
|
0:? 'I' ( temp 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
|
||||||
|
0:39 Constant:
|
||||||
|
0:39 0 (const int)
|
||||||
|
0:39 Constant:
|
||||||
|
0:39 1 (const int)
|
||||||
|
0:39 m_Normal: direct index for structure ( temp 4-component vector of float)
|
||||||
|
0:39 direct index (layout( location=0) in structure{ temp 4-component vector of float m_Normal})
|
||||||
|
0:39 'I' (layout( location=0) in 3-element array of structure{ temp 4-component vector of float m_Normal})
|
||||||
|
0:39 Constant:
|
||||||
|
0:39 0 (const int)
|
||||||
|
0:39 Constant:
|
||||||
|
0:39 0 (const int)
|
||||||
|
0:39 move second child to first child ( temp 4-component vector of float)
|
||||||
|
0:39 m_Position: direct index for structure ( temp 4-component vector of float)
|
||||||
|
0:39 direct index ( temp structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
|
||||||
|
0:? 'I' ( temp 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
|
||||||
|
0:39 Constant:
|
||||||
|
0:39 1 (const int)
|
||||||
|
0:39 Constant:
|
||||||
|
0:39 0 (const int)
|
||||||
|
0:39 direct index ( in 4-component vector of float Position)
|
||||||
|
0:? 'I.m_Position' ( in 3-element array of 4-component vector of float Position)
|
||||||
|
0:39 Constant:
|
||||||
|
0:39 1 (const int)
|
||||||
|
0:39 move second child to first child ( temp 4-component vector of float)
|
||||||
|
0:39 m_Normal: direct index for structure ( temp 4-component vector of float)
|
||||||
|
0:39 direct index ( temp structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
|
||||||
|
0:? 'I' ( temp 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
|
||||||
|
0:39 Constant:
|
||||||
|
0:39 1 (const int)
|
||||||
|
0:39 Constant:
|
||||||
|
0:39 1 (const int)
|
||||||
|
0:39 m_Normal: direct index for structure ( temp 4-component vector of float)
|
||||||
|
0:39 direct index (layout( location=0) in structure{ temp 4-component vector of float m_Normal})
|
||||||
|
0:39 'I' (layout( location=0) in 3-element array of structure{ temp 4-component vector of float m_Normal})
|
||||||
|
0:39 Constant:
|
||||||
|
0:39 1 (const int)
|
||||||
|
0:39 Constant:
|
||||||
|
0:39 0 (const int)
|
||||||
|
0:39 move second child to first child ( temp 4-component vector of float)
|
||||||
|
0:39 m_Position: direct index for structure ( temp 4-component vector of float)
|
||||||
|
0:39 direct index ( temp structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
|
||||||
|
0:? 'I' ( temp 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
|
||||||
|
0:39 Constant:
|
||||||
|
0:39 2 (const int)
|
||||||
|
0:39 Constant:
|
||||||
|
0:39 0 (const int)
|
||||||
|
0:39 direct index ( in 4-component vector of float Position)
|
||||||
|
0:? 'I.m_Position' ( in 3-element array of 4-component vector of float Position)
|
||||||
|
0:39 Constant:
|
||||||
|
0:39 2 (const int)
|
||||||
|
0:39 move second child to first child ( temp 4-component vector of float)
|
||||||
|
0:39 m_Normal: direct index for structure ( temp 4-component vector of float)
|
||||||
|
0:39 direct index ( temp structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
|
||||||
|
0:? 'I' ( temp 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
|
||||||
|
0:39 Constant:
|
||||||
|
0:39 2 (const int)
|
||||||
|
0:39 Constant:
|
||||||
|
0:39 1 (const int)
|
||||||
|
0:39 m_Normal: direct index for structure ( temp 4-component vector of float)
|
||||||
|
0:39 direct index (layout( location=0) in structure{ temp 4-component vector of float m_Normal})
|
||||||
|
0:39 'I' (layout( location=0) in 3-element array of structure{ temp 4-component vector of float m_Normal})
|
||||||
|
0:39 Constant:
|
||||||
|
0:39 2 (const int)
|
||||||
|
0:39 Constant:
|
||||||
|
0:39 0 (const int)
|
||||||
|
0:39 move second child to first child ( temp uint)
|
||||||
|
0:? 'cpid' ( temp uint)
|
||||||
|
0:? 'cpid' ( in uint InvocationID)
|
||||||
|
0:39 Sequence
|
||||||
|
0:39 move second child to first child ( temp 4-component vector of float)
|
||||||
|
0:39 direct index ( out 4-component vector of float Position)
|
||||||
|
0:? '@entryPointOutput.m_Position' ( out 3-element array of 4-component vector of float Position)
|
||||||
|
0:39 Constant:
|
||||||
|
0:39 0 (const int)
|
||||||
|
0:39 m_Position: direct index for structure ( temp 4-component vector of float)
|
||||||
|
0:39 Function Call: @main(struct-HS_Input-vf4-vf41[3];u1; ( temp structure{ temp 4-component vector of float m_Position})
|
||||||
|
0:? 'I' ( temp 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
|
||||||
|
0:? 'cpid' ( temp uint)
|
||||||
|
0:39 Constant:
|
||||||
|
0:39 0 (const int)
|
||||||
|
0:? Barrier ( temp void)
|
||||||
|
0:? Test condition and select ( temp void)
|
||||||
|
0:? Condition
|
||||||
|
0:? Compare Equal ( temp bool)
|
||||||
|
0:? 'cpid' ( in uint InvocationID)
|
||||||
|
0:? Constant:
|
||||||
|
0:? 0 (const int)
|
||||||
|
0:? true case
|
||||||
|
0:? Sequence
|
||||||
|
0:? move second child to first child ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
|
||||||
|
0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
|
||||||
|
0:? Function Call: HS_ConstFunc(struct-HS_Input-vf4-vf41[3]; ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
|
||||||
|
0:? 'I' ( temp 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
|
||||||
|
0:? Sequence
|
||||||
|
0:? move second child to first child ( temp float)
|
||||||
|
0:? direct index ( patch out float TessLevelOuter)
|
||||||
|
0:? '@patchConstantOutput.fTessFactor' ( patch out 4-element array of float TessLevelOuter)
|
||||||
|
0:? Constant:
|
||||||
|
0:? 0 (const int)
|
||||||
|
0:? direct index ( temp float)
|
||||||
|
0:? fTessFactor: direct index for structure ( temp 3-element array of float)
|
||||||
|
0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
|
||||||
|
0:? Constant:
|
||||||
|
0:? 0 (const int)
|
||||||
|
0:? Constant:
|
||||||
|
0:? 0 (const int)
|
||||||
|
0:? move second child to first child ( temp float)
|
||||||
|
0:? direct index ( patch out float TessLevelOuter)
|
||||||
|
0:? '@patchConstantOutput.fTessFactor' ( patch out 4-element array of float TessLevelOuter)
|
||||||
|
0:? Constant:
|
||||||
|
0:? 1 (const int)
|
||||||
|
0:? direct index ( temp float)
|
||||||
|
0:? fTessFactor: direct index for structure ( temp 3-element array of float)
|
||||||
|
0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
|
||||||
|
0:? Constant:
|
||||||
|
0:? 0 (const int)
|
||||||
|
0:? Constant:
|
||||||
|
0:? 1 (const int)
|
||||||
|
0:? move second child to first child ( temp float)
|
||||||
|
0:? direct index ( patch out float TessLevelOuter)
|
||||||
|
0:? '@patchConstantOutput.fTessFactor' ( patch out 4-element array of float TessLevelOuter)
|
||||||
|
0:? Constant:
|
||||||
|
0:? 2 (const int)
|
||||||
|
0:? direct index ( temp float)
|
||||||
|
0:? fTessFactor: direct index for structure ( temp 3-element array of float)
|
||||||
|
0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
|
||||||
|
0:? Constant:
|
||||||
|
0:? 0 (const int)
|
||||||
|
0:? Constant:
|
||||||
|
0:? 2 (const int)
|
||||||
|
0:? move second child to first child ( temp float)
|
||||||
|
0:? direct index ( patch out float TessLevelInner)
|
||||||
|
0:? '@patchConstantOutput.fInsideTessFactor' ( patch out 2-element array of float TessLevelInner)
|
||||||
|
0:? Constant:
|
||||||
|
0:? 0 (const int)
|
||||||
|
0:? fInsideTessFactor: direct index for structure ( temp float)
|
||||||
|
0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
|
||||||
|
0:? Constant:
|
||||||
|
0:? 1 (const int)
|
||||||
|
0:? Linker Objects
|
||||||
|
0:? '@entryPointOutput.m_Position' ( out 3-element array of 4-component vector of float Position)
|
||||||
|
0:? 'I.m_Position' ( in 3-element array of 4-component vector of float Position)
|
||||||
|
0:? 'I' (layout( location=0) in 3-element array of structure{ temp 4-component vector of float m_Normal})
|
||||||
|
0:? 'cpid' ( in uint InvocationID)
|
||||||
|
0:? '@patchConstantOutput.fTessFactor' ( patch out 4-element array of float TessLevelOuter)
|
||||||
|
0:? '@patchConstantOutput.fInsideTessFactor' ( patch out 2-element array of float TessLevelInner)
|
||||||
|
|
||||||
|
// Module Version 10000
|
||||||
|
// Generated by (magic number): 80001
|
||||||
|
// Id's are bound by 127
|
||||||
|
|
||||||
|
Capability Tessellation
|
||||||
|
1: ExtInstImport "GLSL.std.450"
|
||||||
|
MemoryModel Logical GLSL450
|
||||||
|
EntryPoint TessellationControl 4 "main" 56 64 83 86 110 123
|
||||||
|
ExecutionMode 4 OutputVertices 3
|
||||||
|
ExecutionMode 4 Triangles
|
||||||
|
ExecutionMode 4 SpacingFractionalOdd
|
||||||
|
ExecutionMode 4 VertexOrderCw
|
||||||
|
Source HLSL 500
|
||||||
|
Name 4 "main"
|
||||||
|
Name 8 "HS_Input"
|
||||||
|
MemberName 8(HS_Input) 0 "m_Position"
|
||||||
|
MemberName 8(HS_Input) 1 "m_Normal"
|
||||||
|
Name 14 "HS_Output"
|
||||||
|
MemberName 14(HS_Output) 0 "fTessFactor"
|
||||||
|
MemberName 14(HS_Output) 1 "fInsideTessFactor"
|
||||||
|
Name 17 "HS_ConstFunc(struct-HS_Input-vf4-vf41[3];"
|
||||||
|
Name 16 "I"
|
||||||
|
Name 20 "HS_Main_Output"
|
||||||
|
MemberName 20(HS_Main_Output) 0 "m_Position"
|
||||||
|
Name 24 "@main(struct-HS_Input-vf4-vf41[3];u1;"
|
||||||
|
Name 22 "I"
|
||||||
|
Name 23 "cpid"
|
||||||
|
Name 27 "O"
|
||||||
|
Name 45 "output"
|
||||||
|
Name 53 "I"
|
||||||
|
Name 56 "I.m_Position"
|
||||||
|
Name 61 "HS_Input"
|
||||||
|
MemberName 61(HS_Input) 0 "m_Normal"
|
||||||
|
Name 64 "I"
|
||||||
|
Name 81 "cpid"
|
||||||
|
Name 83 "cpid"
|
||||||
|
Name 86 "@entryPointOutput.m_Position"
|
||||||
|
Name 87 "param"
|
||||||
|
Name 89 "param"
|
||||||
|
Name 103 "@patchConstantResult"
|
||||||
|
Name 104 "param"
|
||||||
|
Name 110 "@patchConstantOutput.fTessFactor"
|
||||||
|
Name 123 "@patchConstantOutput.fInsideTessFactor"
|
||||||
|
Decorate 56(I.m_Position) BuiltIn Position
|
||||||
|
Decorate 64(I) Location 0
|
||||||
|
Decorate 83(cpid) BuiltIn InvocationId
|
||||||
|
Decorate 86(@entryPointOutput.m_Position) BuiltIn Position
|
||||||
|
Decorate 110(@patchConstantOutput.fTessFactor) Patch
|
||||||
|
Decorate 110(@patchConstantOutput.fTessFactor) BuiltIn TessLevelOuter
|
||||||
|
Decorate 123(@patchConstantOutput.fInsideTessFactor) Patch
|
||||||
|
Decorate 123(@patchConstantOutput.fInsideTessFactor) BuiltIn TessLevelInner
|
||||||
|
2: TypeVoid
|
||||||
|
3: TypeFunction 2
|
||||||
|
6: TypeFloat 32
|
||||||
|
7: TypeVector 6(float) 4
|
||||||
|
8(HS_Input): TypeStruct 7(fvec4) 7(fvec4)
|
||||||
|
9: TypeInt 32 0
|
||||||
|
10: 9(int) Constant 3
|
||||||
|
11: TypeArray 8(HS_Input) 10
|
||||||
|
12: TypePointer Function 11
|
||||||
|
13: TypeArray 6(float) 10
|
||||||
|
14(HS_Output): TypeStruct 13 6(float)
|
||||||
|
15: TypeFunction 14(HS_Output) 12(ptr)
|
||||||
|
19: TypePointer Function 9(int)
|
||||||
|
20(HS_Main_Output): TypeStruct 7(fvec4)
|
||||||
|
21: TypeFunction 20(HS_Main_Output) 12(ptr) 19(ptr)
|
||||||
|
26: TypePointer Function 14(HS_Output)
|
||||||
|
28: 6(float) Constant 0
|
||||||
|
29: 13 ConstantComposite 28 28 28
|
||||||
|
30:14(HS_Output) ConstantComposite 29 28
|
||||||
|
31: TypeInt 32 1
|
||||||
|
32: 31(int) Constant 1
|
||||||
|
33: 31(int) Constant 0
|
||||||
|
34: TypePointer Function 6(float)
|
||||||
|
44: TypePointer Function 20(HS_Main_Output)
|
||||||
|
46: 7(fvec4) ConstantComposite 28 28 28 28
|
||||||
|
47:20(HS_Main_Output) ConstantComposite 46
|
||||||
|
48: TypePointer Function 7(fvec4)
|
||||||
|
54: TypeArray 7(fvec4) 10
|
||||||
|
55: TypePointer Input 54
|
||||||
|
56(I.m_Position): 55(ptr) Variable Input
|
||||||
|
57: TypePointer Input 7(fvec4)
|
||||||
|
61(HS_Input): TypeStruct 7(fvec4)
|
||||||
|
62: TypeArray 61(HS_Input) 10
|
||||||
|
63: TypePointer Input 62
|
||||||
|
64(I): 63(ptr) Variable Input
|
||||||
|
74: 31(int) Constant 2
|
||||||
|
82: TypePointer Input 9(int)
|
||||||
|
83(cpid): 82(ptr) Variable Input
|
||||||
|
85: TypePointer Output 54
|
||||||
|
86(@entryPointOutput.m_Position): 85(ptr) Variable Output
|
||||||
|
93: TypePointer Output 7(fvec4)
|
||||||
|
95: 9(int) Constant 2
|
||||||
|
96: 9(int) Constant 1
|
||||||
|
97: 9(int) Constant 0
|
||||||
|
99: TypeBool
|
||||||
|
107: 9(int) Constant 4
|
||||||
|
108: TypeArray 6(float) 107
|
||||||
|
109: TypePointer Output 108
|
||||||
|
110(@patchConstantOutput.fTessFactor): 109(ptr) Variable Output
|
||||||
|
113: TypePointer Output 6(float)
|
||||||
|
121: TypeArray 6(float) 95
|
||||||
|
122: TypePointer Output 121
|
||||||
|
123(@patchConstantOutput.fInsideTessFactor): 122(ptr) Variable Output
|
||||||
|
4(main): 2 Function None 3
|
||||||
|
5: Label
|
||||||
|
53(I): 12(ptr) Variable Function
|
||||||
|
81(cpid): 19(ptr) Variable Function
|
||||||
|
87(param): 12(ptr) Variable Function
|
||||||
|
89(param): 19(ptr) Variable Function
|
||||||
|
103(@patchConstantResult): 26(ptr) Variable Function
|
||||||
|
104(param): 12(ptr) Variable Function
|
||||||
|
58: 57(ptr) AccessChain 56(I.m_Position) 33
|
||||||
|
59: 7(fvec4) Load 58
|
||||||
|
60: 48(ptr) AccessChain 53(I) 33 33
|
||||||
|
Store 60 59
|
||||||
|
65: 57(ptr) AccessChain 64(I) 33 33
|
||||||
|
66: 7(fvec4) Load 65
|
||||||
|
67: 48(ptr) AccessChain 53(I) 33 32
|
||||||
|
Store 67 66
|
||||||
|
68: 57(ptr) AccessChain 56(I.m_Position) 32
|
||||||
|
69: 7(fvec4) Load 68
|
||||||
|
70: 48(ptr) AccessChain 53(I) 32 33
|
||||||
|
Store 70 69
|
||||||
|
71: 57(ptr) AccessChain 64(I) 32 33
|
||||||
|
72: 7(fvec4) Load 71
|
||||||
|
73: 48(ptr) AccessChain 53(I) 32 32
|
||||||
|
Store 73 72
|
||||||
|
75: 57(ptr) AccessChain 56(I.m_Position) 74
|
||||||
|
76: 7(fvec4) Load 75
|
||||||
|
77: 48(ptr) AccessChain 53(I) 74 33
|
||||||
|
Store 77 76
|
||||||
|
78: 57(ptr) AccessChain 64(I) 74 33
|
||||||
|
79: 7(fvec4) Load 78
|
||||||
|
80: 48(ptr) AccessChain 53(I) 74 32
|
||||||
|
Store 80 79
|
||||||
|
84: 9(int) Load 83(cpid)
|
||||||
|
Store 81(cpid) 84
|
||||||
|
88: 11 Load 53(I)
|
||||||
|
Store 87(param) 88
|
||||||
|
90: 9(int) Load 81(cpid)
|
||||||
|
Store 89(param) 90
|
||||||
|
91:20(HS_Main_Output) FunctionCall 24(@main(struct-HS_Input-vf4-vf41[3];u1;) 87(param) 89(param)
|
||||||
|
92: 7(fvec4) CompositeExtract 91 0
|
||||||
|
94: 93(ptr) AccessChain 86(@entryPointOutput.m_Position) 33
|
||||||
|
Store 94 92
|
||||||
|
ControlBarrier 95 96 97
|
||||||
|
98: 9(int) Load 83(cpid)
|
||||||
|
100: 99(bool) IEqual 98 33
|
||||||
|
SelectionMerge 102 None
|
||||||
|
BranchConditional 100 101 102
|
||||||
|
101: Label
|
||||||
|
105: 11 Load 53(I)
|
||||||
|
Store 104(param) 105
|
||||||
|
106:14(HS_Output) FunctionCall 17(HS_ConstFunc(struct-HS_Input-vf4-vf41[3];) 104(param)
|
||||||
|
Store 103(@patchConstantResult) 106
|
||||||
|
111: 34(ptr) AccessChain 103(@patchConstantResult) 33 33
|
||||||
|
112: 6(float) Load 111
|
||||||
|
114: 113(ptr) AccessChain 110(@patchConstantOutput.fTessFactor) 33
|
||||||
|
Store 114 112
|
||||||
|
115: 34(ptr) AccessChain 103(@patchConstantResult) 33 32
|
||||||
|
116: 6(float) Load 115
|
||||||
|
117: 113(ptr) AccessChain 110(@patchConstantOutput.fTessFactor) 32
|
||||||
|
Store 117 116
|
||||||
|
118: 34(ptr) AccessChain 103(@patchConstantResult) 33 74
|
||||||
|
119: 6(float) Load 118
|
||||||
|
120: 113(ptr) AccessChain 110(@patchConstantOutput.fTessFactor) 74
|
||||||
|
Store 120 119
|
||||||
|
124: 34(ptr) AccessChain 103(@patchConstantResult) 32
|
||||||
|
125: 6(float) Load 124
|
||||||
|
126: 113(ptr) AccessChain 123(@patchConstantOutput.fInsideTessFactor) 33
|
||||||
|
Store 126 125
|
||||||
|
Branch 102
|
||||||
|
102: Label
|
||||||
|
Return
|
||||||
|
FunctionEnd
|
||||||
|
17(HS_ConstFunc(struct-HS_Input-vf4-vf41[3];):14(HS_Output) Function None 15
|
||||||
|
16(I): 12(ptr) FunctionParameter
|
||||||
|
18: Label
|
||||||
|
27(O): 26(ptr) Variable Function
|
||||||
|
Store 27(O) 30
|
||||||
|
35: 34(ptr) AccessChain 16(I) 33 33 10
|
||||||
|
36: 6(float) Load 35
|
||||||
|
37: 34(ptr) AccessChain 16(I) 33 32 10
|
||||||
|
38: 6(float) Load 37
|
||||||
|
39: 6(float) FAdd 36 38
|
||||||
|
40: 34(ptr) AccessChain 27(O) 32
|
||||||
|
Store 40 39
|
||||||
|
41:14(HS_Output) Load 27(O)
|
||||||
|
ReturnValue 41
|
||||||
|
FunctionEnd
|
||||||
|
24(@main(struct-HS_Input-vf4-vf41[3];u1;):20(HS_Main_Output) Function None 21
|
||||||
|
22(I): 12(ptr) FunctionParameter
|
||||||
|
23(cpid): 19(ptr) FunctionParameter
|
||||||
|
25: Label
|
||||||
|
45(output): 44(ptr) Variable Function
|
||||||
|
Store 45(output) 47
|
||||||
|
49: 48(ptr) AccessChain 45(output) 33
|
||||||
|
Store 49 46
|
||||||
|
50:20(HS_Main_Output) Load 45(output)
|
||||||
|
ReturnValue 50
|
||||||
|
FunctionEnd
|
190
Test/baseResults/hlsl.hull.5.tesc.out
Normal file
190
Test/baseResults/hlsl.hull.5.tesc.out
Normal file
@ -0,0 +1,190 @@
|
|||||||
|
hlsl.hull.5.tesc
|
||||||
|
ERROR: 0:0: '' : unimplemented: PCF input patch without entry point input patch parameter
|
||||||
|
ERROR: 1 compilation errors. No code generated.
|
||||||
|
|
||||||
|
|
||||||
|
Shader version: 500
|
||||||
|
vertices = 3
|
||||||
|
vertex spacing = fractional_odd_spacing
|
||||||
|
triangle order = cw
|
||||||
|
ERROR: node is still EOpNull!
|
||||||
|
0:25 Function Definition: HS_ConstFunc(struct-HS_Input-vf4-vf41[3]; ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
|
||||||
|
0:25 Function Parameters:
|
||||||
|
0:25 'I' ( in 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
|
||||||
|
0:? Sequence
|
||||||
|
0:26 Sequence
|
||||||
|
0:26 move second child to first child ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
|
||||||
|
0:26 'O' ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
|
||||||
|
0:26 Constant:
|
||||||
|
0:26 0.000000
|
||||||
|
0:26 0.000000
|
||||||
|
0:26 0.000000
|
||||||
|
0:26 0.000000
|
||||||
|
0:28 move second child to first child ( temp float)
|
||||||
|
0:28 fInsideTessFactor: direct index for structure ( temp float)
|
||||||
|
0:28 'O' ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
|
||||||
|
0:28 Constant:
|
||||||
|
0:28 1 (const int)
|
||||||
|
0:28 add ( temp float)
|
||||||
|
0:28 direct index ( temp float)
|
||||||
|
0:28 m_Position: direct index for structure ( temp 4-component vector of float)
|
||||||
|
0:28 direct index ( temp structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
|
||||||
|
0:28 'I' ( in 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
|
||||||
|
0:28 Constant:
|
||||||
|
0:28 0 (const int)
|
||||||
|
0:28 Constant:
|
||||||
|
0:28 0 (const int)
|
||||||
|
0:28 Constant:
|
||||||
|
0:28 3 (const int)
|
||||||
|
0:28 direct index ( temp float)
|
||||||
|
0:28 m_Normal: direct index for structure ( temp 4-component vector of float)
|
||||||
|
0:28 direct index ( temp structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
|
||||||
|
0:28 'I' ( in 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
|
||||||
|
0:28 Constant:
|
||||||
|
0:28 0 (const int)
|
||||||
|
0:28 Constant:
|
||||||
|
0:28 1 (const int)
|
||||||
|
0:28 Constant:
|
||||||
|
0:28 3 (const int)
|
||||||
|
0:30 Branch: Return with expression
|
||||||
|
0:30 'O' ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
|
||||||
|
0:39 Function Definition: @main(u1; ( temp structure{ temp 4-component vector of float m_Position})
|
||||||
|
0:39 Function Parameters:
|
||||||
|
0:39 'cpid' ( in uint)
|
||||||
|
0:? Sequence
|
||||||
|
0:40 Sequence
|
||||||
|
0:40 move second child to first child ( temp structure{ temp 4-component vector of float m_Position})
|
||||||
|
0:40 'output' ( temp structure{ temp 4-component vector of float m_Position})
|
||||||
|
0:40 Constant:
|
||||||
|
0:40 0.000000
|
||||||
|
0:40 0.000000
|
||||||
|
0:40 0.000000
|
||||||
|
0:40 0.000000
|
||||||
|
0:41 move second child to first child ( temp 4-component vector of float)
|
||||||
|
0:41 m_Position: direct index for structure ( temp 4-component vector of float)
|
||||||
|
0:41 'output' ( temp structure{ temp 4-component vector of float m_Position})
|
||||||
|
0:41 Constant:
|
||||||
|
0:41 0 (const int)
|
||||||
|
0:41 Constant:
|
||||||
|
0:41 0.000000
|
||||||
|
0:41 0.000000
|
||||||
|
0:41 0.000000
|
||||||
|
0:41 0.000000
|
||||||
|
0:42 Branch: Return with expression
|
||||||
|
0:42 'output' ( temp structure{ temp 4-component vector of float m_Position})
|
||||||
|
0:39 Function Definition: main( ( temp void)
|
||||||
|
0:39 Function Parameters:
|
||||||
|
0:? Sequence
|
||||||
|
0:39 move second child to first child ( temp uint)
|
||||||
|
0:? 'cpid' ( temp uint)
|
||||||
|
0:? 'cpid' ( in uint InvocationID)
|
||||||
|
0:39 Sequence
|
||||||
|
0:39 move second child to first child ( temp 4-component vector of float)
|
||||||
|
0:39 direct index ( out 4-component vector of float Position)
|
||||||
|
0:? '@entryPointOutput.m_Position' ( out 3-element array of 4-component vector of float Position)
|
||||||
|
0:39 Constant:
|
||||||
|
0:39 0 (const int)
|
||||||
|
0:39 m_Position: direct index for structure ( temp 4-component vector of float)
|
||||||
|
0:39 Function Call: @main(u1; ( temp structure{ temp 4-component vector of float m_Position})
|
||||||
|
0:? 'cpid' ( temp uint)
|
||||||
|
0:39 Constant:
|
||||||
|
0:39 0 (const int)
|
||||||
|
0:? Linker Objects
|
||||||
|
0:? '@entryPointOutput.m_Position' ( out 3-element array of 4-component vector of float Position)
|
||||||
|
0:? 'cpid' ( in uint InvocationID)
|
||||||
|
|
||||||
|
|
||||||
|
Linked tessellation control stage:
|
||||||
|
|
||||||
|
|
||||||
|
Shader version: 500
|
||||||
|
vertices = 3
|
||||||
|
vertex spacing = fractional_odd_spacing
|
||||||
|
triangle order = cw
|
||||||
|
ERROR: node is still EOpNull!
|
||||||
|
0:25 Function Definition: HS_ConstFunc(struct-HS_Input-vf4-vf41[3]; ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
|
||||||
|
0:25 Function Parameters:
|
||||||
|
0:25 'I' ( in 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
|
||||||
|
0:? Sequence
|
||||||
|
0:26 Sequence
|
||||||
|
0:26 move second child to first child ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
|
||||||
|
0:26 'O' ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
|
||||||
|
0:26 Constant:
|
||||||
|
0:26 0.000000
|
||||||
|
0:26 0.000000
|
||||||
|
0:26 0.000000
|
||||||
|
0:26 0.000000
|
||||||
|
0:28 move second child to first child ( temp float)
|
||||||
|
0:28 fInsideTessFactor: direct index for structure ( temp float)
|
||||||
|
0:28 'O' ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
|
||||||
|
0:28 Constant:
|
||||||
|
0:28 1 (const int)
|
||||||
|
0:28 add ( temp float)
|
||||||
|
0:28 direct index ( temp float)
|
||||||
|
0:28 m_Position: direct index for structure ( temp 4-component vector of float)
|
||||||
|
0:28 direct index ( temp structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
|
||||||
|
0:28 'I' ( in 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
|
||||||
|
0:28 Constant:
|
||||||
|
0:28 0 (const int)
|
||||||
|
0:28 Constant:
|
||||||
|
0:28 0 (const int)
|
||||||
|
0:28 Constant:
|
||||||
|
0:28 3 (const int)
|
||||||
|
0:28 direct index ( temp float)
|
||||||
|
0:28 m_Normal: direct index for structure ( temp 4-component vector of float)
|
||||||
|
0:28 direct index ( temp structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
|
||||||
|
0:28 'I' ( in 3-element array of structure{ temp 4-component vector of float m_Position, temp 4-component vector of float m_Normal})
|
||||||
|
0:28 Constant:
|
||||||
|
0:28 0 (const int)
|
||||||
|
0:28 Constant:
|
||||||
|
0:28 1 (const int)
|
||||||
|
0:28 Constant:
|
||||||
|
0:28 3 (const int)
|
||||||
|
0:30 Branch: Return with expression
|
||||||
|
0:30 'O' ( temp structure{ temp 3-element array of float fTessFactor, temp float fInsideTessFactor})
|
||||||
|
0:39 Function Definition: @main(u1; ( temp structure{ temp 4-component vector of float m_Position})
|
||||||
|
0:39 Function Parameters:
|
||||||
|
0:39 'cpid' ( in uint)
|
||||||
|
0:? Sequence
|
||||||
|
0:40 Sequence
|
||||||
|
0:40 move second child to first child ( temp structure{ temp 4-component vector of float m_Position})
|
||||||
|
0:40 'output' ( temp structure{ temp 4-component vector of float m_Position})
|
||||||
|
0:40 Constant:
|
||||||
|
0:40 0.000000
|
||||||
|
0:40 0.000000
|
||||||
|
0:40 0.000000
|
||||||
|
0:40 0.000000
|
||||||
|
0:41 move second child to first child ( temp 4-component vector of float)
|
||||||
|
0:41 m_Position: direct index for structure ( temp 4-component vector of float)
|
||||||
|
0:41 'output' ( temp structure{ temp 4-component vector of float m_Position})
|
||||||
|
0:41 Constant:
|
||||||
|
0:41 0 (const int)
|
||||||
|
0:41 Constant:
|
||||||
|
0:41 0.000000
|
||||||
|
0:41 0.000000
|
||||||
|
0:41 0.000000
|
||||||
|
0:41 0.000000
|
||||||
|
0:42 Branch: Return with expression
|
||||||
|
0:42 'output' ( temp structure{ temp 4-component vector of float m_Position})
|
||||||
|
0:39 Function Definition: main( ( temp void)
|
||||||
|
0:39 Function Parameters:
|
||||||
|
0:? Sequence
|
||||||
|
0:39 move second child to first child ( temp uint)
|
||||||
|
0:? 'cpid' ( temp uint)
|
||||||
|
0:? 'cpid' ( in uint InvocationID)
|
||||||
|
0:39 Sequence
|
||||||
|
0:39 move second child to first child ( temp 4-component vector of float)
|
||||||
|
0:39 direct index ( out 4-component vector of float Position)
|
||||||
|
0:? '@entryPointOutput.m_Position' ( out 3-element array of 4-component vector of float Position)
|
||||||
|
0:39 Constant:
|
||||||
|
0:39 0 (const int)
|
||||||
|
0:39 m_Position: direct index for structure ( temp 4-component vector of float)
|
||||||
|
0:39 Function Call: @main(u1; ( temp structure{ temp 4-component vector of float m_Position})
|
||||||
|
0:? 'cpid' ( temp uint)
|
||||||
|
0:39 Constant:
|
||||||
|
0:39 0 (const int)
|
||||||
|
0:? Linker Objects
|
||||||
|
0:? '@entryPointOutput.m_Position' ( out 3-element array of 4-component vector of float Position)
|
||||||
|
0:? 'cpid' ( in uint InvocationID)
|
||||||
|
|
||||||
|
SPIR-V is not generated for failed compile or link
|
@ -29,7 +29,7 @@ triangle order = cw
|
|||||||
0:? 'cpid' ( temp uint)
|
0:? 'cpid' ( temp uint)
|
||||||
0:? 'cpid' ( in uint InvocationID)
|
0:? 'cpid' ( in uint InvocationID)
|
||||||
0:27 move second child to first child ( temp structure{ temp 3-component vector of float val})
|
0:27 move second child to first child ( temp structure{ temp 3-component vector of float val})
|
||||||
0:27 indirect index ( temp structure{ temp 3-component vector of float val})
|
0:27 indirect index (layout( location=0) out structure{ temp 3-component vector of float val})
|
||||||
0:? '@entryPointOutput' (layout( location=0) out 3-element array of structure{ temp 3-component vector of float val})
|
0:? '@entryPointOutput' (layout( location=0) out 3-element array of structure{ temp 3-component vector of float val})
|
||||||
0:? 'cpid' ( in uint InvocationID)
|
0:? 'cpid' ( in uint InvocationID)
|
||||||
0:27 Function Call: @main(struct-hs_in_t-vf31[3];u1; ( temp structure{ temp 3-component vector of float val})
|
0:27 Function Call: @main(struct-hs_in_t-vf31[3];u1; ( temp structure{ temp 3-component vector of float val})
|
||||||
@ -229,7 +229,7 @@ triangle order = cw
|
|||||||
0:? 'cpid' ( temp uint)
|
0:? 'cpid' ( temp uint)
|
||||||
0:? 'cpid' ( in uint InvocationID)
|
0:? 'cpid' ( in uint InvocationID)
|
||||||
0:27 move second child to first child ( temp structure{ temp 3-component vector of float val})
|
0:27 move second child to first child ( temp structure{ temp 3-component vector of float val})
|
||||||
0:27 indirect index ( temp structure{ temp 3-component vector of float val})
|
0:27 indirect index (layout( location=0) out structure{ temp 3-component vector of float val})
|
||||||
0:? '@entryPointOutput' (layout( location=0) out 3-element array of structure{ temp 3-component vector of float val})
|
0:? '@entryPointOutput' (layout( location=0) out 3-element array of structure{ temp 3-component vector of float val})
|
||||||
0:? 'cpid' ( in uint InvocationID)
|
0:? 'cpid' ( in uint InvocationID)
|
||||||
0:27 Function Call: @main(struct-hs_in_t-vf31[3];u1; ( temp structure{ temp 3-component vector of float val})
|
0:27 Function Call: @main(struct-hs_in_t-vf31[3];u1; ( temp structure{ temp 3-component vector of float val})
|
||||||
|
@ -36,7 +36,7 @@ triangle order = cw
|
|||||||
0:? 'cpid' ( temp uint)
|
0:? 'cpid' ( temp uint)
|
||||||
0:? 'cpid' ( in uint InvocationID)
|
0:? 'cpid' ( in uint InvocationID)
|
||||||
0:28 move second child to first child ( temp structure{ temp 3-component vector of float val})
|
0:28 move second child to first child ( temp structure{ temp 3-component vector of float val})
|
||||||
0:28 indirect index ( temp structure{ temp 3-component vector of float val})
|
0:28 indirect index (layout( location=0) out structure{ temp 3-component vector of float val})
|
||||||
0:? '@entryPointOutput' (layout( location=0) out 3-element array of structure{ temp 3-component vector of float val})
|
0:? '@entryPointOutput' (layout( location=0) out 3-element array of structure{ temp 3-component vector of float val})
|
||||||
0:? 'cpid' ( in uint InvocationID)
|
0:? 'cpid' ( in uint InvocationID)
|
||||||
0:28 Function Call: @main(struct-hs_in_t-vf31[3];u1; ( temp structure{ temp 3-component vector of float val})
|
0:28 Function Call: @main(struct-hs_in_t-vf31[3];u1; ( temp structure{ temp 3-component vector of float val})
|
||||||
@ -82,7 +82,7 @@ triangle order = cw
|
|||||||
0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
|
0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
|
||||||
0:? Function Call: PCF(struct-hs_out_t-vf31[3];struct-hs_in_t-vf31[3]; ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
|
0:? Function Call: PCF(struct-hs_out_t-vf31[3];struct-hs_in_t-vf31[3]; ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
|
||||||
0:? 'pcf_out' ( temp 3-element array of structure{ temp 3-component vector of float val})
|
0:? 'pcf_out' ( temp 3-element array of structure{ temp 3-component vector of float val})
|
||||||
0:? 'i' (layout( location=0) in 3-element array of structure{ temp 3-component vector of float val})
|
0:? 'i' ( temp 3-element array of structure{ temp 3-component vector of float val})
|
||||||
0:? Sequence
|
0:? Sequence
|
||||||
0:? move second child to first child ( temp float)
|
0:? move second child to first child ( temp float)
|
||||||
0:? direct index ( patch out float TessLevelOuter)
|
0:? direct index ( patch out float TessLevelOuter)
|
||||||
@ -245,7 +245,7 @@ triangle order = cw
|
|||||||
0:? 'cpid' ( temp uint)
|
0:? 'cpid' ( temp uint)
|
||||||
0:? 'cpid' ( in uint InvocationID)
|
0:? 'cpid' ( in uint InvocationID)
|
||||||
0:28 move second child to first child ( temp structure{ temp 3-component vector of float val})
|
0:28 move second child to first child ( temp structure{ temp 3-component vector of float val})
|
||||||
0:28 indirect index ( temp structure{ temp 3-component vector of float val})
|
0:28 indirect index (layout( location=0) out structure{ temp 3-component vector of float val})
|
||||||
0:? '@entryPointOutput' (layout( location=0) out 3-element array of structure{ temp 3-component vector of float val})
|
0:? '@entryPointOutput' (layout( location=0) out 3-element array of structure{ temp 3-component vector of float val})
|
||||||
0:? 'cpid' ( in uint InvocationID)
|
0:? 'cpid' ( in uint InvocationID)
|
||||||
0:28 Function Call: @main(struct-hs_in_t-vf31[3];u1; ( temp structure{ temp 3-component vector of float val})
|
0:28 Function Call: @main(struct-hs_in_t-vf31[3];u1; ( temp structure{ temp 3-component vector of float val})
|
||||||
@ -291,7 +291,7 @@ triangle order = cw
|
|||||||
0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
|
0:? '@patchConstantResult' ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
|
||||||
0:? Function Call: PCF(struct-hs_out_t-vf31[3];struct-hs_in_t-vf31[3]; ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
|
0:? Function Call: PCF(struct-hs_out_t-vf31[3];struct-hs_in_t-vf31[3]; ( temp structure{ temp 3-element array of float tfactor, temp float flInFactor})
|
||||||
0:? 'pcf_out' ( temp 3-element array of structure{ temp 3-component vector of float val})
|
0:? 'pcf_out' ( temp 3-element array of structure{ temp 3-component vector of float val})
|
||||||
0:? 'i' (layout( location=0) in 3-element array of structure{ temp 3-component vector of float val})
|
0:? 'i' ( temp 3-element array of structure{ temp 3-component vector of float val})
|
||||||
0:? Sequence
|
0:? Sequence
|
||||||
0:? move second child to first child ( temp float)
|
0:? move second child to first child ( temp float)
|
||||||
0:? direct index ( patch out float TessLevelOuter)
|
0:? direct index ( patch out float TessLevelOuter)
|
||||||
@ -568,7 +568,7 @@ triangle order = cw
|
|||||||
87: 30(ptr) AccessChain 67(pcf_out) 81
|
87: 30(ptr) AccessChain 67(pcf_out) 81
|
||||||
Store 87 86
|
Store 87 86
|
||||||
90: 20 Load 67(pcf_out)
|
90: 20 Load 67(pcf_out)
|
||||||
91: 11 Load 42(i)
|
91: 11 Load 40(i)
|
||||||
92:22(hs_pcf_t) FunctionCall 26(PCF(struct-hs_out_t-vf31[3];struct-hs_in_t-vf31[3];) 90 91
|
92:22(hs_pcf_t) FunctionCall 26(PCF(struct-hs_out_t-vf31[3];struct-hs_in_t-vf31[3];) 90 91
|
||||||
Store 89(@patchConstantResult) 92
|
Store 89(@patchConstantResult) 92
|
||||||
98: 97(ptr) AccessChain 89(@patchConstantResult) 29 29
|
98: 97(ptr) AccessChain 89(@patchConstantResult) 29 29
|
||||||
|
@ -29,7 +29,7 @@ triangle order = ccw
|
|||||||
0:? 'ip' ( temp 3-element array of structure{ temp 3-component vector of float cpoint})
|
0:? 'ip' ( temp 3-element array of structure{ temp 3-component vector of float cpoint})
|
||||||
0:? 'ip' (layout( location=0) in 3-element array of structure{ temp 3-component vector of float cpoint})
|
0:? 'ip' (layout( location=0) in 3-element array of structure{ temp 3-component vector of float cpoint})
|
||||||
0:26 move second child to first child ( temp structure{ temp 3-component vector of float cpoint})
|
0:26 move second child to first child ( temp structure{ temp 3-component vector of float cpoint})
|
||||||
0:26 indirect index ( temp structure{ temp 3-component vector of float cpoint})
|
0:26 indirect index (layout( location=0) out structure{ temp 3-component vector of float cpoint})
|
||||||
0:? '@entryPointOutput' (layout( location=0) out 3-element array of structure{ temp 3-component vector of float cpoint})
|
0:? '@entryPointOutput' (layout( location=0) out 3-element array of structure{ temp 3-component vector of float cpoint})
|
||||||
0:? 'InvocationId' ( in uint InvocationID)
|
0:? 'InvocationId' ( in uint InvocationID)
|
||||||
0:26 Function Call: @main(struct-VS_OUT-vf31[3]; ( temp structure{ temp 3-component vector of float cpoint})
|
0:26 Function Call: @main(struct-VS_OUT-vf31[3]; ( temp structure{ temp 3-component vector of float cpoint})
|
||||||
@ -85,7 +85,7 @@ triangle order = ccw
|
|||||||
0:? 'ip' ( temp 3-element array of structure{ temp 3-component vector of float cpoint})
|
0:? 'ip' ( temp 3-element array of structure{ temp 3-component vector of float cpoint})
|
||||||
0:? 'ip' (layout( location=0) in 3-element array of structure{ temp 3-component vector of float cpoint})
|
0:? 'ip' (layout( location=0) in 3-element array of structure{ temp 3-component vector of float cpoint})
|
||||||
0:26 move second child to first child ( temp structure{ temp 3-component vector of float cpoint})
|
0:26 move second child to first child ( temp structure{ temp 3-component vector of float cpoint})
|
||||||
0:26 indirect index ( temp structure{ temp 3-component vector of float cpoint})
|
0:26 indirect index (layout( location=0) out structure{ temp 3-component vector of float cpoint})
|
||||||
0:? '@entryPointOutput' (layout( location=0) out 3-element array of structure{ temp 3-component vector of float cpoint})
|
0:? '@entryPointOutput' (layout( location=0) out 3-element array of structure{ temp 3-component vector of float cpoint})
|
||||||
0:? 'InvocationId' ( in uint InvocationID)
|
0:? 'InvocationId' ( in uint InvocationID)
|
||||||
0:26 Function Call: @main(struct-VS_OUT-vf31[3]; ( temp structure{ temp 3-component vector of float cpoint})
|
0:26 Function Call: @main(struct-VS_OUT-vf31[3]; ( temp structure{ temp 3-component vector of float cpoint})
|
||||||
|
43
Test/hlsl.hull.4.tesc
Normal file
43
Test/hlsl.hull.4.tesc
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
|
||||||
|
// Test mixed InputPatch structure: user and builtin members. Hull shaders involve extra
|
||||||
|
// logic in this case due to patch constant function call synthesis.
|
||||||
|
|
||||||
|
// This example tests the main EP and the PCF EP both having an input patch.
|
||||||
|
|
||||||
|
struct HS_Main_Output
|
||||||
|
{
|
||||||
|
float4 m_Position : SV_POSITION ;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct HS_Output
|
||||||
|
{
|
||||||
|
float fTessFactor [ 3 ] : SV_TessFactor ;
|
||||||
|
float fInsideTessFactor : SV_InsideTessFactor ;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct HS_Input
|
||||||
|
{
|
||||||
|
float4 m_Position : SV_POSITION;
|
||||||
|
float4 m_Normal : TEXCOORD2;
|
||||||
|
};
|
||||||
|
|
||||||
|
HS_Output HS_ConstFunc ( InputPatch < HS_Input , 3 > I )
|
||||||
|
{
|
||||||
|
HS_Output O = (HS_Output)0;
|
||||||
|
|
||||||
|
O.fInsideTessFactor = I [ 0 ].m_Position.w + I [ 0 ].m_Normal.w;
|
||||||
|
|
||||||
|
return O;
|
||||||
|
}
|
||||||
|
|
||||||
|
[ domain ( "tri" ) ]
|
||||||
|
[ partitioning ( "fractional_odd" ) ]
|
||||||
|
[ outputtopology ( "triangle_cw" ) ]
|
||||||
|
[ patchconstantfunc ( "HS_ConstFunc" ) ]
|
||||||
|
[ outputcontrolpoints ( 3 ) ]
|
||||||
|
HS_Main_Output main( InputPatch < HS_Input , 3 > I , uint cpid : SV_OutputControlPointID )
|
||||||
|
{
|
||||||
|
HS_Main_Output output = ( HS_Main_Output ) 0 ;
|
||||||
|
output.m_Position = 0;
|
||||||
|
return output ;
|
||||||
|
}
|
43
Test/hlsl.hull.5.tesc
Normal file
43
Test/hlsl.hull.5.tesc
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
|
||||||
|
// Test mixed InputPatch structure: user and builtin members. Hull shaders involve extra
|
||||||
|
// logic in this case due to patch constant function call synthesis.
|
||||||
|
|
||||||
|
// This example tests the PCF EP having an InputPatch, but the main EP does not.
|
||||||
|
|
||||||
|
struct HS_Main_Output
|
||||||
|
{
|
||||||
|
float4 m_Position : SV_POSITION ;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct HS_Output
|
||||||
|
{
|
||||||
|
float fTessFactor [ 3 ] : SV_TessFactor ;
|
||||||
|
float fInsideTessFactor : SV_InsideTessFactor ;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct HS_Input
|
||||||
|
{
|
||||||
|
float4 m_Position : SV_POSITION;
|
||||||
|
float4 m_Normal : TEXCOORD2;
|
||||||
|
};
|
||||||
|
|
||||||
|
HS_Output HS_ConstFunc ( InputPatch < HS_Input , 3 > I )
|
||||||
|
{
|
||||||
|
HS_Output O = (HS_Output)0;
|
||||||
|
|
||||||
|
O.fInsideTessFactor = I [ 0 ].m_Position.w + I [ 0 ].m_Normal.w;
|
||||||
|
|
||||||
|
return O;
|
||||||
|
}
|
||||||
|
|
||||||
|
[ domain ( "tri" ) ]
|
||||||
|
[ partitioning ( "fractional_odd" ) ]
|
||||||
|
[ outputtopology ( "triangle_cw" ) ]
|
||||||
|
[ patchconstantfunc ( "HS_ConstFunc" ) ]
|
||||||
|
[ outputcontrolpoints ( 3 ) ]
|
||||||
|
HS_Main_Output main( uint cpid : SV_OutputControlPointID )
|
||||||
|
{
|
||||||
|
HS_Main_Output output = ( HS_Main_Output ) 0 ;
|
||||||
|
output.m_Position = 0;
|
||||||
|
return output ;
|
||||||
|
}
|
@ -164,6 +164,8 @@ INSTANTIATE_TEST_CASE_P(
|
|||||||
{"hlsl.hull.1.tesc", "main"},
|
{"hlsl.hull.1.tesc", "main"},
|
||||||
{"hlsl.hull.2.tesc", "main"},
|
{"hlsl.hull.2.tesc", "main"},
|
||||||
{"hlsl.hull.3.tesc", "main"},
|
{"hlsl.hull.3.tesc", "main"},
|
||||||
|
{"hlsl.hull.4.tesc", "main"},
|
||||||
|
{"hlsl.hull.5.tesc", "main"},
|
||||||
{"hlsl.hull.void.tesc", "main"},
|
{"hlsl.hull.void.tesc", "main"},
|
||||||
{"hlsl.hull.ctrlpt-1.tesc", "main"},
|
{"hlsl.hull.ctrlpt-1.tesc", "main"},
|
||||||
{"hlsl.hull.ctrlpt-2.tesc", "main"},
|
{"hlsl.hull.ctrlpt-2.tesc", "main"},
|
||||||
|
@ -1999,6 +1999,11 @@ TIntermNode* HlslParseContext::transformEntryPoint(const TSourceLoc& loc, TFunct
|
|||||||
TParameter& param = userFunction[i];
|
TParameter& param = userFunction[i];
|
||||||
argVars.push_back(makeInternalVariable(*param.name, *param.type));
|
argVars.push_back(makeInternalVariable(*param.name, *param.type));
|
||||||
argVars.back()->getWritableType().getQualifier().makeTemporary();
|
argVars.back()->getWritableType().getQualifier().makeTemporary();
|
||||||
|
|
||||||
|
// Track the input patch, which is the only non-builtin supported by hull shader PCF.
|
||||||
|
if (param.getDeclaredBuiltIn() == EbvInputPatch)
|
||||||
|
inputPatch = argVars.back();
|
||||||
|
|
||||||
TIntermSymbol* arg = intermediate.addSymbol(*argVars.back());
|
TIntermSymbol* arg = intermediate.addSymbol(*argVars.back());
|
||||||
handleFunctionArgument(&callee, callingArgs, arg);
|
handleFunctionArgument(&callee, callingArgs, arg);
|
||||||
if (param.type->getQualifier().isParamInput()) {
|
if (param.type->getQualifier().isParamInput()) {
|
||||||
@ -2039,7 +2044,10 @@ TIntermNode* HlslParseContext::transformEntryPoint(const TSourceLoc& loc, TFunct
|
|||||||
|
|
||||||
TIntermTyped* element = intermediate.addIndex(EOpIndexIndirect, intermediate.addSymbol(*entryPointOutput),
|
TIntermTyped* element = intermediate.addIndex(EOpIndexIndirect, intermediate.addSymbol(*entryPointOutput),
|
||||||
invocationIdSym, loc);
|
invocationIdSym, loc);
|
||||||
element->setType(callReturn->getType());
|
|
||||||
|
// Set the type of the array element being dereferenced
|
||||||
|
const TType derefElementType(entryPointOutput->getType(), 0);
|
||||||
|
element->setType(derefElementType);
|
||||||
|
|
||||||
returnAssign = handleAssign(loc, EOpAssign, element, callReturn);
|
returnAssign = handleAssign(loc, EOpAssign, element, callReturn);
|
||||||
} else {
|
} else {
|
||||||
@ -2215,9 +2223,6 @@ void HlslParseContext::remapEntryPointIO(TFunction& function, TVariable*& return
|
|||||||
synthesizeEditedInput(paramType);
|
synthesizeEditedInput(paramType);
|
||||||
TVariable* argAsGlobal = makeIoVariable(function[i].name->c_str(), paramType, EvqVaryingIn);
|
TVariable* argAsGlobal = makeIoVariable(function[i].name->c_str(), paramType, EvqVaryingIn);
|
||||||
inputs.push_back(argAsGlobal);
|
inputs.push_back(argAsGlobal);
|
||||||
|
|
||||||
if (function[i].getDeclaredBuiltIn() == EbvInputPatch)
|
|
||||||
inputPatch = argAsGlobal;
|
|
||||||
}
|
}
|
||||||
if (paramType.getQualifier().isParamOutput()) {
|
if (paramType.getQualifier().isParamOutput()) {
|
||||||
TVariable* argAsGlobal = makeIoVariable(function[i].name->c_str(), paramType, EvqVaryingOut);
|
TVariable* argAsGlobal = makeIoVariable(function[i].name->c_str(), paramType, EvqVaryingOut);
|
||||||
@ -2561,14 +2566,25 @@ TIntermTyped* HlslParseContext::handleAssign(const TSourceLoc& loc, TOperator op
|
|||||||
if (left->getAsOperator() && left->getAsOperator()->getOp() == EOpMatrixSwizzle)
|
if (left->getAsOperator() && left->getAsOperator()->getOp() == EOpMatrixSwizzle)
|
||||||
return handleAssignToMatrixSwizzle(loc, op, left, right);
|
return handleAssignToMatrixSwizzle(loc, op, left, right);
|
||||||
|
|
||||||
const bool isSplitLeft = wasSplit(left);
|
// Return true if the given node is an index operation into a split variable.
|
||||||
const bool isSplitRight = wasSplit(right);
|
const auto indexesSplit = [this](const TIntermTyped* node) -> bool {
|
||||||
|
const TIntermBinary* binaryNode = node->getAsBinaryNode();
|
||||||
|
|
||||||
|
if (binaryNode == nullptr)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return (binaryNode->getOp() == EOpIndexDirect || binaryNode->getOp() == EOpIndexIndirect) &&
|
||||||
|
wasSplit(binaryNode->getLeft());
|
||||||
|
};
|
||||||
|
|
||||||
|
const bool isSplitLeft = wasSplit(left) || indexesSplit(left);
|
||||||
|
const bool isSplitRight = wasSplit(right) || indexesSplit(right);
|
||||||
|
|
||||||
const bool isFlattenLeft = wasFlattened(left);
|
const bool isFlattenLeft = wasFlattened(left);
|
||||||
const bool isFlattenRight = wasFlattened(right);
|
const bool isFlattenRight = wasFlattened(right);
|
||||||
|
|
||||||
// OK to do a single assign if both are split, or both are unsplit. But if one is and the other
|
// OK to do a single assign if neither side is split or flattened. Otherwise,
|
||||||
// isn't, we fall back to a member-wise copy.
|
// fall through to a member-wise copy.
|
||||||
if (!isFlattenLeft && !isFlattenRight && !isSplitLeft && !isSplitRight) {
|
if (!isFlattenLeft && !isFlattenRight && !isSplitLeft && !isSplitRight) {
|
||||||
// Clip and cull distance requires more processing. See comment above assignClipCullDistance.
|
// Clip and cull distance requires more processing. See comment above assignClipCullDistance.
|
||||||
if (isClipOrCullDistance(left->getType()) || isClipOrCullDistance(right->getType())) {
|
if (isClipOrCullDistance(left->getType()) || isClipOrCullDistance(right->getType())) {
|
||||||
@ -2803,8 +2819,25 @@ TIntermTyped* HlslParseContext::handleAssign(const TSourceLoc& loc, TOperator op
|
|||||||
|
|
||||||
// If either left or right was a split structure, we must read or write it, but still have to
|
// If either left or right was a split structure, we must read or write it, but still have to
|
||||||
// parallel-recurse through the unsplit structure to identify the built-in IO vars.
|
// parallel-recurse through the unsplit structure to identify the built-in IO vars.
|
||||||
if (isSplitLeft)
|
// The left can be either a symbol, or an index into a symbol (e.g, array reference)
|
||||||
splitLeft = intermediate.addSymbol(*getSplitNonIoVar(left->getAsSymbolNode()->getId()), loc);
|
if (isSplitLeft) {
|
||||||
|
if (indexesSplit(left)) {
|
||||||
|
// Index case: Refer to the indexed symbol, if the left is an index operator.
|
||||||
|
const TIntermSymbol* symNode = left->getAsBinaryNode()->getLeft()->getAsSymbolNode();
|
||||||
|
|
||||||
|
TIntermTyped* splitLeftNonIo = intermediate.addSymbol(*getSplitNonIoVar(symNode->getId()), loc);
|
||||||
|
|
||||||
|
splitLeft = intermediate.addIndex(left->getAsBinaryNode()->getOp(), splitLeftNonIo,
|
||||||
|
left->getAsBinaryNode()->getRight(), loc);
|
||||||
|
|
||||||
|
const TType derefType(splitLeftNonIo->getType(), 0);
|
||||||
|
splitLeft->setType(derefType);
|
||||||
|
} else {
|
||||||
|
// Symbol case: otherwise, if not indexed, we have the symbol directly.
|
||||||
|
const TIntermSymbol* symNode = left->getAsSymbolNode();
|
||||||
|
splitLeft = intermediate.addSymbol(*getSplitNonIoVar(symNode->getId()), loc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (isSplitRight)
|
if (isSplitRight)
|
||||||
splitRight = intermediate.addSymbol(*getSplitNonIoVar(right->getAsSymbolNode()->getId()), loc);
|
splitRight = intermediate.addSymbol(*getSplitNonIoVar(right->getAsSymbolNode()->getId()), loc);
|
||||||
@ -9035,19 +9068,12 @@ TIntermSymbol* HlslParseContext::findTessLinkageSymbol(TBuiltInVariable biType)
|
|||||||
return intermediate.addSymbol(*it->second->getAsVariable());
|
return intermediate.addSymbol(*it->second->getAsVariable());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Finalization step: Add patch constant function invocation
|
// Find the patch constant function (issues error, returns nullptr if not found)
|
||||||
void HlslParseContext::addPatchConstantInvocation()
|
const TFunction* HlslParseContext::findPatchConstantFunction(const TSourceLoc& loc)
|
||||||
{
|
{
|
||||||
TSourceLoc loc;
|
|
||||||
loc.init();
|
|
||||||
|
|
||||||
// If there's no patch constant function, or we're not a HS, do nothing.
|
|
||||||
if (patchConstantFunctionName.empty() || language != EShLangTessControl)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (symbolTable.isFunctionNameVariable(patchConstantFunctionName)) {
|
if (symbolTable.isFunctionNameVariable(patchConstantFunctionName)) {
|
||||||
error(loc, "can't use variable in patch constant function", patchConstantFunctionName.c_str(), "");
|
error(loc, "can't use variable in patch constant function", patchConstantFunctionName.c_str(), "");
|
||||||
return;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
const TString mangledName = patchConstantFunctionName + "(";
|
const TString mangledName = patchConstantFunctionName + "(";
|
||||||
@ -9061,7 +9087,7 @@ void HlslParseContext::addPatchConstantInvocation()
|
|||||||
// allow any disambiguation of overloads.
|
// allow any disambiguation of overloads.
|
||||||
if (candidateList.empty()) {
|
if (candidateList.empty()) {
|
||||||
error(loc, "patch constant function not found", patchConstantFunctionName.c_str(), "");
|
error(loc, "patch constant function not found", patchConstantFunctionName.c_str(), "");
|
||||||
return;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Based on directed experiments, it appears that if there are overloaded patchconstantfunctions,
|
// Based on directed experiments, it appears that if there are overloaded patchconstantfunctions,
|
||||||
@ -9069,9 +9095,22 @@ void HlslParseContext::addPatchConstantInvocation()
|
|||||||
// out if there is more than one candidate.
|
// out if there is more than one candidate.
|
||||||
if (candidateList.size() > 1) {
|
if (candidateList.size() > 1) {
|
||||||
error(loc, "ambiguous patch constant function", patchConstantFunctionName.c_str(), "");
|
error(loc, "ambiguous patch constant function", patchConstantFunctionName.c_str(), "");
|
||||||
return;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return candidateList[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Finalization step: Add patch constant function invocation
|
||||||
|
void HlslParseContext::addPatchConstantInvocation()
|
||||||
|
{
|
||||||
|
TSourceLoc loc;
|
||||||
|
loc.init();
|
||||||
|
|
||||||
|
// If there's no patch constant function, or we're not a HS, do nothing.
|
||||||
|
if (patchConstantFunctionName.empty() || language != EShLangTessControl)
|
||||||
|
return;
|
||||||
|
|
||||||
// Look for built-in variables in a function's parameter list.
|
// Look for built-in variables in a function's parameter list.
|
||||||
const auto findBuiltIns = [&](const TFunction& function, std::set<tInterstageIoData>& builtIns) {
|
const auto findBuiltIns = [&](const TFunction& function, std::set<tInterstageIoData>& builtIns) {
|
||||||
for (int p=0; p<function.getParamCount(); ++p) {
|
for (int p=0; p<function.getParamCount(); ++p) {
|
||||||
@ -9136,7 +9175,13 @@ void HlslParseContext::addPatchConstantInvocation()
|
|||||||
//
|
//
|
||||||
// 5/5B. Call the PCF inside an if test for (invocation id == 0).
|
// 5/5B. Call the PCF inside an if test for (invocation id == 0).
|
||||||
|
|
||||||
TFunction& patchConstantFunction = const_cast<TFunction&>(*candidateList[0]);
|
TFunction* patchConstantFunctionPtr = const_cast<TFunction*>(findPatchConstantFunction(loc));
|
||||||
|
|
||||||
|
if (patchConstantFunctionPtr == nullptr)
|
||||||
|
return;
|
||||||
|
|
||||||
|
TFunction& patchConstantFunction = *patchConstantFunctionPtr;
|
||||||
|
|
||||||
const int pcfParamCount = patchConstantFunction.getParamCount();
|
const int pcfParamCount = patchConstantFunction.getParamCount();
|
||||||
TIntermSymbol* invocationIdSym = findTessLinkageSymbol(EbvInvocationId);
|
TIntermSymbol* invocationIdSym = findTessLinkageSymbol(EbvInvocationId);
|
||||||
TIntermSequence& epBodySeq = entryPointFunctionBody->getAsAggregate()->getSequence();
|
TIntermSequence& epBodySeq = entryPointFunctionBody->getAsAggregate()->getSequence();
|
||||||
@ -9217,10 +9262,9 @@ void HlslParseContext::addPatchConstantInvocation()
|
|||||||
|
|
||||||
// ================ Step 1B: Argument synthesis ================
|
// ================ Step 1B: Argument synthesis ================
|
||||||
// Create pcfArguments for synthesis of patchconstantfunction invocation
|
// Create pcfArguments for synthesis of patchconstantfunction invocation
|
||||||
// TODO: handle struct or array inputs
|
|
||||||
{
|
{
|
||||||
for (int p=0; p<pcfParamCount; ++p) {
|
for (int p=0; p<pcfParamCount; ++p) {
|
||||||
TIntermSymbol* inputArg = nullptr;
|
TIntermTyped* inputArg = nullptr;
|
||||||
|
|
||||||
if (p == outPatchParam) {
|
if (p == outPatchParam) {
|
||||||
if (perCtrlPtVar == nullptr) {
|
if (perCtrlPtVar == nullptr) {
|
||||||
@ -9234,6 +9278,11 @@ void HlslParseContext::addPatchConstantInvocation()
|
|||||||
// find which built-in it is
|
// find which built-in it is
|
||||||
const TBuiltInVariable biType = patchConstantFunction[p].getDeclaredBuiltIn();
|
const TBuiltInVariable biType = patchConstantFunction[p].getDeclaredBuiltIn();
|
||||||
|
|
||||||
|
if (biType == EbvInputPatch && inputPatch == nullptr) {
|
||||||
|
error(loc, "unimplemented: PCF input patch without entry point input patch parameter", "", "");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
inputArg = findTessLinkageSymbol(biType);
|
inputArg = findTessLinkageSymbol(biType);
|
||||||
|
|
||||||
if (inputArg == nullptr) {
|
if (inputArg == nullptr) {
|
||||||
|
@ -316,6 +316,9 @@ protected:
|
|||||||
static bool isClipOrCullDistance(const TQualifier& qual) { return isClipOrCullDistance(qual.builtIn); }
|
static bool isClipOrCullDistance(const TQualifier& qual) { return isClipOrCullDistance(qual.builtIn); }
|
||||||
static bool isClipOrCullDistance(const TType& type) { return isClipOrCullDistance(type.getQualifier()); }
|
static bool isClipOrCullDistance(const TType& type) { return isClipOrCullDistance(type.getQualifier()); }
|
||||||
|
|
||||||
|
// Find the patch constant function (issues error, returns nullptr if not found)
|
||||||
|
const TFunction* findPatchConstantFunction(const TSourceLoc& loc);
|
||||||
|
|
||||||
// Pass through to base class after remembering built-in mappings.
|
// Pass through to base class after remembering built-in mappings.
|
||||||
using TParseContextBase::trackLinkage;
|
using TParseContextBase::trackLinkage;
|
||||||
void trackLinkage(TSymbol& variable) override;
|
void trackLinkage(TSymbol& variable) override;
|
||||||
@ -415,7 +418,8 @@ protected:
|
|||||||
};
|
};
|
||||||
|
|
||||||
TMap<tInterstageIoData, TVariable*> splitBuiltIns; // split built-ins, indexed by built-in type.
|
TMap<tInterstageIoData, TVariable*> splitBuiltIns; // split built-ins, indexed by built-in type.
|
||||||
TVariable* inputPatch;
|
TVariable* inputPatch; // input patch is special for PCF: it's the only non-builtin PCF input,
|
||||||
|
// and is handled as a pseudo-builtin.
|
||||||
|
|
||||||
unsigned int nextInLocation;
|
unsigned int nextInLocation;
|
||||||
unsigned int nextOutLocation;
|
unsigned int nextOutLocation;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user