summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mesa/drivers/dri/radeon/radeon_dma.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/mesa/drivers/dri/radeon/radeon_dma.c b/src/mesa/drivers/dri/radeon/radeon_dma.c
index 393b12182d..92878a5c2e 100644
--- a/src/mesa/drivers/dri/radeon/radeon_dma.c
+++ b/src/mesa/drivers/dri/radeon/radeon_dma.c
@@ -275,7 +275,7 @@ void rcommon_flush_last_swtcl_prim( GLcontext *ctx )
if (RADEON_DEBUG & DEBUG_IOCTL)
- fprintf(stderr, "%s\n", __FUNCTION__);
+ fprintf(stderr, "%s %p\n", __FUNCTION__, dma->current);
dma->flush = NULL;
if (dma->current) {
@@ -300,12 +300,19 @@ rcommonAllocDmaLowVerts( radeonContextPtr rmesa, int nverts, int vsize )
{
GLuint bytes = vsize * nverts;
void *head;
-
+restart:
if (!rmesa->dma.current || rmesa->dma.current_vertexptr + bytes > rmesa->dma.current->size) {
radeonRefillCurrentDmaRegion(rmesa, bytes);
}
if (!rmesa->dma.flush) {
+ /* make sure we have enough space to use this in cmdbuf */
+ rcommonEnsureCmdBufSpace(&rmesa->radeon,
+ rmesa->hw.max_state_size + (12*sizeof(int)),
+ __FUNCTION__);
+ /* if cmdbuf flushed DMA restart */
+ if (!rmesa->dma.current)
+ goto restart;
rmesa->glCtx->Driver.NeedFlush |= FLUSH_STORED_VERTICES;
rmesa->dma.flush = rcommon_flush_last_swtcl_prim;
}