On Tue, Dec 8, 2009 at 7:21 PM, Maarten Maathuis <[email protected]> wrote:
> It was TexSubImage, and i added FLUSH_CURRENT after
> ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH and it seems to fix the issue. The
> difference between the two is that one triggers on NeedFlush &
> FLUSH_UPDATE_CURRENT and the other on NeedFlush &
> FLUSH_STORED_VERTICES. Any idea what the problem is?
>
> Maarten.
>
> On Tue, Dec 8, 2009 at 3:36 PM, Keith Whitwell <[email protected]> wrote:
>> On Fri, 2009-12-04 at 13:51 -0800, Maarten Maathuis wrote:
>>> I recently noticed a regression in the nv50 gallium driver, with a few
>>> hours of bisecting i figured out i need FLUSH_CURRENT called
>>> unconditionally in st_teximage_flush_before_map(). Otherwise in
>>> warzone2100 several small textures (glyphs) go missing. Does this make
>>> any sense or perhaps provide a hint as to the real problem. One other
>>> person has tried and could not reproduce this issue. I've tried doing
>>> a 100 msec wait instead and gpu flush (FLUSH_FRAME to be precise) +
>>> 100 msec wait. Neither work, which leads me to believe something is
>>> still stuck in the state tracker.
>>
>> Maarten,
>>
>> FLUSH_CURRENT really just flushes internal Mesa state, rather than doing
>> anything to the GPU or driver. In particular it will:
>>
>> - Make sure the VBO module issues any pending draw commands
>> - Asks the VBO module to update ctx->Current.Attrib[]
>> - Similarly for ctx->Light.MatAttrib[]
>> - And provokes the unmapping of the in-progress immediate VBO.
>>
>> Most of this is also done by ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(), which
>> is being called at the top of _mesa_TexImage2D().
>>
>> So it's a surprise that calling FLUSH_CURRENT has any effect, as it
>> really just updates a few mesa internal values once ASSERT_OUTSIDE...()
>> has been called.
>>
>> What would happen if you lifted your FLUSH_CURRENT up into the highest
>> mesa function on the callstack?
>>
>> Keith
>>
>>
>
This is the smallest change i could find that would work.
diff --git a/src/mesa/vbo/vbo_exec_api.c b/src/mesa/vbo/vbo_exec_api.c
index f0a7eea..f45761e 100644
--- a/src/mesa/vbo/vbo_exec_api.c
+++ b/src/mesa/vbo/vbo_exec_api.c
@@ -370,6 +370,8 @@ do {
\
if (N>3) dest[3] = V3; \
} \
\
+ exec->ctx->Driver.NeedFlush |= FLUSH_STORED_VERTICES; \
+ \
if ((A) == 0) { \
GLuint i; \
\
@@ -377,7 +379,6 @@ do {
\
exec->vtx.buffer_ptr[i] = exec->vtx.vertex[i]; \
\
exec->vtx.buffer_ptr += exec->vtx.vertex_size; \
- exec->ctx->Driver.NeedFlush |= FLUSH_STORED_VERTICES; \
\
if (++exec->vtx.vert_count >= exec->vtx.max_vert) \
vbo_exec_vtx_wrap( exec ); \
------------------------------------------------------------------------------
Return on Information:
Google Enterprise Search pays you back
Get the facts.
http://p.sf.net/sfu/google-dev2dev
_______________________________________________
Mesa3d-dev mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mesa3d-dev