diff options
| author | 2021-03-30 21:52:06 +0200 | |
|---|---|---|
| committer | 2021-07-22 21:51:25 -0400 | |
| commit | 0c4cf3b9eb7de6624a844ae9ac9d2ba6b2ef3ac2 (patch) | |
| tree | 2ee6b4fb859d23e304b80d91a3472d8a504d01e3 /src/shader_recompiler/backend/spirv/emit_context.cpp | |
| parent | shader: Fix TXD (diff) | |
| download | yuzu-0c4cf3b9eb7de6624a844ae9ac9d2ba6b2ef3ac2.tar.gz yuzu-0c4cf3b9eb7de6624a844ae9ac9d2ba6b2ef3ac2.tar.xz yuzu-0c4cf3b9eb7de6624a844ae9ac9d2ba6b2ef3ac2.zip | |
shader: Implement ClipDistance
Diffstat (limited to 'src/shader_recompiler/backend/spirv/emit_context.cpp')
| -rw-r--r-- | src/shader_recompiler/backend/spirv/emit_context.cpp | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/src/shader_recompiler/backend/spirv/emit_context.cpp b/src/shader_recompiler/backend/spirv/emit_context.cpp index c8ce58254..2e3e3346d 100644 --- a/src/shader_recompiler/backend/spirv/emit_context.cpp +++ b/src/shader_recompiler/backend/spirv/emit_context.cpp | |||
| @@ -176,6 +176,9 @@ void EmitContext::DefineCommonTypes(const Info& info) { | |||
| 176 | AddCapability(spv::Capability::Float64); | 176 | AddCapability(spv::Capability::Float64); |
| 177 | F64.Define(*this, TypeFloat(64), "f64"); | 177 | F64.Define(*this, TypeFloat(64), "f64"); |
| 178 | } | 178 | } |
| 179 | if (info.stores_clip_distance) { | ||
| 180 | Array8F32 = Name(TypeArray(F32[1], Constant(U32[1], 8)), "array_8_f32"); | ||
| 181 | } | ||
| 179 | } | 182 | } |
| 180 | 183 | ||
| 181 | void EmitContext::DefineCommonConstants() { | 184 | void EmitContext::DefineCommonConstants() { |
| @@ -502,6 +505,12 @@ void EmitContext::DefineOutputs(const Info& info) { | |||
| 502 | } | 505 | } |
| 503 | output_point_size = DefineOutput(*this, F32[1], spv::BuiltIn::PointSize); | 506 | output_point_size = DefineOutput(*this, F32[1], spv::BuiltIn::PointSize); |
| 504 | } | 507 | } |
| 508 | if (info.stores_clip_distance) { | ||
| 509 | if (stage == Stage::Fragment) { | ||
| 510 | throw NotImplementedException("Storing PointSize in Fragment stage"); | ||
| 511 | } | ||
| 512 | clip_distances = DefineOutput(*this, Array8F32, spv::BuiltIn::ClipDistance); | ||
| 513 | } | ||
| 505 | for (size_t i = 0; i < info.stores_generics.size(); ++i) { | 514 | for (size_t i = 0; i < info.stores_generics.size(); ++i) { |
| 506 | if (info.stores_generics[i]) { | 515 | if (info.stores_generics[i]) { |
| 507 | output_generics[i] = DefineOutput(*this, F32[4]); | 516 | output_generics[i] = DefineOutput(*this, F32[4]); |