r600: better default state size.
authorAlex Deucher <alexdeucher@gmail.com>
Fri, 21 Aug 2009 21:41:43 +0000 (17:41 -0400)
committerAlex Deucher <alexdeucher@gmail.com>
Fri, 21 Aug 2009 21:46:32 +0000 (17:46 -0400)
Hopefully suokko's emit size impovements will
land soon.

src/mesa/drivers/dri/r600/r700_chip.c
src/mesa/drivers/dri/r600/r700_fragprog.c
src/mesa/drivers/dri/r600/r700_vertprog.c

index 2d68f021dfc2b7d82c4081a47338002555dd6475..e1c0c34670de244c54f56b2900846d35266867c2 100644 (file)
@@ -837,19 +837,21 @@ static int check_always(GLcontext *ctx, struct radeon_state_atom *atom)
 
 #define ALLOC_STATE( ATOM, SZ, EMIT )                                  \
 do {                                                                   \
-      context->atoms.ATOM.cmd_size = (SZ);                                     \
-      context->atoms.ATOM.cmd = NULL;                                  \
-      context->atoms.ATOM.name = #ATOM;                                        \
-      context->atoms.ATOM.idx = 0;                                             \
-      context->atoms.ATOM.check = check_always;                                \
-      context->atoms.ATOM.dirty = GL_FALSE;                            \
-      context->atoms.ATOM.emit = (EMIT);                                       \
-      context->radeon.hw.max_state_size += (SZ);                       \
-      insert_at_tail(&context->radeon.hw.atomlist, &context->atoms.ATOM); \
+       context->atoms.ATOM.cmd_size = (SZ);                            \
+       context->atoms.ATOM.cmd = NULL;                                 \
+       context->atoms.ATOM.name = #ATOM;                               \
+       context->atoms.ATOM.idx = 0;                                    \
+       context->atoms.ATOM.check = check_always;                       \
+       context->atoms.ATOM.dirty = GL_FALSE;                           \
+       context->atoms.ATOM.emit = (EMIT);                              \
+       context->radeon.hw.max_state_size += (SZ);                      \
+       insert_at_tail(&context->radeon.hw.atomlist, &context->atoms.ATOM); \
 } while (0)
 
 void r600InitAtoms(context_t *context)
 {
+       /* FIXME: rough estimate for "large" const and shader state */
+       context->radeon.hw.max_state_size = 7500;
 
        /* Setup the atom linked list */
        make_empty_list(&context->radeon.hw.atomlist);
index 6249bde6f18e63f4b90574680b7df8ea3456fd11..394482594e8b84a3a9b777a100b64600639b71c1 100644 (file)
@@ -305,6 +305,8 @@ GLboolean r700SetupFragmentProgram(GLcontext * ctx)
     (context->chipobj.MemUse)(context, fp->shadercode.buf->id);
     */
 
+    R600_STATECHANGE(context, spi);
+
     r700->ps.SQ_PGM_START_PS.u32All = 0; /* set from buffer obj */
 
     unNumOfReg = fp->r700Shader.nRegs + 1;
index 31e71cdfa30edec470fe1ad496a35fbb7cce7c86..14da4ed1d30f35d74d5437aa6772f581df98273e 100644 (file)
@@ -368,6 +368,8 @@ GLboolean r700SetupVertexProgram(GLcontext * ctx)
     (context->chipobj.MemUse)(context, vp->shadercode.buf->id);
     */
 
+    R600_STATECHANGE(context, spi);
+
     r700->vs.SQ_PGM_START_VS.u32All = 0; /* set from buffer object. */ 
     
     SETfield(r700->vs.SQ_PGM_RESOURCES_VS.u32All, vp->r700Shader.nRegs + 1,