i965/fs: Initialize output_components[] by filling it with zeros.
Prior to commit2f1869822
, emit_fb_writes() looped from 0 to 3, writing all four components of a vec4 color output. However, that broke for smaller output types (float, vec2, or vec3). To fix that, I introduced a new variable (output_components[]) containing the size of the output type for each render target. Unfortunately, I forgot to actually initialize it in the constructor, which meant that unless a shader wrote to gl_FragColor, or the specific output for each render target, output_components would contain a garbage value, and we'd loop for a completely non-deterministic amount of time. Not actually emitting any color writes seems like the right approach. We may still need to emit a render target write (to terminate the thread), but don't have to put in any sensible values (the shader didn't write anything, after all). Fixes a regression since2f18698220
. NOTE: This is a candidate for stable release branches. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=54193 Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Paul Berry <stereotype441@gmail.com> Tested-by: Ian Romanick <idr@freedesktop.org>
This commit is contained in:
parent
42723d88d3
commit
6928bea7ca
|
@ -2277,6 +2277,7 @@ fs_visitor::fs_visitor(struct brw_wm_compile *c, struct gl_shader_program *prog,
|
|||
|
||||
this->frag_depth = NULL;
|
||||
memset(this->outputs, 0, sizeof(this->outputs));
|
||||
memset(this->output_components, 0, sizeof(this->output_components));
|
||||
this->first_non_payload_grf = 0;
|
||||
this->max_grf = intel->gen >= 7 ? GEN7_MRF_HACK_START : BRW_MAX_GRF;
|
||||
|
||||
|
|
Loading…
Reference in New Issue