st/mesa: fix DrawPixels(GL_STENCIL_INDEX)
authorMarek Olšák <marek.olsak@amd.com>
Thu, 7 Aug 2014 18:58:53 +0000 (20:58 +0200)
committerMarek Olšák <marek.olsak@amd.com>
Sat, 9 Aug 2014 21:41:15 +0000 (23:41 +0200)
This is a bug which was probably uncovered recently by Jason's commits
and broke this.

The problem is _mesa_base_tex_format(GL_STENCIL_INDEX) returns -1.

Tested-by: Michel Dänzer <michel.daenzer@amd.com>
src/mesa/state_tracker/st_cb_drawpixels.c

index 6119cc275f4ed167ad41e83209c11245d989b07c..d13a17f5002ce519d65468aeb0d3e35d697c886b 100644 (file)
@@ -494,22 +494,19 @@ make_texture(struct st_context *st,
    pipeFormat = st_choose_matching_format(pipe->screen, PIPE_BIND_SAMPLER_VIEW,
                                           format, type, unpack->SwapBytes);
 
-   if (pipeFormat != PIPE_FORMAT_NONE) {
-      mformat = st_pipe_format_to_mesa_format(pipeFormat);
-      baseInternalFormat = _mesa_get_format_base_format(mformat);
-   }
-   else {
+   if (pipeFormat == PIPE_FORMAT_NONE) {
       /* Use the generic approach. */
       GLenum intFormat = internal_format(ctx, format, type);
 
-      baseInternalFormat = _mesa_base_tex_format(ctx, intFormat);
       pipeFormat = st_choose_format(st, intFormat, format, type,
                                     PIPE_TEXTURE_2D, 0, PIPE_BIND_SAMPLER_VIEW,
                                     FALSE);
       assert(pipeFormat != PIPE_FORMAT_NONE);
-      mformat = st_pipe_format_to_mesa_format(pipeFormat);
    }
 
+   mformat = st_pipe_format_to_mesa_format(pipeFormat);
+   baseInternalFormat = _mesa_get_format_base_format(mformat);
+
    pixels = _mesa_map_pbo_source(ctx, unpack, pixels);
    if (!pixels)
       return NULL;