From 5fc0e11053a57d0559f30c28399ba8a8403f12a9 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Mathias=20Fr=C3=B6hlich?= Date: Sun, 21 Sep 2014 18:09:22 +0200 Subject: [PATCH] gallium: Enable ARB_clip_control for gallium drivers. 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. v3: Use extension enable infrastructure to connect PIPE_CAP_CLIP_HALFZ with ARB_clip_control. Reviewed-by: Brian Paul Signed-off-by: Mathias Froehlich --- 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 | 1 + 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/docs/GL3.txt b/docs/GL3.txt index 07d1d2c493f..6a988d5e710 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, r300, r600, radeonsi) 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 64cbfaefa6f..67c3087ee44 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.
  • GL_ARB_sample_shading on r600
  • GL_ARB_texture_view on nv50, nvc0
  • +
  • GL_ARB_clip_control on llvmpipe, softpipe, r300, r600, radeonsi
diff --git a/src/mesa/state_tracker/st_atom_rasterizer.c b/src/mesa/state_tracker/st_atom_rasterizer.c index dfa728b19ec..50209788bcd 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->Transform.ClipOrigin == 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->Transform.ClipOrigin == GL_UPPER_LEFT) + raster->bottom_edge_rule ^= 1; + + /* _NEW_VIEWPORT */ + raster->clip_halfz = (ctx->Transform.ClipDepthMode == 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 78bfe30735f..aff3ddebe13 100644 --- a/src/mesa/state_tracker/st_extensions.c +++ b/src/mesa/state_tracker/st_extensions.c @@ -463,6 +463,7 @@ void st_init_extensions(struct pipe_screen *screen, { o(ARB_derivative_control), PIPE_CAP_TGSI_FS_FINE_DERIVATIVE }, { o(ARB_conditional_render_inverted), PIPE_CAP_CONDITIONAL_RENDER_INVERTED }, { o(ARB_texture_view), PIPE_CAP_SAMPLER_VIEW_TARGET }, + { o(ARB_clip_control), PIPE_CAP_CLIP_HALFZ }, }; /* Required: render target and sampler support */ -- 2.30.2