projects
/
mesa.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
8a2b0f6
)
r600: fix r700PredictRenderSize for draw prims path
author
Alex Deucher
<alexdeucher@gmail.com>
Wed, 23 Sep 2009 20:54:12 +0000
(16:54 -0400)
committer
Alex Deucher
<alexdeucher@gmail.com>
Wed, 23 Sep 2009 20:54:12 +0000
(16:54 -0400)
src/mesa/drivers/dri/r600/r700_render.c
patch
|
blob
|
history
diff --git
a/src/mesa/drivers/dri/r600/r700_render.c
b/src/mesa/drivers/dri/r600/r700_render.c
index 1f7a76e538c6213ab7e07c94bd3c612b5bcfce81..bdf0bfc0e43ebaedbb95b88a6d71ac54af359e76 100644
(file)
--- a/
src/mesa/drivers/dri/r600/r700_render.c
+++ b/
src/mesa/drivers/dri/r600/r700_render.c
@@
-402,12
+402,10
@@
static void r700RunRenderPrimitive(GLcontext * ctx, int start, int end, int prim
/* start 3d, idle, cb/db flush */
#define PRE_EMIT_STATE_BUFSZ 10 + 5 + 14
/* start 3d, idle, cb/db flush */
#define PRE_EMIT_STATE_BUFSZ 10 + 5 + 14
-static GLuint r700PredictRenderSize(GLcontext* ctx)
+static GLuint r700PredictRenderSize(GLcontext* ctx
, GLuint nr_prims
)
{
context_t *context = R700_CONTEXT(ctx);
{
context_t *context = R700_CONTEXT(ctx);
- TNLcontext *tnl = TNL_CONTEXT(ctx);
struct r700_vertex_program *vp = context->selected_vp;
struct r700_vertex_program *vp = context->selected_vp;
- struct vertex_buffer *vb = &tnl->vb;
GLboolean flushed;
GLuint dwords, i;
GLuint state_size;
GLboolean flushed;
GLuint dwords, i;
GLuint state_size;
@@
-415,8
+413,15
@@
static GLuint r700PredictRenderSize(GLcontext* ctx)
context->radeon.tcl.aos_count = _mesa_bitcount(vp->mesa_program->Base.InputsRead);
dwords = PRE_EMIT_STATE_BUFSZ;
context->radeon.tcl.aos_count = _mesa_bitcount(vp->mesa_program->Base.InputsRead);
dwords = PRE_EMIT_STATE_BUFSZ;
- for (i = 0; i < vb->PrimitiveCount; i++)
- dwords += vb->Primitive[i].count + 10;
+ if (nr_prims)
+ dwords += nr_prims * 14;
+ else {
+ TNLcontext *tnl = TNL_CONTEXT(ctx);
+ struct vertex_buffer *vb = &tnl->vb;
+
+ for (i = 0; i < vb->PrimitiveCount; i++)
+ dwords += vb->Primitive[i].count + 10;
+ }
state_size = radeonCountStateEmitSize(&context->radeon);
flushed = rcommonEnsureCmdBufSpace(&context->radeon,
dwords + state_size, __FUNCTION__);
state_size = radeonCountStateEmitSize(&context->radeon);
flushed = rcommonEnsureCmdBufSpace(&context->radeon,
dwords + state_size, __FUNCTION__);
@@
-456,7
+461,7
@@
static GLboolean r700RunRender(GLcontext * ctx,
r700SetupFragmentProgram(ctx);
r600UpdateTextureState(ctx);
r700SetupFragmentProgram(ctx);
r600UpdateTextureState(ctx);
- GLuint emit_end = r700PredictRenderSize(ctx
)
+ GLuint emit_end = r700PredictRenderSize(ctx
, 0)
+ context->radeon.cmdbuf.cs->cdw;
r700SetupStreams(ctx);
+ context->radeon.cmdbuf.cs->cdw;
r700SetupStreams(ctx);
@@
-1044,7
+1049,7
@@
static GLboolean r700TryDrawPrims(GLcontext *ctx,
r600UpdateTextureState(ctx);
r600UpdateTextureState(ctx);
- GLuint emit_end = r700PredictRenderSize(ctx
)
+ GLuint emit_end = r700PredictRenderSize(ctx
, nr_prims)
+ context->radeon.cmdbuf.cs->cdw;
r700SetupIndexBuffer(ctx, ib);
+ context->radeon.cmdbuf.cs->cdw;
r700SetupIndexBuffer(ctx, ib);