summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKenneth Graunke <[email protected]>2014-02-10 19:37:08 -0800
committerKenneth Graunke <[email protected]>2014-02-19 15:43:22 -0800
commit51145a24f7938a4d5575d8d9aa4f8afa369d836b (patch)
tree7c1590400c96a9deceb9af6c5b2c25da386e2806
parenta3d70580b52c37036e162a976efd9e038615e6d7 (diff)
i965: Enable smooth points when multisampling without point sprites.
According to the "Point Multisample Rasterization" of the OpenGL specification (3.0 or later), smooth points are supposed to be enabled implicitly when multisampling, regardless of the GL_POINT_SMOOTH flag. However, if GL_POINT_SPRITE is enabled, you get square points no matter what. Core contexts always enable point sprites, so this effectively makes smooth points go away, even in the case of multisampling. Fixes Piglit's EXT_framebuffer_multisample/point-smooth tests. (Yes, that's right folks, we actually have Piglit tests for this.) Signed-off-by: Kenneth Graunke <[email protected]> Reviewed-by: Eric Anholt <[email protected]> Reviewed-by: Anuj Phogat <[email protected]>
-rw-r--r--src/mesa/drivers/dri/i965/gen8_sf_state.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/mesa/drivers/dri/i965/gen8_sf_state.c b/src/mesa/drivers/dri/i965/gen8_sf_state.c
index b31b17e1064..0693fee7047 100644
--- a/src/mesa/drivers/dri/i965/gen8_sf_state.c
+++ b/src/mesa/drivers/dri/i965/gen8_sf_state.c
@@ -139,8 +139,11 @@ upload_sf(struct brw_context *brw)
if (!(ctx->VertexProgram.PointSizeEnabled || ctx->Point._Attenuated))
dw3 |= GEN6_SF_USE_STATE_POINT_WIDTH;
- if (ctx->Point.SmoothFlag)
+ /* _NEW_POINT | _NEW_MULTISAMPLE */
+ if ((ctx->Point.SmoothFlag || ctx->Multisample._Enabled) &&
+ !ctx->Point.PointSprite) {
dw3 |= GEN8_SF_SMOOTH_POINT_ENABLE;
+ }
dw3 |= GEN6_SF_LINE_AA_MODE_TRUE;
@@ -166,6 +169,7 @@ const struct brw_tracked_state gen8_sf_state = {
.mesa = _NEW_LIGHT |
_NEW_PROGRAM |
_NEW_LINE |
+ _NEW_MULTISAMPLE |
_NEW_POINT,
.brw = BRW_NEW_CONTEXT,
.cache = 0,