[PATCH vkd3d 00/11] vkd3d-shader: Fix patch constant handling in hull shaders.

Philip Rebohle philip.rebohle at tu-dortmund.de
Wed Oct 16 14:55:34 CDT 2019


This series mainly changes the way patch constant outputs are generated
in hull shaders to always use a private array variable. This is done to
fix several issues in the current imlementation, and to avoid excessive
complexity in dealing with patch constants which stem from DXBC's design:

1) Tessellation factors and regular patch constants share the same
   register space in DXBC and can both be dynamically or statically
   indexed. The current implementation only works correctly in case
   tessellation factors do not share registers with regular outputs,
   and does not support all indexing patterns, leading to invalid
   code being generated in some cases.

2) Join phases can read patch constants written by a fork phase,
   also with dynamic indexing. However, the index ranges used by
   the join phase are not known at the time the fork phase is
   compiled.

With these changes, tessellation shaders work correctly in Shadow of
the Tomb Raider, which previously contained invalid SPIR-V and would
crash the game if enabled.

Note that enabling the tessellation option in the game triggers a
separate issue related to descriptor updates, which will have to
be addressed separately.




More information about the wine-devel mailing list