diff options
Diffstat (limited to 'indra/llrender')
| -rw-r--r-- | indra/llrender/llimagegl.cpp | 50 | 
1 files changed, 31 insertions, 19 deletions
diff --git a/indra/llrender/llimagegl.cpp b/indra/llrender/llimagegl.cpp index 0a5d258b3a..04974d9122 100644 --- a/indra/llrender/llimagegl.cpp +++ b/indra/llrender/llimagegl.cpp @@ -1624,26 +1624,38 @@ void LLImageGL::syncToMainThread(LLGLuint new_tex_name)          LL_PROFILE_ZONE_NAMED("cglt - sync");          if (gGLManager.mHasSync)          { -            // post a sync to the main thread (will execute before tex name swap lambda below) -            // glFlush calls here are partly superstitious and partly backed by observation -            // on AMD hardware -            glFlush(); -            auto sync = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0); -            glFlush(); -            LL::WorkQueue::postMaybe( -                mMainQueue, -                [=]() -                { -                    LL_PROFILE_ZONE_NAMED("cglt - wait sync"); -                    { -                        LL_PROFILE_ZONE_NAMED("glWaitSync"); -                        glWaitSync(sync, 0, GL_TIMEOUT_IGNORED); -                    } +            if (gGLManager.mIsNVIDIA) +            { +                // wait for texture upload to finish before notifying main thread +                // upload is complete +                auto sync = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0); +                glFlush(); +                glClientWaitSync(sync, 0, GL_TIMEOUT_IGNORED); +                glDeleteSync(sync); +            } +            else +            { +                // post a sync to the main thread (will execute before tex name swap lambda below) +                // glFlush calls here are partly superstitious and partly backed by observation +                // on AMD hardware +                glFlush(); +                auto sync = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0); +                glFlush(); +                LL::WorkQueue::postMaybe( +                    mMainQueue, +                    [=]()                      { -                        LL_PROFILE_ZONE_NAMED("glDeleteSync"); -                        glDeleteSync(sync); -                    } -                }); +                        LL_PROFILE_ZONE_NAMED("cglt - wait sync"); +                        { +                            LL_PROFILE_ZONE_NAMED("glWaitSync"); +                            glWaitSync(sync, 0, GL_TIMEOUT_IGNORED); +                        } +                        { +                            LL_PROFILE_ZONE_NAMED("glDeleteSync"); +                            glDeleteSync(sync); +                        } +                    }); +            }          }          else          {  | 
