mirror of
https://github.com/RPCS3/glslang.git
synced 2024-12-18 16:58:21 +00:00
280c75ca51
Fixes #979
75 lines
1.8 KiB
GLSL
75 lines
1.8 KiB
GLSL
/////////////
|
|
// GLOBALS //
|
|
/////////////
|
|
cbuffer TessellationBuffer : register(b0)
|
|
{
|
|
float tessellationAmount;
|
|
float3 padding;
|
|
};
|
|
|
|
|
|
//////////////
|
|
// TYPEDEFS //
|
|
//////////////
|
|
struct HullInputType
|
|
{
|
|
float3 position : POSITION;
|
|
float4 color : COLOR;
|
|
};
|
|
|
|
struct ConstantOutputType
|
|
{
|
|
float edges[3] : SV_TessFactor;
|
|
float inside : SV_InsideTessFactor;
|
|
};
|
|
|
|
struct HullOutputType
|
|
{
|
|
float3 position : POSITION;
|
|
float4 color : COLOR;
|
|
};
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// Patch Constant Function
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
ConstantOutputType ColorPatchConstantFunction(InputPatch<HullInputType, 3> inputPatch, uint patchId : SV_PrimitiveID)
|
|
{
|
|
ConstantOutputType output;
|
|
|
|
|
|
// Set the tessellation factors for the three edges of the triangle.
|
|
output.edges[0] = tessellationAmount;
|
|
output.edges[1] = tessellationAmount;
|
|
output.edges[2] = tessellationAmount;
|
|
|
|
// Set the tessellation factor for tessallating inside the triangle.
|
|
output.inside = tessellationAmount;
|
|
|
|
return output;
|
|
}
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// Hull Shader
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
[domain("tri")]
|
|
[partitioning("integer")]
|
|
[outputtopology("triangle_cw")]
|
|
[outputcontrolpoints(3)]
|
|
[patchconstantfunc("ColorPatchConstantFunction")]
|
|
|
|
HullOutputType main(InputPatch<HullInputType, 3> patch, uint pointId : SV_OutputControlPointID, uint patchId : SV_PrimitiveID)
|
|
{
|
|
HullOutputType output;
|
|
|
|
// Set the position for this control point as the output position.
|
|
output.position = patch[pointId].position;
|
|
|
|
// Set the input color as the output color.
|
|
output.color = patch[pointId].color;
|
|
|
|
return output;
|
|
}
|
|
|