Dnia poniedziałek, 29 czerwca 2009 o 19:33:38 Roland Scheidegger napisał(a): > On 29.06.2009 19:09, Maciej Cencora wrote: > > Dnia poniedziałek, 29 czerwca 2009 o 17:52:30 Roland Scheidegger napisał(a): > >> On 27.06.2009 23:57, Maciej Cencora wrote: > >>> Hi, > >>> > >>> while playing with r300 driver I've stumbled upon a problem with > >>> splitting vertexes. > >>> > >>> Let's say we get rendering operation where number of indexes in index > >>> buffer is 80000 and max_index is 20000. We are calling vbo_split_prims > >>> because number of indexes exceeds hw limit. > >>> In flush_vertex (vbo_split_inplace.c) function the split->ib is not > >>> null, so the max_index (20000) won't be changed. In the end the > >>> draw_prims functions will be called with inappropriate max_index > >>> number. > >>> > >>> I'm seeing this behaviour with UT2004 demo on current r300 driver. > >>> > >>> I think the solution would be to always calculate min/max_index numbers > >>> just like in the !split->ib path but I want to be sure before I commit > >>> the patch. > >>> > >>> Any comments? > >> > >> Apart from this problem, I think the limits in the r300 driver set are > >> maybe not really hw limits. I'm not sure why max_verts is limited at all > >> (though maybe limited by buffer size?), and max_indices could be bumped > >> at least for r500. (I always considered it odd that even r200 could > >> accept 23 bits worth of indices for the INDX_BUFFER command but only 16 > >> bit number of amount of vertices in vertex fetch control, and this > >> finally seems fixed in r500 - 24 bits possible with > >> VAP_ALT_NUM_VERTICES.) > > > > On <= r300 we are limited by VAP_VF_CNLT_.NUM_VERTICES field size (16 > > bit) for both indices and vertices list. I tried using > > VAP_ALT_NUM_VERTICES reg on r500 by programming it right before > > 3D_DRAW_VBUF2 packet, but it always ended in GPU hang. John Bridgman was > > going to try to dig out some info about it, but no luck so far. > > I don't see why that NUM_VERTICES field limits max_verts. This is only > the number of vertices the chip fetches after all, and it shouldn't > matter how many vertices are in the buffer.
It limits max_verts when we are walking vertex list, so we probably should set max_verts limit only when there's no index buffer. > BTW there's also a comment in the code that rebase should be done if > there's more than 8192 / 16384 indices per primitive. I believe though > the docs are wrong wrt this as it doesn't really make sense as far as I > can see (says 8192 / 16384 max as per max buffer size, but max buffer > size is 23bit number of dwords). This comment is wrong and should be removed. I can't remember where did I get these numbers from, and we certainly shouldn't rebase but split. I'll prepare a patch soon. Maciej Cencora ------------------------------------------------------------------------------ _______________________________________________ Mesa3d-dev mailing list Mesa3d-dev@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mesa3d-dev