You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Note that logic operations are disallowed for vectors as of HLSL2021 in favor of and, or, and select
This will largely be accomplished by disabling the scalarization passes that previously converted vectors to scalar variants. Testing should verify that the DXIL output preserves the vectors as arguments for all of these operators.
The text was updated successfully, but these errors were encountered:
pow2clk
changed the title
Generate native vector variants of elementwise operators
[SM6.9] Generate native vector variants of elementwise operators
Feb 4, 2025
Disables various forms of scalarization and vector elimination to permit
vectors to pass through to final DXIL when used in native LLVM
operations and loading/storing.
Introduces a few vector manipulation llvm instructions to DXIL allowing
for them to appear in output DXIL.
Skips passes for 6.9 that scalarize, convert to arrays, or otherwise eliminate vectors.
This eliminates the element-by-element loading of the vectors
In many cases, this required plumbing the shader model information to
passes that didn't have it before.
Many changes were needed for the MatrixBitcastLower pass related to
linking to avoid converting matrix vectors, but also to perform the
conversion if a shader was compiled for 6.9+, but then linked to a
earlier target.
This now adapts to the linker target to either preserve vectors for 6.9 or arrays for previous versions.
This requires running the DynamicIndexing VectorToArray pass during linking since 6_x and 6_9+ will fail to run this in the initial compile, but will still need to lower vectors to arrays.
Ternary conditional/select operators were element extracted in codegen.
Removing this allows 6.9 to preserve the vectors, but also maintains
behavior for previous shader models because the operations get
scalarized later anyway.
Keep groupshared variables as vectors for 6.9. They are no longer represented as indivual groupshared scalars.
Adds extensive tests for these operations using different types and
sizes and testing them appropriately. Booleans produce significantly
different code, so they get their own test.
Fixesmicrosoft#7123
In 6.9, elementwise vector operators should produce operators that work on the native vectors instead of scalarizing them. These operations include:
+
,-
(unary and binary),*
,/
,%
,+=
,-=
,*=
,/=
|
,&
,^
,~
,|=
,&=
,^=
==
,!=
,<
,>
,<=
,>=
||
,&&
,?:
Note that logic operations are disallowed for vectors as of HLSL2021 in favor of
and
,or
, andselect
This will largely be accomplished by disabling the scalarization passes that previously converted vectors to scalar variants. Testing should verify that the DXIL output preserves the vectors as arguments for all of these operators.
The text was updated successfully, but these errors were encountered: