gallium: add polygon offset clamp state
This is required for D3D1x and supported by hardware.
This commit is contained in:
parent
f83af361a4
commit
16f8308c3d
|
@ -43,6 +43,7 @@ struct offset_stage {
|
||||||
|
|
||||||
float scale;
|
float scale;
|
||||||
float units;
|
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;
|
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.
|
* Note: we're applying the offset and clamping per-vertex.
|
||||||
* Ideally, the offset is applied per-fragment prior to fragment shading.
|
* 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->units = (float) (stage->draw->rasterizer->offset_units * stage->draw->mrd);
|
||||||
offset->scale = stage->draw->rasterizer->offset_scale;
|
offset->scale = stage->draw->rasterizer->offset_scale;
|
||||||
|
offset->clamp = stage->draw->rasterizer->offset_clamp;
|
||||||
|
|
||||||
stage->tri = offset_tri;
|
stage->tri = offset_tri;
|
||||||
stage->tri( stage, header );
|
stage->tri( stage, header );
|
||||||
|
|
|
@ -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, point_size);
|
||||||
util_dump_member(stream, float, state, offset_units);
|
util_dump_member(stream, float, state, offset_units);
|
||||||
util_dump_member(stream, float, state, offset_scale);
|
util_dump_member(stream, float, state, offset_scale);
|
||||||
|
util_dump_member(stream, float, state, offset_clamp);
|
||||||
|
|
||||||
util_dump_struct_end(stream);
|
util_dump_struct_end(stream);
|
||||||
}
|
}
|
||||||
|
|
|
@ -119,6 +119,8 @@ offset_units
|
||||||
Specifies the polygon offset bias
|
Specifies the polygon offset bias
|
||||||
offset_scale
|
offset_scale
|
||||||
Specifies the polygon offset scale
|
Specifies the polygon offset scale
|
||||||
|
offset_clamp
|
||||||
|
Upper (if > 0) or lower (if < 0) bound on the polygon offset result
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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, point_size);
|
||||||
trace_dump_member(float, state, offset_units);
|
trace_dump_member(float, state, offset_units);
|
||||||
trace_dump_member(float, state, offset_scale);
|
trace_dump_member(float, state, offset_scale);
|
||||||
|
trace_dump_member(float, state, offset_clamp);
|
||||||
|
|
||||||
trace_dump_struct_end();
|
trace_dump_struct_end();
|
||||||
}
|
}
|
||||||
|
|
|
@ -130,6 +130,7 @@ struct pipe_rasterizer_state
|
||||||
float point_size; /**< used when no per-vertex size */
|
float point_size; /**< used when no per-vertex size */
|
||||||
float offset_units;
|
float offset_units;
|
||||||
float offset_scale;
|
float offset_scale;
|
||||||
|
float offset_clamp;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue