diff options
author | Ian Romanick <[email protected]> | 2012-01-31 11:29:06 -0700 |
---|---|---|
committer | Ian Romanick <[email protected]> | 2012-02-02 10:07:14 -0700 |
commit | 660ed923ded3552e023ef8c3dd9f92e6792f1bd2 (patch) | |
tree | ed384752239b9fd32f64d70177865b51d43bac27 /src/mesa/swrast/s_span.c | |
parent | e06b1c65bc576a9b239841cbe3a8a8c2d6a8d09f (diff) |
mesa: Convert colors if span ChanType and renderbuffer data type don't match
This is a partial revert of f9874fe. It turns out that the types
don't always match. Specifically, this can happen when doing
glCopyPixels from a float FBO to a RGBA8 FBO.
NOTE: This is a candidate for the 8.0 branch.
Signed-off-by: Ian Romanick <[email protected]>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=45429
Reviewed-by: Brian Paul <[email protected]>
Diffstat (limited to 'src/mesa/swrast/s_span.c')
-rw-r--r-- | src/mesa/swrast/s_span.c | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/src/mesa/swrast/s_span.c b/src/mesa/swrast/s_span.c index 28f2f3d3fff..422d86c00a7 100644 --- a/src/mesa/swrast/s_span.c +++ b/src/mesa/swrast/s_span.c @@ -1321,12 +1321,23 @@ _swrast_write_rgba_span( struct gl_context *ctx, SWspan *span) if (rb) { GLchan rgbaSave[MAX_WIDTH][4]; - if (span->array->ChanType == GL_UNSIGNED_BYTE) { - span->array->rgba = span->array->rgba8; + GLenum datatype; + GLuint comps; + + _mesa_format_to_type_and_comps(rb->Format, &datatype, &comps); + + /* set span->array->rgba to colors for render buffer's datatype */ + if (datatype != span->array->ChanType) { + convert_color_type(span, datatype, 0); } else { - span->array->rgba = (void *) - span->array->attribs[FRAG_ATTRIB_COL0]; + if (span->array->ChanType == GL_UNSIGNED_BYTE) { + span->array->rgba = span->array->rgba8; + } + else { + span->array->rgba = (void *) + span->array->attribs[FRAG_ATTRIB_COL0]; + } } if (!multiFragOutputs && numBuffers > 1) { |