From: Christoph Bumiller Date: Sat, 24 Sep 2011 11:22:29 +0000 (+0200) Subject: gallium: add polygon offset clamp state X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=16f8308c3df020a786908be065d3dcb90c8ca2a5;p=mesa.git gallium: add polygon offset clamp state This is required for D3D1x and supported by hardware. --- diff --git a/src/gallium/auxiliary/draw/draw_pipe_offset.c b/src/gallium/auxiliary/draw/draw_pipe_offset.c index 8afbbfa1569..3da52b10624 100644 --- a/src/gallium/auxiliary/draw/draw_pipe_offset.c +++ b/src/gallium/auxiliary/draw/draw_pipe_offset.c @@ -43,6 +43,7 @@ struct offset_stage { float scale; float units; + float clamp; }; @@ -90,6 +91,10 @@ static void do_offset_tri( struct draw_stage *stage, float zoffset = offset->units + MAX2(dzdx, dzdy) * offset->scale; + if (offset->clamp) + zoffset = (offset->clamp < 0.0f) ? MAX2(zoffset, offset->clamp) : + MIN2(zoffset, offset->clamp); + /* * Note: we're applying the offset and clamping per-vertex. * Ideally, the offset is applied per-fragment prior to fragment shading. @@ -125,6 +130,7 @@ static void offset_first_tri( struct draw_stage *stage, offset->units = (float) (stage->draw->rasterizer->offset_units * stage->draw->mrd); offset->scale = stage->draw->rasterizer->offset_scale; + offset->clamp = stage->draw->rasterizer->offset_clamp; stage->tri = offset_tri; stage->tri( stage, header ); diff --git a/src/gallium/auxiliary/util/u_dump_state.c b/src/gallium/auxiliary/util/u_dump_state.c index 6bb36996632..8a7ec584846 100644 --- a/src/gallium/auxiliary/util/u_dump_state.c +++ b/src/gallium/auxiliary/util/u_dump_state.c @@ -332,6 +332,7 @@ util_dump_rasterizer_state(struct os_stream *stream, const struct pipe_rasterize util_dump_member(stream, float, state, point_size); util_dump_member(stream, float, state, offset_units); util_dump_member(stream, float, state, offset_scale); + util_dump_member(stream, float, state, offset_clamp); util_dump_struct_end(stream); } diff --git a/src/gallium/docs/source/cso/rasterizer.rst b/src/gallium/docs/source/cso/rasterizer.rst index e10c16ed900..a3836d9286a 100644 --- a/src/gallium/docs/source/cso/rasterizer.rst +++ b/src/gallium/docs/source/cso/rasterizer.rst @@ -119,6 +119,8 @@ offset_units Specifies the polygon offset bias offset_scale Specifies the polygon offset scale +offset_clamp + Upper (if > 0) or lower (if < 0) bound on the polygon offset result diff --git a/src/gallium/drivers/trace/tr_dump_state.c b/src/gallium/drivers/trace/tr_dump_state.c index 652ffa7a94b..cbe4cb6b8c4 100644 --- a/src/gallium/drivers/trace/tr_dump_state.c +++ b/src/gallium/drivers/trace/tr_dump_state.c @@ -149,6 +149,7 @@ void trace_dump_rasterizer_state(const struct pipe_rasterizer_state *state) trace_dump_member(float, state, point_size); trace_dump_member(float, state, offset_units); trace_dump_member(float, state, offset_scale); + trace_dump_member(float, state, offset_clamp); trace_dump_struct_end(); } diff --git a/src/gallium/include/pipe/p_state.h b/src/gallium/include/pipe/p_state.h index 90a85601852..37e0679e15f 100644 --- a/src/gallium/include/pipe/p_state.h +++ b/src/gallium/include/pipe/p_state.h @@ -130,6 +130,7 @@ struct pipe_rasterizer_state float point_size; /**< used when no per-vertex size */ float offset_units; float offset_scale; + float offset_clamp; };