[Mesa-dev] [PATCH 5/5] gallium: Enable ARB_clip_control for gallium drivers.
Mathias.Froehlich at gmx.net
Mathias.Froehlich at gmx.net
Fri Oct 24 00:26:57 PDT 2014
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.
v3:
Use extension enable infrastructure to connect PIPE_CAP_CLIP_HALFZ
with ARB_clip_control.
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 | 1 +
4 files changed, 16 insertions(+), 2 deletions(-)
diff --git a/docs/GL3.txt b/docs/GL3.txt
index 07d1d2c..6a988d5 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 64cbfae..67c3087 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, r300, r600, radeonsi</li>
</ul>
diff --git a/src/mesa/state_tracker/st_atom_rasterizer.c b/src/mesa/state_tracker/st_atom_rasterizer.c
index dfa728b..2f0886e 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.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->Transform.Origin == GL_UPPER_LEFT)
+ raster->bottom_edge_rule ^= 1;
+
+ /* _NEW_VIEWPORT */
+ raster->clip_halfz = (ctx->Transform.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..aff3dde 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 */
--
1.9.3
More information about the mesa-dev
mailing list