diff options
author | Eric Anholt <[email protected]> | 2017-02-06 14:06:12 -0800 |
---|---|---|
committer | Eric Anholt <[email protected]> | 2017-06-30 12:25:45 -0700 |
commit | f6c5c6b9be1a241c095af2da985c25b95ffbaa25 (patch) | |
tree | ebc223d7ddc9e367cae229ffb48b93711bdd4fce /src/gallium/drivers/vc4/vc4_state.c | |
parent | bd1925562ad19e0972e06371dfb695b5e75cb7e4 (diff) |
vc4: Move rasterizer state packing to CSO creation time.
This gets our vc4_emit.c size back down a bit:
before:
1020 0 0 1020 3fc src/gallium/drivers/vc4/.libs/vc4_emit.o
after:
968 0 0 968 3c8 src/gallium/drivers/vc4/.libs/vc4_emit.o
Diffstat (limited to 'src/gallium/drivers/vc4/vc4_state.c')
-rw-r--r-- | src/gallium/drivers/vc4/vc4_state.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/src/gallium/drivers/vc4/vc4_state.c b/src/gallium/drivers/vc4/vc4_state.c index 3267bb043f9..9a3438f8493 100644 --- a/src/gallium/drivers/vc4/vc4_state.c +++ b/src/gallium/drivers/vc4/vc4_state.c @@ -94,6 +94,9 @@ vc4_create_rasterizer_state(struct pipe_context *pctx, const struct pipe_rasterizer_state *cso) { struct vc4_rasterizer_state *so; + struct V3D21_DEPTH_OFFSET depth_offset = { V3D21_DEPTH_OFFSET_header }; + struct V3D21_POINT_SIZE point_size = { V3D21_POINT_SIZE_header }; + struct V3D21_LINE_WIDTH line_width = { V3D21_LINE_WIDTH_header }; so = CALLOC_STRUCT(vc4_rasterizer_state); if (!so) @@ -109,7 +112,9 @@ vc4_create_rasterizer_state(struct pipe_context *pctx, /* Workaround: HW-2726 PTB does not handle zero-size points (BCM2835, * BCM21553). */ - so->point_size = MAX2(cso->point_size, .125f); + point_size.point_size = MAX2(cso->point_size, .125f); + + line_width.line_width = cso->line_width; if (cso->front_ccw) so->config_bits[0] |= VC4_CONFIG_BITS_CW_PRIMITIVES; @@ -117,13 +122,19 @@ vc4_create_rasterizer_state(struct pipe_context *pctx, if (cso->offset_tri) { so->config_bits[0] |= VC4_CONFIG_BITS_ENABLE_DEPTH_OFFSET; - so->offset_units = float_to_187_half(cso->offset_units); - so->offset_factor = float_to_187_half(cso->offset_scale); + depth_offset.depth_offset_units = + float_to_187_half(cso->offset_units); + depth_offset.depth_offset_factor = + float_to_187_half(cso->offset_scale); } if (cso->multisample) so->config_bits[0] |= VC4_CONFIG_BITS_RASTERIZER_OVERSAMPLE_4X; + V3D21_DEPTH_OFFSET_pack(NULL, so->packed.depth_offset, &depth_offset); + V3D21_POINT_SIZE_pack(NULL, so->packed.point_size, &point_size); + V3D21_LINE_WIDTH_pack(NULL, so->packed.line_width, &line_width); + return so; } |