radeong: flush CS if a buffer being mapped is referenced by it

Also, overlapping occlusion queries seems to work now.
This commit is contained in:
Marek Olšák 2009-12-04 15:54:29 +01:00 committed by Corbin Simpson
parent 7679447b58
commit 042b524d48
2 changed files with 5 additions and 2 deletions

View file

@ -382,8 +382,6 @@ static void r300_emit_query_start(struct r300_context *r300)
if (!query)
return;
/* XXX This will almost certainly not return good results
* for overlapping queries. */
BEGIN_CS(4);
if (caps->family == CHIP_FAMILY_RV530) {
OUT_CS_REG(RV530_FG_ZBREG_DEST, RV530_FG_ZBREG_DEST_PIPE_SELECT_ALL);

View file

@ -140,10 +140,15 @@ static void *radeon_buffer_map(struct pipe_winsys *ws,
struct pipe_buffer *buffer,
unsigned flags)
{
struct radeon_winsys_priv *priv = ((struct radeon_winsys *)ws)->priv;
struct radeon_pipe_buffer *radeon_buffer =
(struct radeon_pipe_buffer*)buffer;
int write = 0;
if (radeon_bo_is_referenced_by_cs(radeon_buffer->bo, priv->cs)) {
priv->cs->space_flush_fn(priv->cs->space_flush_data);
}
if (flags & PIPE_BUFFER_USAGE_DONTBLOCK) {
uint32_t domain;