diff options
-rw-r--r-- | src/gallium/drivers/r300/r300_state_derived.c | 20 | ||||
-rw-r--r-- | src/gallium/drivers/r300/r300_state_derived.h | 2 |
2 files changed, 22 insertions, 0 deletions
diff --git a/src/gallium/drivers/r300/r300_state_derived.c b/src/gallium/drivers/r300/r300_state_derived.c index fc2730d4c60..df19f20fc8f 100644 --- a/src/gallium/drivers/r300/r300_state_derived.c +++ b/src/gallium/drivers/r300/r300_state_derived.c @@ -107,8 +107,28 @@ static void r300_update_vertex_layout(struct r300_context* r300) vinfo.hwfmt[1] |= (4 << (3 * i)); } + draw_compute_vertex_size(&vinfo); + if (memcmp(&r300->vertex_info, &vinfo, sizeof(struct vertex_info))) { memcpy(&r300->vertex_info, &vinfo, sizeof(struct vertex_info)); r300->dirty_state |= R300_NEW_VERTEX_FORMAT; } } + +/* Set up the RS block. This is the part of the chipset that actually does + * the rasterization of vertices into fragments. This is also the part of the + * chipset that locks up if any part of it is even slightly wrong. */ +void r300_update_rs_block(struct r300_context* r300) +{ +} + +void r300_update_derived_state(struct r300_context* r300) +{ + if (r300->dirty_state & R300_NEW_FRAGMENT_SHADER) { + r300_update_vertex_layout(r300); + } + + if (r300->dirty_state & R300_NEW_VERTEX_FORMAT) { + r300_update_rs_block(r300); + } +} diff --git a/src/gallium/drivers/r300/r300_state_derived.h b/src/gallium/drivers/r300/r300_state_derived.h index 11d0787d127..72ba6b928d6 100644 --- a/src/gallium/drivers/r300/r300_state_derived.h +++ b/src/gallium/drivers/r300/r300_state_derived.h @@ -28,4 +28,6 @@ #include "r300_context.h" #include "r300_reg.h" +void r300_update_derived_state(struct r300_context* r300); + #endif /* R300_STATE_DERIVED_H */ |