Workaround ANGLE hang with a glFlush().
Change-Id: Idce1b71bdb132a1b96836d270eb2ab53fd0086f8 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/36700 Commit-Queue: Stephen White <senorblanco@chromium.org> Reviewed-by: Austin Eng <enga@chromium.org>
This commit is contained in:
parent
5a6fda1a6f
commit
54449966dd
|
@ -152,6 +152,10 @@ namespace dawn_native {
|
||||||
{Toggle::UseTintInspector,
|
{Toggle::UseTintInspector,
|
||||||
{"use_tint_inspector", "Use Tint instead of SPRIV-cross for shader reflection.",
|
{"use_tint_inspector", "Use Tint instead of SPRIV-cross for shader reflection.",
|
||||||
"https://crbug.com/dawn/578"}},
|
"https://crbug.com/dawn/578"}},
|
||||||
|
{Toggle::FlushBeforeClientWaitSync,
|
||||||
|
{"flush_before_client_wait_sync",
|
||||||
|
"Call glFlush before glClientWaitSync to work around bugs in the latter",
|
||||||
|
"https://crbug.com/dawn/633"}},
|
||||||
// Dummy comment to separate the }} so it is clearer what to copy-paste to add a toggle.
|
// Dummy comment to separate the }} so it is clearer what to copy-paste to add a toggle.
|
||||||
}};
|
}};
|
||||||
|
|
||||||
|
|
|
@ -47,6 +47,7 @@ namespace dawn_native {
|
||||||
DisallowUnsafeAPIs,
|
DisallowUnsafeAPIs,
|
||||||
UseTintGenerator,
|
UseTintGenerator,
|
||||||
UseTintInspector,
|
UseTintInspector,
|
||||||
|
FlushBeforeClientWaitSync,
|
||||||
|
|
||||||
EnumCount,
|
EnumCount,
|
||||||
InvalidEnum = EnumCount,
|
InvalidEnum = EnumCount,
|
||||||
|
|
|
@ -86,6 +86,7 @@ namespace dawn_native { namespace opengl {
|
||||||
SetToggle(Toggle::DisableBaseVertex, !supportsBaseVertex);
|
SetToggle(Toggle::DisableBaseVertex, !supportsBaseVertex);
|
||||||
SetToggle(Toggle::DisableBaseInstance, !supportsBaseInstance);
|
SetToggle(Toggle::DisableBaseInstance, !supportsBaseInstance);
|
||||||
SetToggle(Toggle::DisableIndexedDrawBuffers, !supportsIndexedDrawBuffers);
|
SetToggle(Toggle::DisableIndexedDrawBuffers, !supportsIndexedDrawBuffers);
|
||||||
|
SetToggle(Toggle::FlushBeforeClientWaitSync, gl.GetVersion().IsES());
|
||||||
}
|
}
|
||||||
|
|
||||||
const GLFormat& Device::GetGLFormat(const Format& format) {
|
const GLFormat& Device::GetGLFormat(const Format& format) {
|
||||||
|
@ -173,6 +174,11 @@ namespace dawn_native { namespace opengl {
|
||||||
|
|
||||||
// Fence are added in order, so we can stop searching as soon
|
// Fence are added in order, so we can stop searching as soon
|
||||||
// as we see one that's not ready.
|
// as we see one that's not ready.
|
||||||
|
|
||||||
|
// TODO(crbug.com/dawn/633): Remove this workaround after the deadlock issue is fixed.
|
||||||
|
if (IsToggleEnabled(Toggle::FlushBeforeClientWaitSync)) {
|
||||||
|
gl.Flush();
|
||||||
|
}
|
||||||
GLenum result = gl.ClientWaitSync(sync, GL_SYNC_FLUSH_COMMANDS_BIT, 0);
|
GLenum result = gl.ClientWaitSync(sync, GL_SYNC_FLUSH_COMMANDS_BIT, 0);
|
||||||
if (result == GL_TIMEOUT_EXPIRED) {
|
if (result == GL_TIMEOUT_EXPIRED) {
|
||||||
return fenceSerial;
|
return fenceSerial;
|
||||||
|
|
Loading…
Reference in New Issue