On Mon, Sep 8, 2014 at 11:53 PM, Juha-Pekka Heikkila
<juhapekka.heikk...@gmail.com> wrote:
> On default fallback path there was null access on src_rb
>
> Signed-off-by: Juha-Pekka Heikkila <juhapekka.heikk...@gmail.com>
> ---
>  src/mesa/drivers/common/meta_blit.c | 20 +++++++++++---------
>  1 file changed, 11 insertions(+), 9 deletions(-)
>
> diff --git a/src/mesa/drivers/common/meta_blit.c 
> b/src/mesa/drivers/common/meta_blit.c
> index 3cd06a5..1603f43 100644
> --- a/src/mesa/drivers/common/meta_blit.c
> +++ b/src/mesa/drivers/common/meta_blit.c
> @@ -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.
>         */
Unrelated to your changes, I'm not sure if we really need the else
case? Do we have a piglit test for src_rb==null case? Currently an
application will just crash in this function for such a case.

> +      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
Above changes look fine but we still have unguarded dereferencing of src_rb
(src_rb->_BaseFormat) in switch below this code.

Just add an assert(src_rb) at top if you decide to get rid of else case above.

> --
> 1.8.5.1
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to