* This requires custom-installing the V140 toolset which unfortunately takes a
long time on CI :(.
* We also drop the VS2019 target as it has little use.
* When patching shaders for separability we are limited in what we can safely
do. If we need to add a separable declaration but a shader uses legacy GLSL
and redeclares an individual global these can't co-exist, so we try to remove
the incompatible one. This may not be safe but is a best-effort.
On the active thread
* GSM reads come from the local GSM cache (not the global GSM data)
* GSM writes go to the local GSM cache and the global GSM data
* Workgroup Memory barrier populates the local GSM cache with the data from the global GSM data
On the non-active threads:
* GSM reads/write always operate on the global GSM data
* Workgroup Memory barrier is ignored
Similar to the validation that is performed in ShaderViewer UI
Disabled by default pass True to process_trace to enable the validation
Includes validate_shadervariable() and shadervariable_equal()
if members.size() == 0
rows * columns must be between 1 and 15
type must not be Struct
if members.size() > 0
type must be Struct or Unknown or ConstantBlock
rows must be 0
columns must be 0
then recurse and check construction of each element of members array
Update m_IndirectData.argsOffset inside the loop
Clear the m_IndirectData outside of the loop
Add not NULL assert for argsBuffer in ReplayDraw() helper
On the active thread
* GSM reads come from the local GSM cache (not the global GSM data)
* GSM writes go to the local GSM cache and the global GSM data
* Workgroup Memory barrier populates the local GSM cache with the data from the global GSM data
On the non-active threads:
* GSM reads/write always operate on the global GSM data
* Workgroup Memory barrier is ignored
* use a NULL before value when variables are recreated after going out of scope i.e. in a loop
* only add to the live list if m_State is not NULL (m_State can be NULL in EnterFunction() if HasDebugInfo() is false i.e. when called from EnterEntryPoint())
When generating variable changes from pointers:
* only include variables which are live
* do not include the base variable change in the list of extra changes
* The internal printf was already used for all numeric types but PIX of course
has special encoding for strings so this was manually handled. Instead use the
callback-based formatter and decode strings for there, so that varargs string
length and string padding formatters are supported.