* 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.
* On the active thread GSM reads come from the local GSM cache (not the global GSM data)
* This brings consistency in debugger UI when seeing the GSM data as variables (which is populated from the local GSM cache) and seeing the results of reading from the GSM data
GSM writes already populated the local GSM cache and the global GSM data
GSM Sync populates the local GSM cache with the data from the global GSM data
More checking of GSM local/global cache behaviour when debugging
One test is not GPU stable and its results are verified against hard coded expectation (this is to test the expected behaviour of the local GSM cache on the active thread)