[Mesa-dev] [PATCH 5/5] gallium: Enable ARB_clip_control for gallium drivers.
Ilia Mirkin
imirkin at alum.mit.edu
Wed Oct 22 10:20:35 PDT 2014
On Wed, Oct 22, 2014 at 1:13 PM, <Mathias.Froehlich at gmx.net> wrote:
> From: Mathias Fröhlich <Mathias.Froehlich at gmx.net>
>
> Gallium should be prepared fine for ARB_clip_control.
> So enable this and mention it in the release notes.
>
> v2:
> Only enable for drivers announcing the freshly introduced
> PIPE_CAP_CLIP_HALFZ capability.
>
> Signed-off-by: Mathias Froehlich <Mathias.Froehlich at web.de>
> ---
> docs/GL3.txt | 2 +-
> docs/relnotes/10.4.html | 1 +
> src/mesa/state_tracker/st_atom_rasterizer.c | 14 +++++++++++++-
> src/mesa/state_tracker/st_extensions.c | 5 +++++
> 4 files changed, 20 insertions(+), 2 deletions(-)
>
> diff --git a/docs/GL3.txt b/docs/GL3.txt
> index 07d1d2c..35b7678 100644
> --- a/docs/GL3.txt
> +++ b/docs/GL3.txt
> @@ -187,7 +187,7 @@ GL 4.4, GLSL 4.40:
> GL 4.5, GLSL 4.50:
>
> GL_ARB_ES3_1_compatibility not started
> - GL_ARB_clip_control not started
> + GL_ARB_clip_control DONE (llvmpipe, softpipe)
> GL_ARB_conditional_render_inverted DONE (i965, nvc0, llvmpipe, softpipe)
> GL_ARB_cull_distance not started
> GL_ARB_derivative_control DONE (i965, nv50, nvc0, r600)
> diff --git a/docs/relnotes/10.4.html b/docs/relnotes/10.4.html
> index 64cbfae..4c7af47 100644
> --- a/docs/relnotes/10.4.html
> +++ b/docs/relnotes/10.4.html
> @@ -46,6 +46,7 @@ Note: some of the new features are only available with certain drivers.
> <ul>
> <li>GL_ARB_sample_shading on r600</li>
> <li>GL_ARB_texture_view on nv50, nvc0</li>
> +<li>GL_ARB_clip_control on llvmpipe, softpipe</li>
> </ul>
>
>
> diff --git a/src/mesa/state_tracker/st_atom_rasterizer.c b/src/mesa/state_tracker/st_atom_rasterizer.c
> index dfa728b..31d7776 100644
> --- a/src/mesa/state_tracker/st_atom_rasterizer.c
> +++ b/src/mesa/state_tracker/st_atom_rasterizer.c
> @@ -72,6 +72,11 @@ static void update_raster_state( struct st_context *st )
> {
> raster->front_ccw = (ctx->Polygon.FrontFace == GL_CCW);
>
> + /* _NEW_VIEWPORT */
> + if (ctx->ClipControl.Origin == GL_UPPER_LEFT) {
> + raster->front_ccw ^= 1;
> + }
> +
> /*
> * Gallium's surfaces are Y=0=TOP orientation. OpenGL is the
> * opposite. Window system surfaces are Y=0=TOP. Mesa's FBOs
> @@ -241,6 +246,12 @@ static void update_raster_state( struct st_context *st )
> raster->half_pixel_center = 1;
> if (st_fb_orientation(ctx->DrawBuffer) == Y_0_TOP)
> raster->bottom_edge_rule = 1;
> + /* _NEW_VIEWPORT */
> + if (ctx->ClipControl.Origin == GL_UPPER_LEFT)
> + raster->bottom_edge_rule ^= 1;
> +
> + /* _NEW_VIEWPORT */
> + raster->clip_halfz = (ctx->ClipControl.Depth == GL_ZERO_TO_ONE);
>
> /* ST_NEW_RASTERIZER */
> raster->rasterizer_discard = ctx->RasterDiscard;
> @@ -272,7 +283,8 @@ const struct st_tracked_state st_update_rasterizer = {
> _NEW_PROGRAM |
> _NEW_SCISSOR |
> _NEW_FRAG_CLAMP |
> - _NEW_TRANSFORM), /* mesa state dependencies*/
> + _NEW_TRANSFORM |
> + _NEW_VIEWPORT), /* mesa state dependencies*/
> (ST_NEW_VERTEX_PROGRAM |
> ST_NEW_RASTERIZER), /* state tracker dependencies */
> },
> diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c
> index 78bfe30..4a3f055 100644
> --- a/src/mesa/state_tracker/st_extensions.c
> +++ b/src/mesa/state_tracker/st_extensions.c
> @@ -889,4 +889,9 @@ void st_init_extensions(struct pipe_screen *screen,
> PIPE_VIDEO_CAP_SUPPORTS_INTERLACED)) {
> extensions->NV_vdpau_interop = GL_TRUE;
> }
> +
> + /* ARB_clip_control */
> + if (screen->get_param(screen, PIPE_CAP_CLIP_HALFZ)) {
> + extensions->ARB_clip_control = GL_TRUE;
> + }
Take a look at the giant array of structs above this function... it
lets you set extensions based on caps in a more integrated fashion.
> }
> --
> 1.9.3
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list