shader: Implement ClipDistance

This commit is contained in:
FernandoS27 2021-03-30 21:52:06 +02:00 committed by ameerj
parent 8f2238dc3d
commit 40ace25859
5 changed files with 36 additions and 0 deletions

View file

@ -176,6 +176,9 @@ void EmitContext::DefineCommonTypes(const Info& info) {
AddCapability(spv::Capability::Float64);
F64.Define(*this, TypeFloat(64), "f64");
}
if (info.stores_clip_distance) {
Array8F32 = Name(TypeArray(F32[1], Constant(U32[1], 8)), "array_8_f32");
}
}
void EmitContext::DefineCommonConstants() {
@ -502,6 +505,12 @@ void EmitContext::DefineOutputs(const Info& info) {
}
output_point_size = DefineOutput(*this, F32[1], spv::BuiltIn::PointSize);
}
if (info.stores_clip_distance) {
if (stage == Stage::Fragment) {
throw NotImplementedException("Storing PointSize in Fragment stage");
}
clip_distances = DefineOutput(*this, Array8F32, spv::BuiltIn::ClipDistance);
}
for (size_t i = 0; i < info.stores_generics.size(); ++i) {
if (info.stores_generics[i]) {
output_generics[i] = DefineOutput(*this, F32[4]);