gallium: add polygon offset clamp state

This is required for D3D1x and supported by hardware.
This commit is contained in:
Christoph Bumiller 2011-09-24 13:22:29 +02:00
parent f83af361a4
commit 16f8308c3d
5 changed files with 11 additions and 0 deletions

View File

@ -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 );

View File

@ -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);
}

View File

@ -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

View File

@ -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();
}

View File

@ -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;
};