meta: Avoid null access on setup_glsl_msaa_blit_shader()
authorJuha-Pekka Heikkila <juhapekka.heikkila@gmail.com>
Mon, 8 Sep 2014 10:50:08 +0000 (13:50 +0300)
committerTapani Pälli <tapani.palli@intel.com>
Tue, 23 Sep 2014 07:25:02 +0000 (10:25 +0300)
On default fallback path there was null access on src_rb

Signed-off-by: Juha-Pekka Heikkila <juhapekka.heikkila@gmail.com>
Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
src/mesa/drivers/common/meta_blit.c

index 3cd06a5f527041adfc0079298a7950e2bd2fa2c5..770bc4178a287ad7d6f5c670ca1d7b9653a602ce 100644 (file)
@@ -70,26 +70,28 @@ setup_glsl_msaa_blit_shader(struct gl_context *ctx,
    const char *sampler_array_suffix = "";
    char *name;
    const char *texcoord_type = "vec2";
-   const int samples = MAX2(src_rb->NumSamples, 1);
+   int samples;
    int shader_offset = 0;
 
-   /* We expect only power of 2 samples in source multisample buffer. */
-   assert((samples & (samples - 1)) == 0);
-   while (samples >> (shader_offset + 1)) {
-      shader_offset++;
-   }
-   /* Update the assert if we plan to support more than 16X MSAA. */
-   assert(shader_offset >= 0 && shader_offset <= 4);
-
    if (src_rb) {
+      samples = MAX2(src_rb->NumSamples, 1);
       src_datatype = _mesa_get_format_datatype(src_rb->Format);
    } else {
       /* depth-or-color glCopyTexImage fallback path that passes a NULL rb and
        * doesn't handle integer.
        */
+      samples = 1;
       src_datatype = GL_UNSIGNED_NORMALIZED;
    }
 
+   /* We expect only power of 2 samples in source multisample buffer. */
+   assert((samples & (samples - 1)) == 0);
+   while (samples >> (shader_offset + 1)) {
+      shader_offset++;
+   }
+   /* Update the assert if we plan to support more than 16X MSAA. */
+   assert(shader_offset >= 0 && shader_offset <= 4);
+
    if (ctx->DrawBuffer->Visual.samples > 1) {
       /* If you're calling meta_BlitFramebuffer with the destination
        * multisampled, this is the only path that will work -- swrast and
@@ -108,8 +110,8 @@ setup_glsl_msaa_blit_shader(struct gl_context *ctx,
    switch (target) {
    case GL_TEXTURE_2D_MULTISAMPLE:
    case GL_TEXTURE_2D_MULTISAMPLE_ARRAY:
-      if (src_rb->_BaseFormat == GL_DEPTH_COMPONENT ||
-          src_rb->_BaseFormat == GL_DEPTH_STENCIL) {
+      if (src_rb && (src_rb->_BaseFormat == GL_DEPTH_COMPONENT ||
+          src_rb->_BaseFormat == GL_DEPTH_STENCIL)) {
          if (dst_is_msaa)
             shader_index = BLIT_MSAA_SHADER_2D_MULTISAMPLE_DEPTH_COPY;
          else