Discrepancy between what my application shows, and what the trace plays back (OpenGL)

Babis Koniaris esrever2357 at gmail.com
Thu Aug 13 09:42:03 PDT 2015


Thanks for the info! I'll possibly file it. You mean provide the .trace 
file? Would be much easier than repro code.

Babis

On 12/08/2015 20:42, José Fonseca wrote:
> There are very few things done by glretrace when checking for errors 
> that have side effects. glValidateProgram is one of them (or perhaps 
> the only one): glValidateProgram forces the driver check all bound 
> state -- compile shader variants attending the current state, etc -- 
> pretty much as if doing a draw call, but without the drawing.
>
> It seems that PC1's OpenGL driver has some bug propagating/translating 
> internal state, and that when it's done inside glValidateProgram it is 
> avoided somehow.
>
> I recommend you to file a bug against the OpenGL driver regardless -- 
> even glValidateProgram worksaround the bug now there is no guarantee 
> it will workaround the bug in the future.  If you provide the trace 
> and the information that glValidateProgram avoids the bug then it 
> should be easy for the IHV to track down the bug.
>
> Jose
>
>
> On Wed, Aug 12, 2015 at 4:54 PM, Babis Koniaris <esrever2357 at gmail.com 
> <mailto:esrever2357 at gmail.com>> wrote:
>
>     Wow, that was quick and spot on :D
>     It was the state validation. I just added glValidateProgram() just
>     after glUseProgram() and the bug is magically gone in PC1, many
>     thanks for that!
>     I still don't understand why a validation *check *would prevent
>     the bug, since I see no errors with glCheckError anyway.
>
>     Babis
>
>
>     On 12/08/2015 16:35, José Fonseca wrote:
>>     I see two possibilities:
>>
>>     - one is that the bug in PC1 OpenGL driver is a race condition, 
>>     enabling debug checking changes the timing, hence makes things pass
>>
>>     - the other is that the bug is some sort of state validation
>>     issue, and the glValidateProgram done by glretrace when checking
>>     errors, avoids the bug.
>>
>>       I've seen this happening once.
>>
>>       If this is the case, then this apitrace patch might get PC1 to
>>     draw correctly even when not checking errors not selected:
>>
>>     diff --git a/retrace/glretrace.py b/retrace/glretrace.py
>>     index 1e19473..a863c3c 100644
>>     --- a/retrace/glretrace.py
>>     +++ b/retrace/glretrace.py
>>     @@ -280,7 +280,7 @@ class GlRetracer(Retracer):
>>                 is_draw_arrays or \
>>                 is_draw_elements or \
>>     function.name.startswith('glBeginTransformFeedback'):
>>     -            print r'    if (retrace::debug) {'
>>     +            print r'    if (1 || retrace::debug) {'
>>                  print r' _validateActiveProgram(call);'
>>                  print r'    }'
>>
>>     @@ -571,7 +571,7 @@ _getActiveProgram(void)
>>      static void
>>      _validateActiveProgram(trace::Call &call)
>>      {
>>     -    assert(retrace::debug);
>>     +    //assert(retrace::debug);
>>
>>          glretrace::Context *currentContext =
>>     glretrace::getCurrentContext();
>>          if (!currentContext ||
>>
>>
>>
>>     Jose
>>
>>     On Wed, Aug 12, 2015 at 2:38 PM, Babis Koniaris
>>     <esrever2357 at gmail.com <mailto:esrever2357 at gmail.com>> wrote:
>>
>>         Hi,
>>
>>         I was looking onto a problem where my application displays
>>         what I expect on one PC (PC0) and exhibits a bug on another
>>         (PC1). PC0 has a nice powerful Geforce TITAN, while PC1 is a
>>         laptop intel integrated card. I'm running an application on
>>         OpenGL 4.00 (GLSL 4.00) which is supported on both.
>>
>>         The problem lies with reading the contents of a particular
>>         texture (R16UI): on PC1 the shader always reads zeroes, while
>>         on PC0 it reads the values normally. There are no OpenGL
>>         errors. Here is when I decided to run apitrace to find out
>>         what's going on.
>>
>>         I run qapitrace (latest version) and exit the application
>>         after a while, all while seeing the problem. I hit replay,
>>         and *the trace plays correctly, as in PC0. *After a bit of
>>         fiddling, I realized that if, in the Replay menu, "Error
>>         Checking" is selected, then the trace plays correctly as in
>>         PC0. If it's not selected, then it shows the bug as usual.
>>
>>         What could be going on?
>>
>>         Thanks,
>>         Babis
>>
>>         _______________________________________________
>>         apitrace mailing list
>>         apitrace at lists.freedesktop.org
>>         <mailto:apitrace at lists.freedesktop.org>
>>         http://lists.freedesktop.org/mailman/listinfo/apitrace
>>
>>
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/apitrace/attachments/20150813/bc60e9ef/attachment-0001.html>


More information about the apitrace mailing list