diff options
author | Yuri Kunde Schlesner <yuriks@yuriks.net> | 2014-12-28 18:20:33 -0200 |
---|---|---|
committer | Yuri Kunde Schlesner <yuriks@yuriks.net> | 2014-12-29 02:08:09 -0200 |
commit | d151d797b1c281d5813ca705722f43b4be20ca6d (patch) | |
tree | dddce524fe7d6a1325af881a39b87c8a26a23275 | |
parent | 487a80f9f70f5972aaf53fd855e17c07deb4819f (diff) |
Vertex Shader: Zero OutputVertex to avoid denormals
Unused OutputVertex attributes were being left un-initialized. The
leftover garbage sometimes decoded as floating-point denormalized
values, causing fallbacks to microcode and massive slowdowns in the rest
of the rasterization pipeline even though the results were unused. By
zeroing the structure we ensure these attributes only contain harmless
zeros.
-rw-r--r-- | src/video_core/vertex_shader.cpp | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/src/video_core/vertex_shader.cpp b/src/video_core/vertex_shader.cpp index e31bc3bc7..bed5081a0 100644 --- a/src/video_core/vertex_shader.cpp +++ b/src/video_core/vertex_shader.cpp @@ -469,6 +469,10 @@ OutputVertex RunShader(const InputVertex& input, int num_attributes) // Setup output register table OutputVertex ret; + // Zero output so that attributes which aren't output won't have denormals in them, which will + // slow us down later. + memset(&ret, 0, sizeof(ret)); + for (int i = 0; i < 7; ++i) { const auto& output_register_map = registers.vs_output_attributes[i]; |