diff options
author | marha <marha@users.sourceforge.net> | 2015-02-22 14:31:16 +0100 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2015-02-22 14:31:16 +0100 |
commit | f1c2db43dcf35d2cf4715390bd2391c28e42a8c2 (patch) | |
tree | 46b537271afe0f6534231b1bd4cc4f91ae1fb446 /mesalib/src/mesa/swrast/s_span.c | |
parent | 5e5a48ff8cd08f123601cd0625ca62a86675aac9 (diff) | |
download | vcxsrv-f1c2db43dcf35d2cf4715390bd2391c28e42a8c2.tar.gz vcxsrv-f1c2db43dcf35d2cf4715390bd2391c28e42a8c2.tar.bz2 vcxsrv-f1c2db43dcf35d2cf4715390bd2391c28e42a8c2.zip |
xwininfo fontconfig libX11 libXdmcp libfontenc libxcb libxcb/xcb-proto mesalib xserver xkeyboard-config mkfontscale git update 22 Feb 2015
xserver commit 3a06faf3fcdb7451125a46181f9152e8e59e9770
libxcb commit e3ec1f74637237ce500dfd0ca59f2e422da4e019
libxcb/xcb-proto commit 4c550465934164aab2449a125f75f4ca07816233
xkeyboard-config commit 26f344c93f8c6141e9233eb68088ba4fd56bc9ef
libX11 commit c8e19b393defd53f046ddc2da3a16881221b3c34
libXdmcp commit 9f4cac7656b221ce2a8f97e7bd31e5e23126d001
libfontenc commit de1843aaf76015c9d99416f3122d169fe331b849
mkfontscale commit 87d628f8eec170ec13bb9feefb1ce05aed07d1d6
xwininfo commit 0c49f8f2bd56b1e77721e81030ea948386dcdf4e
fontconfig commit d6d5adeb7940c0d0beb86489c2a1c2ce59e5c044
mesa commit 4359954d842caa2a9f8d4b50d70ecc789884b68b
Diffstat (limited to 'mesalib/src/mesa/swrast/s_span.c')
-rw-r--r-- | mesalib/src/mesa/swrast/s_span.c | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/mesalib/src/mesa/swrast/s_span.c b/mesalib/src/mesa/swrast/s_span.c index 10aa33c6f..321959df9 100644 --- a/mesalib/src/mesa/swrast/s_span.c +++ b/mesalib/src/mesa/swrast/s_span.c @@ -39,6 +39,7 @@ #include "main/imports.h" #include "main/image.h" #include "main/samplerobj.h" +#include "main/teximage.h" #include "s_atifragshader.h" #include "s_alpha.h" @@ -495,7 +496,7 @@ interpolate_texcoords(struct gl_context *ctx, SWspan *span) GLfloat q = span->attrStart[attr][3] + span->leftClip * dqdx; if (obj) { - const struct gl_texture_image *img = obj->Image[0][obj->BaseLevel]; + const struct gl_texture_image *img = _mesa_base_tex_image(obj); const struct swrast_texture_image *swImg = swrast_texture_image_const(img); const struct gl_sampler_object *samp = _mesa_get_samplerobj(ctx, u); @@ -932,19 +933,19 @@ clamp_colors(SWspan *span) * \param output which fragment program color output is being processed */ static inline void -convert_color_type(SWspan *span, GLenum newType, GLuint output) +convert_color_type(SWspan *span, GLenum srcType, GLenum newType, GLuint output) { GLvoid *src, *dst; - if (output > 0 || span->array->ChanType == GL_FLOAT) { + if (output > 0 || srcType == GL_FLOAT) { src = span->array->attribs[VARYING_SLOT_COL0 + output]; span->array->ChanType = GL_FLOAT; } - else if (span->array->ChanType == GL_UNSIGNED_BYTE) { + else if (srcType == GL_UNSIGNED_BYTE) { src = span->array->rgba8; } else { - ASSERT(span->array->ChanType == GL_UNSIGNED_SHORT); + ASSERT(srcType == GL_UNSIGNED_SHORT); src = span->array->rgba16; } @@ -978,7 +979,7 @@ shade_texture_span(struct gl_context *ctx, SWspan *span) ctx->ATIFragmentShader._Enabled) { /* programmable shading */ if (span->primitive == GL_BITMAP && span->array->ChanType != GL_FLOAT) { - convert_color_type(span, GL_FLOAT, 0); + convert_color_type(span, span->array->ChanType, GL_FLOAT, 0); } else { span->array->rgba = (void *) span->array->attribs[VARYING_SLOT_COL0]; @@ -1313,6 +1314,8 @@ _swrast_write_rgba_span( struct gl_context *ctx, SWspan *span) const GLboolean multiFragOutputs = _swrast_use_fragment_program(ctx) && fp->Base.OutputsWritten >= (1 << FRAG_RESULT_DATA0); + /* Save srcColorType because convert_color_type() can change it */ + const GLenum srcColorType = span->array->ChanType; GLuint buf; for (buf = 0; buf < numBuffers; buf++) { @@ -1324,17 +1327,18 @@ _swrast_write_rgba_span( struct gl_context *ctx, SWspan *span) /* re-use one of the attribute array buffers for rgbaSave */ GLchan (*rgbaSave)[4] = (GLchan (*)[4]) span->array->attribs[0]; struct swrast_renderbuffer *srb = swrast_renderbuffer(rb); - GLenum colorType = srb->ColorType; + const GLenum dstColorType = srb->ColorType; - assert(colorType == GL_UNSIGNED_BYTE || - colorType == GL_FLOAT); + assert(dstColorType == GL_UNSIGNED_BYTE || + dstColorType == GL_FLOAT); /* set span->array->rgba to colors for renderbuffer's datatype */ - if (span->array->ChanType != colorType) { - convert_color_type(span, colorType, 0); + if (srcColorType != dstColorType) { + convert_color_type(span, srcColorType, dstColorType, + multiFragOutputs ? buf : 0); } else { - if (span->array->ChanType == GL_UNSIGNED_BYTE) { + if (srcColorType == GL_UNSIGNED_BYTE) { span->array->rgba = span->array->rgba8; } else { |