mesa: Add dd_function_table::PrepareExecBegin
authorChad Versace <chad@chad-versace.us>
Thu, 29 Sep 2011 00:06:35 +0000 (17:06 -0700)
committerChad Versace <chad@chad-versace.us>
Tue, 18 Oct 2011 18:42:53 +0000 (11:42 -0700)
commitfd7c46f53f3a7ae5c67f3c44ba283eeb4f72b366
tree66d5389cde9c5bd181489afde376aee453c07747
parent4b6311978f6710cfb2e9d77a2ca7a30f709c1f37
mesa: Add dd_function_table::PrepareExecBegin

This hook allows the driver to prepare for a glBegin/glEnd.

i965 will use the hook to avoid avoid recursive calls to FLUSH_VERTICES
during a buffer resolve meta-op.

Detailed Justification
----------------------
When vertices are queued during a glBegin/glEnd block, those vertices must
of course be drawn before any rendering state changes. To enusure this,
Mesa calls FLUSH_VERTICES as a prehook to such state changes. Therefore,
FLUSH_VERTICES itself cannot change rendering state without falling into
a recursive trap.

This precludes meta-ops, namely i965 buffer resolves, from occuring while
any vertices are queued. To avoid that situation, i965 must satisfy the
following condition: that it queues no vertex if a buffer needs resolving.
To satisfy this, i965 will use the PrepareExecBegin hook to resolve all
buffers on entering a glBegin/glEnd block.

--------
v2: Don't add dd_function_table::CleanupExecEnd. Anholt and I discovered
    that hook to be unnecessary.

Reviewed-by: Brian Paul <brianp@vmware.com>
Signed-off-by: Chad Versace <chad@chad-versace.us>
src/mesa/drivers/common/driverfuncs.c
src/mesa/main/dd.h
src/mesa/vbo/vbo_exec_api.c