[client] network: fix ANGLE decoder synchronization

The dequant shader returned before workgroup barriers for missing
blocks. Mask those blocks to zero so ANGLE's D3D compiler accepts the
shader while every invocation reaches each barrier.

The vcpkg ANGLE build also omitted upstream shared-context locking.
Enable both locking definitions so decode dispatches cannot race the
render thread through ANGLE's shared D3D11 state manager.
This commit is contained in:
Geoffrey McRae
2026-10-03 10:41:57 +10:00
parent f6c32c2c1e
commit 7f63dc986e
3 changed files with 28 additions and 14 deletions

View File

@@ -7,3 +7,13 @@ if(PORT STREQUAL "openssl")
else()
set(VCPKG_LIBRARY_LINKAGE dynamic)
endif()
if(PORT STREQUAL "angle")
# ANGLE's D3D state cache is shared across contexts. Serialize access and
# dirty cached state whenever calls switch between shared contexts.
string(CONCAT ANGLE_CONTEXT_FLAGS
" /DANGLE_ENABLE_SHARE_CONTEXT_LOCK=1"
" /DANGLE_FORCE_CONTEXT_CHECK_EVERY_CALL=1")
string(APPEND VCPKG_C_FLAGS "${ANGLE_CONTEXT_FLAGS}")
string(APPEND VCPKG_CXX_FLAGS "${ANGLE_CONTEXT_FLAGS}")
endif()