vkd3d/tests/hlsl/hull-shader-attributes.shader_test
Giovanni Mascellani 624eccbab1 ci: Update the DXC version used on the CI to 1.8.2407.
Unfortuantely different versions of DXC accept or fail differently
in some cases. We don't care too much about validating the DXC
behavior itself, but it's useful that all the CI jobs use the
same version so that we don't have to complicate the shader runner
language.

The macOS version is currently bound to be pretty recent because
otherwise libdxil.dylib is not provided. So I'm updating the
Linux and Windows version as well.

I don't expect it should be particularly hard for other maintainers
to keep up with the DXC updates, since it just amounts to
downloading a ZIP file and extracting two libraries.
2024-10-28 17:36:17 +01:00

483 lines
8.4 KiB
Plaintext

[require]
shader model >= 5.0
[hull shader]
struct patch_constant_data
{
float edges[2] : SV_TessFactor;
};
patch_constant_data patch_constant()
{
return (patch_constant_data)0;
}
[domain("isoline")]
[outputcontrolpoints(3)]
[partitioning("integer")]
[outputtopology("point")]
[patchconstantfunc("patch_constant")]
float4 main() : POSITION
{
return 0;
}
%% Test missing attributes.
[hull shader fail]
struct patch_constant_data
{
float edges[2] : SV_TessFactor;
};
patch_constant_data patch_constant()
{
return (patch_constant_data)0;
}
//[domain("isoline")]
[outputcontrolpoints(3)]
[partitioning("integer")]
[outputtopology("point")]
[patchconstantfunc("patch_constant")]
float4 main() : POSITION
{
return 0;
}
% outputcontrolpoints defaults to 0 for SM >= 6.
[hull shader fail]
struct patch_constant_data
{
float edges[2] : SV_TessFactor;
};
patch_constant_data patch_constant()
{
return (patch_constant_data)0;
}
[domain("isoline")]
//[outputcontrolpoints(3)]
[partitioning("integer")]
[outputtopology("point")]
[patchconstantfunc("patch_constant")]
float4 main() : POSITION
{
return 0;
}
[hull shader fail]
struct patch_constant_data
{
float edges[2] : SV_TessFactor;
};
patch_constant_data patch_constant()
{
return (patch_constant_data)0;
}
[domain("isoline")]
[outputcontrolpoints(3)]
//[partitioning("integer")]
[outputtopology("point")]
[patchconstantfunc("patch_constant")]
float4 main() : POSITION
{
return 0;
}
[hull shader fail]
struct patch_constant_data
{
float edges[2] : SV_TessFactor;
};
patch_constant_data patch_constant()
{
return (patch_constant_data)0;
}
[domain("isoline")]
[outputcontrolpoints(3)]
[partitioning("integer")]
//[outputtopology("point")]
[patchconstantfunc("patch_constant")]
float4 main() : POSITION
{
return 0;
}
[hull shader fail]
struct patch_constant_data
{
float edges[2] : SV_TessFactor;
};
patch_constant_data patch_constant()
{
return (patch_constant_data)0;
}
[domain("isoline")]
[outputcontrolpoints(3)]
[partitioning("integer")]
[outputtopology("point")]
//[patchconstantfunc("patch_constant")]
float4 main() : POSITION
{
return 0;
}
%% Test valid combinations of the domain and outputtopology attributes.
[hull shader]
struct patch_constant_data
{
float edges[2] : SV_TessFactor;
};
patch_constant_data patch_constant()
{
return (patch_constant_data)0;
}
[domain("isoline")]
[outputcontrolpoints(3)]
[partitioning("integer")]
[outputtopology("point")]
[patchconstantfunc("patch_constant")]
float4 main() : POSITION
{
return 0;
}
[hull shader]
struct patch_constant_data
{
float edges[2] : SV_TessFactor;
};
patch_constant_data patch_constant()
{
return (patch_constant_data)0;
}
[domain("isoline")]
[outputcontrolpoints(3)]
[partitioning("integer")]
[outputtopology("line")]
[patchconstantfunc("patch_constant")]
float4 main() : POSITION
{
return 0;
}
[hull shader fail]
struct patch_constant_data
{
float edges[2] : SV_TessFactor;
};
patch_constant_data patch_constant()
{
return (patch_constant_data)0;
}
[domain("isoline")]
[outputcontrolpoints(3)]
[partitioning("integer")]
[outputtopology("triangle_cw")]
[patchconstantfunc("patch_constant")]
float4 main() : POSITION
{
return 0;
}
[hull shader fail]
struct patch_constant_data
{
float edges[2] : SV_TessFactor;
};
patch_constant_data patch_constant()
{
return (patch_constant_data)0;
}
[domain("isoline")]
[outputcontrolpoints(3)]
[partitioning("integer")]
[outputtopology("triangle_ccw")]
[patchconstantfunc("patch_constant")]
float4 main() : POSITION
{
return 0;
}
[hull shader]
struct patch_constant_data
{
float edges[3] : SV_TessFactor;
float inside : SV_InsideTessFactor;
};
patch_constant_data patch_constant()
{
return (patch_constant_data)0;
}
[domain("tri")]
[outputcontrolpoints(3)]
[partitioning("integer")]
[outputtopology("point")]
[patchconstantfunc("patch_constant")]
float4 main() : POSITION
{
return 0;
}
[hull shader fail]
struct patch_constant_data
{
float edges[3] : SV_TessFactor;
float inside : SV_InsideTessFactor;
};
patch_constant_data patch_constant()
{
return (patch_constant_data)0;
}
[domain("tri")]
[outputcontrolpoints(3)]
[partitioning("integer")]
[outputtopology("line")]
[patchconstantfunc("patch_constant")]
float4 main() : POSITION
{
return 0;
}
[hull shader]
struct patch_constant_data
{
float edges[3] : SV_TessFactor;
float inside : SV_InsideTessFactor;
};
patch_constant_data patch_constant()
{
return (patch_constant_data)0;
}
[domain("tri")]
[outputcontrolpoints(3)]
[partitioning("integer")]
[outputtopology("triangle_cw")]
[patchconstantfunc("patch_constant")]
float4 main() : POSITION
{
return 0;
}
[hull shader]
struct patch_constant_data
{
float edges[3] : SV_TessFactor;
float inside : SV_InsideTessFactor;
};
patch_constant_data patch_constant()
{
return (patch_constant_data)0;
}
[domain("tri")]
[outputcontrolpoints(3)]
[partitioning("integer")]
[outputtopology("triangle_ccw")]
[patchconstantfunc("patch_constant")]
float4 main() : POSITION
{
return 0;
}
[hull shader]
struct patch_constant_data
{
float edges[4] : SV_TessFactor;
float inside[2] : SV_InsideTessFactor;
};
patch_constant_data patch_constant()
{
return (patch_constant_data)0;
}
[domain("quad")]
[outputcontrolpoints(3)]
[partitioning("integer")]
[outputtopology("point")]
[patchconstantfunc("patch_constant")]
float4 main() : POSITION
{
return 0;
}
[hull shader fail]
struct patch_constant_data
{
float edges[4] : SV_TessFactor;
float inside[2] : SV_InsideTessFactor;
};
patch_constant_data patch_constant()
{
return (patch_constant_data)0;
}
[domain("quad")]
[outputcontrolpoints(3)]
[partitioning("integer")]
[outputtopology("line")]
[patchconstantfunc("patch_constant")]
float4 main() : POSITION
{
return 0;
}
[hull shader]
struct patch_constant_data
{
float edges[4] : SV_TessFactor;
float inside[2] : SV_InsideTessFactor;
};
patch_constant_data patch_constant()
{
return (patch_constant_data)0;
}
[domain("quad")]
[outputcontrolpoints(3)]
[partitioning("integer")]
[outputtopology("triangle_cw")]
[patchconstantfunc("patch_constant")]
float4 main() : POSITION
{
return 0;
}
[hull shader]
struct patch_constant_data
{
float edges[4] : SV_TessFactor;
float inside[2] : SV_InsideTessFactor;
};
patch_constant_data patch_constant()
{
return (patch_constant_data)0;
}
[domain("quad")]
[outputcontrolpoints(3)]
[partitioning("integer")]
[outputtopology("triangle_ccw")]
[patchconstantfunc("patch_constant")]
float4 main() : POSITION
{
return 0;
}
%% Test the valid range for outputcontrolpoints ([0, 32]).
[hull shader fail(sm>=6)]
struct patch_constant_data
{
float edges[2] : SV_TessFactor;
};
patch_constant_data patch_constant()
{
return (patch_constant_data)0;
}
[domain("isoline")]
[outputcontrolpoints(0)]
[partitioning("integer")]
[outputtopology("point")]
[patchconstantfunc("patch_constant")]
float4 main() : POSITION
{
return 0;
}
[hull shader]
struct patch_constant_data
{
float edges[2] : SV_TessFactor;
};
patch_constant_data patch_constant()
{
return (patch_constant_data)0;
}
[domain("isoline")]
[outputcontrolpoints(32)]
[partitioning("integer")]
[outputtopology("point")]
[patchconstantfunc("patch_constant")]
float4 main() : POSITION
{
return 0;
}
[hull shader fail]
struct patch_constant_data
{
float edges[2] : SV_TessFactor;
};
patch_constant_data patch_constant()
{
return (patch_constant_data)0;
}
[domain("isoline")]
[outputcontrolpoints(33)]
[partitioning("integer")]
[outputtopology("point")]
[patchconstantfunc("patch_constant")]
float4 main() : POSITION
{
return 0;
}
% patchconstantfunc can't point to the main function.
[hull shader notimpl(sm<6) fail(sm>=6)]
struct patch_constant_data
{
float edges[2] : SV_TessFactor;
};
patch_constant_data patch_constant()
{
return (patch_constant_data)0;
}
[domain("isoline")]
[outputcontrolpoints(3)]
[partitioning("integer")]
[outputtopology("point")]
[patchconstantfunc("main")]
float4 main() : POSITION
{
return 0;
}