[Mesa-dev] [PATCH] mesa/llvmpipe: add fake MSAA support

Roland Scheidegger sroland at vmware.com
Wed Nov 27 10:13:23 PST 2013


Looks good to me.
Though frankly I don't know if that really is better than your idea of
faking 4-sample resources - it at least is simpler. But noone else
chimed in...

Roland

Am 27.11.2013 10:47, schrieb Dave Airlie:
> This adds a gallium cap that allows us to fake GL3.0 by
> not exposing MSAA on sw rendering. It also forces the
> extra extensions needed for GL3.2. Along with a patch to
> raise the GLSL version in llvmpipe this will expose GL3.3
> on llvmpipe.
> 
> However we still need Marek's code for layered clears.
> 
> Signed-off-by: Dave Airlie <airlied at redhat.com>
> ---
>  src/gallium/drivers/llvmpipe/lp_screen.c | 2 ++
>  src/gallium/include/pipe/p_defines.h     | 3 ++-
>  src/mesa/main/mtypes.h                   | 1 +
>  src/mesa/main/version.c                  | 2 +-
>  src/mesa/state_tracker/st_extensions.c   | 7 +++++++
>  5 files changed, 13 insertions(+), 2 deletions(-)
> 
> diff --git a/src/gallium/drivers/llvmpipe/lp_screen.c b/src/gallium/drivers/llvmpipe/lp_screen.c
> index f61df98..218b3f8 100644
> --- a/src/gallium/drivers/llvmpipe/lp_screen.c
> +++ b/src/gallium/drivers/llvmpipe/lp_screen.c
> @@ -234,6 +234,8 @@ llvmpipe_get_param(struct pipe_screen *screen, enum pipe_cap param)
>        return PIPE_MAX_VIEWPORTS;
>     case PIPE_CAP_ENDIANNESS:
>        return PIPE_ENDIAN_NATIVE;
> +   case PIPE_CAP_FAKE_SW_MSAA:
> +	return 1;
>     }
>     /* should only get here on unhandled cases */
>     debug_printf("Unexpected PIPE_CAP %d query\n", param);
> diff --git a/src/gallium/include/pipe/p_defines.h b/src/gallium/include/pipe/p_defines.h
> index db6db32..27f1bcf 100644
> --- a/src/gallium/include/pipe/p_defines.h
> +++ b/src/gallium/include/pipe/p_defines.h
> @@ -513,7 +513,8 @@ enum pipe_cap {
>     PIPE_CAP_MAX_TEXTURE_BUFFER_SIZE = 83,
>     PIPE_CAP_MAX_VIEWPORTS = 84,
>     PIPE_CAP_ENDIANNESS = 85,
> -   PIPE_CAP_MIXED_FRAMEBUFFER_SIZES = 86
> +   PIPE_CAP_MIXED_FRAMEBUFFER_SIZES = 86,
> +   PIPE_CAP_FAKE_SW_MSAA = 87
>  };
>  
>  #define PIPE_QUIRK_TEXTURE_BORDER_COLOR_SWIZZLE_NV50 (1 << 0)
> diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
> index ecfb5e0..39b8abd 100644
> --- a/src/mesa/main/mtypes.h
> +++ b/src/mesa/main/mtypes.h
> @@ -3302,6 +3302,7 @@ struct gl_constants
>     /** GL_ARB_vertex_attrib_binding */
>     GLint MaxVertexAttribRelativeOffset;
>     GLint MaxVertexAttribBindings;
> +   GLboolean FakeSWMSAA;
>  };
>  
>  
> diff --git a/src/mesa/main/version.c b/src/mesa/main/version.c
> index 55411fa..1dfce09 100644
> --- a/src/mesa/main/version.c
> +++ b/src/mesa/main/version.c
> @@ -229,7 +229,7 @@ compute_version(struct gl_context *ctx)
>                                ctx->Extensions.EXT_texture_sRGB);
>     const GLboolean ver_3_0 = (ver_2_1 &&
>                                ctx->Const.GLSLVersion >= 130 &&
> -                              ctx->Const.MaxSamples >= 4 &&
> +                              (ctx->Const.MaxSamples >= 4 || ctx->Const.FakeSWMSAA) &&
>                                (ctx->API == API_OPENGL_CORE ||
>                                 ctx->Extensions.ARB_color_buffer_float) &&
>                                ctx->Extensions.ARB_depth_buffer_float &&
> diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c
> index cd10a0c..701086a 100644
> --- a/src/mesa/state_tracker/st_extensions.c
> +++ b/src/mesa/state_tracker/st_extensions.c
> @@ -715,6 +715,13 @@ void st_init_extensions(struct st_context *st)
>        ctx->Extensions.EXT_framebuffer_multisample_blit_scaled = GL_TRUE;
>     }
>  
> +   if (ctx->Const.MaxSamples == 0 && screen->get_param(screen, PIPE_CAP_FAKE_SW_MSAA)) {
> +	ctx->Const.FakeSWMSAA = GL_TRUE;
> +        ctx->Extensions.EXT_framebuffer_multisample = GL_TRUE;
> +        ctx->Extensions.EXT_framebuffer_multisample_blit_scaled = GL_TRUE;
> +        ctx->Extensions.ARB_texture_multisample = GL_TRUE;
> +   }
> +
>     if (ctx->Const.MaxDualSourceDrawBuffers > 0 &&
>         !st->options.disable_blend_func_extended)
>        ctx->Extensions.ARB_blend_func_extended = GL_TRUE;
> 


More information about the mesa-dev mailing list