Merge pull request #339 from steve-lunarg/intrinsics

HLSL: Implement atomic ops, bit conversions, fix minor intrinsics bugs
This commit is contained in:
John Kessenich 2016-06-14 10:56:50 -06:00 committed by GitHub
commit 01de90bb1c
16 changed files with 8844 additions and 6104 deletions

View File

@ -0,0 +1,768 @@
hlsl.intrinsics.comp
Shader version: 450
local_size = (1, 1, 1)
0:? Sequence
0:44 Function Definition: ComputeShaderFunction(f1;f1;f1;u1;u1; (temp float)
0:17 Function Parameters:
0:17 'inF0' (temp float)
0:17 'inF1' (temp float)
0:17 'inF2' (temp float)
0:17 'inU0' (temp uint)
0:17 'inU1' (temp uint)
0:? Sequence
0:21 all (global bool)
0:21 'inF0' (temp float)
0:24 AtomicAdd (global void)
0:24 'gs_ua' (temp uint)
0:24 'gs_ub' (temp uint)
0:25 move second child to first child (temp uint)
0:25 'out_u1' (temp uint)
0:25 AtomicAdd (temp uint)
0:25 'gs_ua' (temp uint)
0:25 'gs_ub' (temp uint)
0:26 AtomicAnd (global void)
0:26 'gs_ua' (temp uint)
0:26 'gs_ub' (temp uint)
0:27 move second child to first child (temp uint)
0:27 'out_u1' (temp uint)
0:27 AtomicAnd (temp uint)
0:27 'gs_ua' (temp uint)
0:27 'gs_ub' (temp uint)
0:28 move second child to first child (temp uint)
0:28 'out_u1' (temp uint)
0:28 AtomicCompSwap (temp uint)
0:28 'gs_ua' (temp uint)
0:28 'gs_ub' (temp uint)
0:28 'gs_uc' (temp uint)
0:29 move second child to first child (temp uint)
0:29 'out_u1' (temp uint)
0:29 AtomicExchange (temp uint)
0:29 'gs_ua' (temp uint)
0:29 'gs_ub' (temp uint)
0:30 AtomicMax (global void)
0:30 'gs_ua' (temp uint)
0:30 'gs_ub' (temp uint)
0:31 move second child to first child (temp uint)
0:31 'out_u1' (temp uint)
0:31 AtomicMax (temp uint)
0:31 'gs_ua' (temp uint)
0:31 'gs_ub' (temp uint)
0:32 AtomicMin (global void)
0:32 'gs_ua' (temp uint)
0:32 'gs_ub' (temp uint)
0:33 move second child to first child (temp uint)
0:33 'out_u1' (temp uint)
0:33 AtomicMin (temp uint)
0:33 'gs_ua' (temp uint)
0:33 'gs_ub' (temp uint)
0:34 AtomicOr (global void)
0:34 'gs_ua' (temp uint)
0:34 'gs_ub' (temp uint)
0:35 move second child to first child (temp uint)
0:35 'out_u1' (temp uint)
0:35 AtomicOr (temp uint)
0:35 'gs_ua' (temp uint)
0:35 'gs_ub' (temp uint)
0:36 AtomicXor (global void)
0:36 'gs_ua' (temp uint)
0:36 'gs_ub' (temp uint)
0:37 move second child to first child (temp uint)
0:37 'out_u1' (temp uint)
0:37 AtomicXor (temp uint)
0:37 'gs_ua' (temp uint)
0:37 'gs_ub' (temp uint)
0:41 Branch: Return with expression
0:41 Constant:
0:41 0.000000
0:50 Function Definition: ComputeShaderFunction(vf1;vf1;vf1; (temp 1-component vector of float)
0:45 Function Parameters:
0:45 'inF0' (temp 1-component vector of float)
0:45 'inF1' (temp 1-component vector of float)
0:45 'inF2' (temp 1-component vector of float)
0:? Sequence
0:47 Branch: Return with expression
0:47 Constant:
0:47 0.000000
0:77 Function Definition: ComputeShaderFunction(vf2;vf2;vf2;vu2;vu2; (temp 2-component vector of float)
0:51 Function Parameters:
0:51 'inF0' (temp 2-component vector of float)
0:51 'inF1' (temp 2-component vector of float)
0:51 'inF2' (temp 2-component vector of float)
0:51 'inU0' (temp 2-component vector of uint)
0:51 'inU1' (temp 2-component vector of uint)
0:? Sequence
0:55 all (global bool)
0:55 'inF0' (temp 2-component vector of float)
0:58 AtomicAdd (global void)
0:58 'gs_ua2' (temp 2-component vector of uint)
0:58 'gs_ub2' (temp 2-component vector of uint)
0:59 move second child to first child (temp 2-component vector of uint)
0:59 'out_u2' (temp 2-component vector of uint)
0:59 AtomicAdd (temp 2-component vector of uint)
0:59 'gs_ua2' (temp 2-component vector of uint)
0:59 'gs_ub2' (temp 2-component vector of uint)
0:60 AtomicAnd (global void)
0:60 'gs_ua2' (temp 2-component vector of uint)
0:60 'gs_ub2' (temp 2-component vector of uint)
0:61 move second child to first child (temp 2-component vector of uint)
0:61 'out_u2' (temp 2-component vector of uint)
0:61 AtomicAnd (temp 2-component vector of uint)
0:61 'gs_ua2' (temp 2-component vector of uint)
0:61 'gs_ub2' (temp 2-component vector of uint)
0:62 move second child to first child (temp 2-component vector of uint)
0:62 'out_u2' (temp 2-component vector of uint)
0:62 AtomicCompSwap (temp 2-component vector of uint)
0:62 'gs_ua2' (temp 2-component vector of uint)
0:62 'gs_ub2' (temp 2-component vector of uint)
0:62 'gs_uc2' (temp 2-component vector of uint)
0:63 move second child to first child (temp 2-component vector of uint)
0:63 'out_u2' (temp 2-component vector of uint)
0:63 AtomicExchange (temp 2-component vector of uint)
0:63 'gs_ua2' (temp 2-component vector of uint)
0:63 'gs_ub2' (temp 2-component vector of uint)
0:64 AtomicMax (global void)
0:64 'gs_ua2' (temp 2-component vector of uint)
0:64 'gs_ub2' (temp 2-component vector of uint)
0:65 move second child to first child (temp 2-component vector of uint)
0:65 'out_u2' (temp 2-component vector of uint)
0:65 AtomicMax (temp 2-component vector of uint)
0:65 'gs_ua2' (temp 2-component vector of uint)
0:65 'gs_ub2' (temp 2-component vector of uint)
0:66 AtomicMin (global void)
0:66 'gs_ua2' (temp 2-component vector of uint)
0:66 'gs_ub2' (temp 2-component vector of uint)
0:67 move second child to first child (temp 2-component vector of uint)
0:67 'out_u2' (temp 2-component vector of uint)
0:67 AtomicMin (temp 2-component vector of uint)
0:67 'gs_ua2' (temp 2-component vector of uint)
0:67 'gs_ub2' (temp 2-component vector of uint)
0:68 AtomicOr (global void)
0:68 'gs_ua2' (temp 2-component vector of uint)
0:68 'gs_ub2' (temp 2-component vector of uint)
0:69 move second child to first child (temp 2-component vector of uint)
0:69 'out_u2' (temp 2-component vector of uint)
0:69 AtomicOr (temp 2-component vector of uint)
0:69 'gs_ua2' (temp 2-component vector of uint)
0:69 'gs_ub2' (temp 2-component vector of uint)
0:70 AtomicXor (global void)
0:70 'gs_ua2' (temp 2-component vector of uint)
0:70 'gs_ub2' (temp 2-component vector of uint)
0:71 move second child to first child (temp 2-component vector of uint)
0:71 'out_u2' (temp 2-component vector of uint)
0:71 AtomicXor (temp 2-component vector of uint)
0:71 'gs_ua2' (temp 2-component vector of uint)
0:71 'gs_ub2' (temp 2-component vector of uint)
0:74 Branch: Return with expression
0:? Constant:
0:? 1.000000
0:? 2.000000
0:104 Function Definition: ComputeShaderFunction(vf3;vf3;vf3;vu3;vu3; (temp 3-component vector of float)
0:78 Function Parameters:
0:78 'inF0' (temp 3-component vector of float)
0:78 'inF1' (temp 3-component vector of float)
0:78 'inF2' (temp 3-component vector of float)
0:78 'inU0' (temp 3-component vector of uint)
0:78 'inU1' (temp 3-component vector of uint)
0:? Sequence
0:82 all (global bool)
0:82 'inF0' (temp 3-component vector of float)
0:85 AtomicAdd (global void)
0:85 'gs_ua3' (temp 3-component vector of uint)
0:85 'gs_ub3' (temp 3-component vector of uint)
0:86 move second child to first child (temp 3-component vector of uint)
0:86 'out_u3' (temp 3-component vector of uint)
0:86 AtomicAdd (temp 3-component vector of uint)
0:86 'gs_ua3' (temp 3-component vector of uint)
0:86 'gs_ub3' (temp 3-component vector of uint)
0:87 AtomicAnd (global void)
0:87 'gs_ua3' (temp 3-component vector of uint)
0:87 'gs_ub3' (temp 3-component vector of uint)
0:88 move second child to first child (temp 3-component vector of uint)
0:88 'out_u3' (temp 3-component vector of uint)
0:88 AtomicAnd (temp 3-component vector of uint)
0:88 'gs_ua3' (temp 3-component vector of uint)
0:88 'gs_ub3' (temp 3-component vector of uint)
0:89 move second child to first child (temp 3-component vector of uint)
0:89 'out_u3' (temp 3-component vector of uint)
0:89 AtomicCompSwap (temp 3-component vector of uint)
0:89 'gs_ua3' (temp 3-component vector of uint)
0:89 'gs_ub3' (temp 3-component vector of uint)
0:89 'gs_uc3' (temp 3-component vector of uint)
0:90 move second child to first child (temp 3-component vector of uint)
0:90 'out_u3' (temp 3-component vector of uint)
0:90 AtomicExchange (temp 3-component vector of uint)
0:90 'gs_ua3' (temp 3-component vector of uint)
0:90 'gs_ub3' (temp 3-component vector of uint)
0:91 AtomicMax (global void)
0:91 'gs_ua3' (temp 3-component vector of uint)
0:91 'gs_ub3' (temp 3-component vector of uint)
0:92 move second child to first child (temp 3-component vector of uint)
0:92 'out_u3' (temp 3-component vector of uint)
0:92 AtomicMax (temp 3-component vector of uint)
0:92 'gs_ua3' (temp 3-component vector of uint)
0:92 'gs_ub3' (temp 3-component vector of uint)
0:93 AtomicMin (global void)
0:93 'gs_ua3' (temp 3-component vector of uint)
0:93 'gs_ub3' (temp 3-component vector of uint)
0:94 move second child to first child (temp 3-component vector of uint)
0:94 'out_u3' (temp 3-component vector of uint)
0:94 AtomicMin (temp 3-component vector of uint)
0:94 'gs_ua3' (temp 3-component vector of uint)
0:94 'gs_ub3' (temp 3-component vector of uint)
0:95 AtomicOr (global void)
0:95 'gs_ua3' (temp 3-component vector of uint)
0:95 'gs_ub3' (temp 3-component vector of uint)
0:96 move second child to first child (temp 3-component vector of uint)
0:96 'out_u3' (temp 3-component vector of uint)
0:96 AtomicOr (temp 3-component vector of uint)
0:96 'gs_ua3' (temp 3-component vector of uint)
0:96 'gs_ub3' (temp 3-component vector of uint)
0:97 AtomicXor (global void)
0:97 'gs_ua3' (temp 3-component vector of uint)
0:97 'gs_ub3' (temp 3-component vector of uint)
0:98 move second child to first child (temp 3-component vector of uint)
0:98 'out_u3' (temp 3-component vector of uint)
0:98 AtomicXor (temp 3-component vector of uint)
0:98 'gs_ua3' (temp 3-component vector of uint)
0:98 'gs_ub3' (temp 3-component vector of uint)
0:101 Branch: Return with expression
0:? Constant:
0:? 1.000000
0:? 2.000000
0:? 3.000000
0:130 Function Definition: ComputeShaderFunction(vf4;vf4;vf4;vu4;vu4; (temp 4-component vector of float)
0:105 Function Parameters:
0:105 'inF0' (temp 4-component vector of float)
0:105 'inF1' (temp 4-component vector of float)
0:105 'inF2' (temp 4-component vector of float)
0:105 'inU0' (temp 4-component vector of uint)
0:105 'inU1' (temp 4-component vector of uint)
0:? Sequence
0:109 all (global bool)
0:109 'inF0' (temp 4-component vector of float)
0:112 AtomicAdd (global void)
0:112 'gs_ua4' (temp 4-component vector of uint)
0:112 'gs_ub4' (temp 4-component vector of uint)
0:113 move second child to first child (temp 4-component vector of uint)
0:113 'out_u4' (temp 4-component vector of uint)
0:113 AtomicAdd (temp 4-component vector of uint)
0:113 'gs_ua4' (temp 4-component vector of uint)
0:113 'gs_ub4' (temp 4-component vector of uint)
0:114 AtomicAnd (global void)
0:114 'gs_ua4' (temp 4-component vector of uint)
0:114 'gs_ub4' (temp 4-component vector of uint)
0:115 move second child to first child (temp 4-component vector of uint)
0:115 'out_u4' (temp 4-component vector of uint)
0:115 AtomicAnd (temp 4-component vector of uint)
0:115 'gs_ua4' (temp 4-component vector of uint)
0:115 'gs_ub4' (temp 4-component vector of uint)
0:116 move second child to first child (temp 4-component vector of uint)
0:116 'out_u4' (temp 4-component vector of uint)
0:116 AtomicCompSwap (temp 4-component vector of uint)
0:116 'gs_ua4' (temp 4-component vector of uint)
0:116 'gs_ub4' (temp 4-component vector of uint)
0:116 'gs_uc4' (temp 4-component vector of uint)
0:117 move second child to first child (temp 4-component vector of uint)
0:117 'out_u4' (temp 4-component vector of uint)
0:117 AtomicExchange (temp 4-component vector of uint)
0:117 'gs_ua4' (temp 4-component vector of uint)
0:117 'gs_ub4' (temp 4-component vector of uint)
0:118 AtomicMax (global void)
0:118 'gs_ua4' (temp 4-component vector of uint)
0:118 'gs_ub4' (temp 4-component vector of uint)
0:119 move second child to first child (temp 4-component vector of uint)
0:119 'out_u4' (temp 4-component vector of uint)
0:119 AtomicMax (temp 4-component vector of uint)
0:119 'gs_ua4' (temp 4-component vector of uint)
0:119 'gs_ub4' (temp 4-component vector of uint)
0:120 AtomicMin (global void)
0:120 'gs_ua4' (temp 4-component vector of uint)
0:120 'gs_ub4' (temp 4-component vector of uint)
0:121 move second child to first child (temp 4-component vector of uint)
0:121 'out_u4' (temp 4-component vector of uint)
0:121 AtomicMin (temp 4-component vector of uint)
0:121 'gs_ua4' (temp 4-component vector of uint)
0:121 'gs_ub4' (temp 4-component vector of uint)
0:122 AtomicOr (global void)
0:122 'gs_ua4' (temp 4-component vector of uint)
0:122 'gs_ub4' (temp 4-component vector of uint)
0:123 move second child to first child (temp 4-component vector of uint)
0:123 'out_u4' (temp 4-component vector of uint)
0:123 AtomicOr (temp 4-component vector of uint)
0:123 'gs_ua4' (temp 4-component vector of uint)
0:123 'gs_ub4' (temp 4-component vector of uint)
0:124 AtomicXor (global void)
0:124 'gs_ua4' (temp 4-component vector of uint)
0:124 'gs_ub4' (temp 4-component vector of uint)
0:125 move second child to first child (temp 4-component vector of uint)
0:125 'out_u4' (temp 4-component vector of uint)
0:125 AtomicXor (temp 4-component vector of uint)
0:125 'gs_ua4' (temp 4-component vector of uint)
0:125 'gs_ub4' (temp 4-component vector of uint)
0:128 Branch: Return with expression
0:? Constant:
0:? 1.000000
0:? 2.000000
0:? 3.000000
0:? 4.000000
0:? Linker Objects
0:? 'gs_ua' (temp uint)
0:? 'gs_ub' (temp uint)
0:? 'gs_uc' (temp uint)
0:? 'gs_ua2' (temp 2-component vector of uint)
0:? 'gs_ub2' (temp 2-component vector of uint)
0:? 'gs_uc2' (temp 2-component vector of uint)
0:? 'gs_ua3' (temp 3-component vector of uint)
0:? 'gs_ub3' (temp 3-component vector of uint)
0:? 'gs_uc3' (temp 3-component vector of uint)
0:? 'gs_ua4' (temp 4-component vector of uint)
0:? 'gs_ub4' (temp 4-component vector of uint)
0:? 'gs_uc4' (temp 4-component vector of uint)
Linked compute stage:
Shader version: 450
local_size = (1, 1, 1)
0:? Sequence
0:44 Function Definition: ComputeShaderFunction(f1;f1;f1;u1;u1; (temp float)
0:17 Function Parameters:
0:17 'inF0' (temp float)
0:17 'inF1' (temp float)
0:17 'inF2' (temp float)
0:17 'inU0' (temp uint)
0:17 'inU1' (temp uint)
0:? Sequence
0:21 all (global bool)
0:21 'inF0' (temp float)
0:24 AtomicAdd (global void)
0:24 'gs_ua' (temp uint)
0:24 'gs_ub' (temp uint)
0:25 move second child to first child (temp uint)
0:25 'out_u1' (temp uint)
0:25 AtomicAdd (temp uint)
0:25 'gs_ua' (temp uint)
0:25 'gs_ub' (temp uint)
0:26 AtomicAnd (global void)
0:26 'gs_ua' (temp uint)
0:26 'gs_ub' (temp uint)
0:27 move second child to first child (temp uint)
0:27 'out_u1' (temp uint)
0:27 AtomicAnd (temp uint)
0:27 'gs_ua' (temp uint)
0:27 'gs_ub' (temp uint)
0:28 move second child to first child (temp uint)
0:28 'out_u1' (temp uint)
0:28 AtomicCompSwap (temp uint)
0:28 'gs_ua' (temp uint)
0:28 'gs_ub' (temp uint)
0:28 'gs_uc' (temp uint)
0:29 move second child to first child (temp uint)
0:29 'out_u1' (temp uint)
0:29 AtomicExchange (temp uint)
0:29 'gs_ua' (temp uint)
0:29 'gs_ub' (temp uint)
0:30 AtomicMax (global void)
0:30 'gs_ua' (temp uint)
0:30 'gs_ub' (temp uint)
0:31 move second child to first child (temp uint)
0:31 'out_u1' (temp uint)
0:31 AtomicMax (temp uint)
0:31 'gs_ua' (temp uint)
0:31 'gs_ub' (temp uint)
0:32 AtomicMin (global void)
0:32 'gs_ua' (temp uint)
0:32 'gs_ub' (temp uint)
0:33 move second child to first child (temp uint)
0:33 'out_u1' (temp uint)
0:33 AtomicMin (temp uint)
0:33 'gs_ua' (temp uint)
0:33 'gs_ub' (temp uint)
0:34 AtomicOr (global void)
0:34 'gs_ua' (temp uint)
0:34 'gs_ub' (temp uint)
0:35 move second child to first child (temp uint)
0:35 'out_u1' (temp uint)
0:35 AtomicOr (temp uint)
0:35 'gs_ua' (temp uint)
0:35 'gs_ub' (temp uint)
0:36 AtomicXor (global void)
0:36 'gs_ua' (temp uint)
0:36 'gs_ub' (temp uint)
0:37 move second child to first child (temp uint)
0:37 'out_u1' (temp uint)
0:37 AtomicXor (temp uint)
0:37 'gs_ua' (temp uint)
0:37 'gs_ub' (temp uint)
0:41 Branch: Return with expression
0:41 Constant:
0:41 0.000000
0:50 Function Definition: ComputeShaderFunction(vf1;vf1;vf1; (temp 1-component vector of float)
0:45 Function Parameters:
0:45 'inF0' (temp 1-component vector of float)
0:45 'inF1' (temp 1-component vector of float)
0:45 'inF2' (temp 1-component vector of float)
0:? Sequence
0:47 Branch: Return with expression
0:47 Constant:
0:47 0.000000
0:77 Function Definition: ComputeShaderFunction(vf2;vf2;vf2;vu2;vu2; (temp 2-component vector of float)
0:51 Function Parameters:
0:51 'inF0' (temp 2-component vector of float)
0:51 'inF1' (temp 2-component vector of float)
0:51 'inF2' (temp 2-component vector of float)
0:51 'inU0' (temp 2-component vector of uint)
0:51 'inU1' (temp 2-component vector of uint)
0:? Sequence
0:55 all (global bool)
0:55 'inF0' (temp 2-component vector of float)
0:58 AtomicAdd (global void)
0:58 'gs_ua2' (temp 2-component vector of uint)
0:58 'gs_ub2' (temp 2-component vector of uint)
0:59 move second child to first child (temp 2-component vector of uint)
0:59 'out_u2' (temp 2-component vector of uint)
0:59 AtomicAdd (temp 2-component vector of uint)
0:59 'gs_ua2' (temp 2-component vector of uint)
0:59 'gs_ub2' (temp 2-component vector of uint)
0:60 AtomicAnd (global void)
0:60 'gs_ua2' (temp 2-component vector of uint)
0:60 'gs_ub2' (temp 2-component vector of uint)
0:61 move second child to first child (temp 2-component vector of uint)
0:61 'out_u2' (temp 2-component vector of uint)
0:61 AtomicAnd (temp 2-component vector of uint)
0:61 'gs_ua2' (temp 2-component vector of uint)
0:61 'gs_ub2' (temp 2-component vector of uint)
0:62 move second child to first child (temp 2-component vector of uint)
0:62 'out_u2' (temp 2-component vector of uint)
0:62 AtomicCompSwap (temp 2-component vector of uint)
0:62 'gs_ua2' (temp 2-component vector of uint)
0:62 'gs_ub2' (temp 2-component vector of uint)
0:62 'gs_uc2' (temp 2-component vector of uint)
0:63 move second child to first child (temp 2-component vector of uint)
0:63 'out_u2' (temp 2-component vector of uint)
0:63 AtomicExchange (temp 2-component vector of uint)
0:63 'gs_ua2' (temp 2-component vector of uint)
0:63 'gs_ub2' (temp 2-component vector of uint)
0:64 AtomicMax (global void)
0:64 'gs_ua2' (temp 2-component vector of uint)
0:64 'gs_ub2' (temp 2-component vector of uint)
0:65 move second child to first child (temp 2-component vector of uint)
0:65 'out_u2' (temp 2-component vector of uint)
0:65 AtomicMax (temp 2-component vector of uint)
0:65 'gs_ua2' (temp 2-component vector of uint)
0:65 'gs_ub2' (temp 2-component vector of uint)
0:66 AtomicMin (global void)
0:66 'gs_ua2' (temp 2-component vector of uint)
0:66 'gs_ub2' (temp 2-component vector of uint)
0:67 move second child to first child (temp 2-component vector of uint)
0:67 'out_u2' (temp 2-component vector of uint)
0:67 AtomicMin (temp 2-component vector of uint)
0:67 'gs_ua2' (temp 2-component vector of uint)
0:67 'gs_ub2' (temp 2-component vector of uint)
0:68 AtomicOr (global void)
0:68 'gs_ua2' (temp 2-component vector of uint)
0:68 'gs_ub2' (temp 2-component vector of uint)
0:69 move second child to first child (temp 2-component vector of uint)
0:69 'out_u2' (temp 2-component vector of uint)
0:69 AtomicOr (temp 2-component vector of uint)
0:69 'gs_ua2' (temp 2-component vector of uint)
0:69 'gs_ub2' (temp 2-component vector of uint)
0:70 AtomicXor (global void)
0:70 'gs_ua2' (temp 2-component vector of uint)
0:70 'gs_ub2' (temp 2-component vector of uint)
0:71 move second child to first child (temp 2-component vector of uint)
0:71 'out_u2' (temp 2-component vector of uint)
0:71 AtomicXor (temp 2-component vector of uint)
0:71 'gs_ua2' (temp 2-component vector of uint)
0:71 'gs_ub2' (temp 2-component vector of uint)
0:74 Branch: Return with expression
0:? Constant:
0:? 1.000000
0:? 2.000000
0:104 Function Definition: ComputeShaderFunction(vf3;vf3;vf3;vu3;vu3; (temp 3-component vector of float)
0:78 Function Parameters:
0:78 'inF0' (temp 3-component vector of float)
0:78 'inF1' (temp 3-component vector of float)
0:78 'inF2' (temp 3-component vector of float)
0:78 'inU0' (temp 3-component vector of uint)
0:78 'inU1' (temp 3-component vector of uint)
0:? Sequence
0:82 all (global bool)
0:82 'inF0' (temp 3-component vector of float)
0:85 AtomicAdd (global void)
0:85 'gs_ua3' (temp 3-component vector of uint)
0:85 'gs_ub3' (temp 3-component vector of uint)
0:86 move second child to first child (temp 3-component vector of uint)
0:86 'out_u3' (temp 3-component vector of uint)
0:86 AtomicAdd (temp 3-component vector of uint)
0:86 'gs_ua3' (temp 3-component vector of uint)
0:86 'gs_ub3' (temp 3-component vector of uint)
0:87 AtomicAnd (global void)
0:87 'gs_ua3' (temp 3-component vector of uint)
0:87 'gs_ub3' (temp 3-component vector of uint)
0:88 move second child to first child (temp 3-component vector of uint)
0:88 'out_u3' (temp 3-component vector of uint)
0:88 AtomicAnd (temp 3-component vector of uint)
0:88 'gs_ua3' (temp 3-component vector of uint)
0:88 'gs_ub3' (temp 3-component vector of uint)
0:89 move second child to first child (temp 3-component vector of uint)
0:89 'out_u3' (temp 3-component vector of uint)
0:89 AtomicCompSwap (temp 3-component vector of uint)
0:89 'gs_ua3' (temp 3-component vector of uint)
0:89 'gs_ub3' (temp 3-component vector of uint)
0:89 'gs_uc3' (temp 3-component vector of uint)
0:90 move second child to first child (temp 3-component vector of uint)
0:90 'out_u3' (temp 3-component vector of uint)
0:90 AtomicExchange (temp 3-component vector of uint)
0:90 'gs_ua3' (temp 3-component vector of uint)
0:90 'gs_ub3' (temp 3-component vector of uint)
0:91 AtomicMax (global void)
0:91 'gs_ua3' (temp 3-component vector of uint)
0:91 'gs_ub3' (temp 3-component vector of uint)
0:92 move second child to first child (temp 3-component vector of uint)
0:92 'out_u3' (temp 3-component vector of uint)
0:92 AtomicMax (temp 3-component vector of uint)
0:92 'gs_ua3' (temp 3-component vector of uint)
0:92 'gs_ub3' (temp 3-component vector of uint)
0:93 AtomicMin (global void)
0:93 'gs_ua3' (temp 3-component vector of uint)
0:93 'gs_ub3' (temp 3-component vector of uint)
0:94 move second child to first child (temp 3-component vector of uint)
0:94 'out_u3' (temp 3-component vector of uint)
0:94 AtomicMin (temp 3-component vector of uint)
0:94 'gs_ua3' (temp 3-component vector of uint)
0:94 'gs_ub3' (temp 3-component vector of uint)
0:95 AtomicOr (global void)
0:95 'gs_ua3' (temp 3-component vector of uint)
0:95 'gs_ub3' (temp 3-component vector of uint)
0:96 move second child to first child (temp 3-component vector of uint)
0:96 'out_u3' (temp 3-component vector of uint)
0:96 AtomicOr (temp 3-component vector of uint)
0:96 'gs_ua3' (temp 3-component vector of uint)
0:96 'gs_ub3' (temp 3-component vector of uint)
0:97 AtomicXor (global void)
0:97 'gs_ua3' (temp 3-component vector of uint)
0:97 'gs_ub3' (temp 3-component vector of uint)
0:98 move second child to first child (temp 3-component vector of uint)
0:98 'out_u3' (temp 3-component vector of uint)
0:98 AtomicXor (temp 3-component vector of uint)
0:98 'gs_ua3' (temp 3-component vector of uint)
0:98 'gs_ub3' (temp 3-component vector of uint)
0:101 Branch: Return with expression
0:? Constant:
0:? 1.000000
0:? 2.000000
0:? 3.000000
0:130 Function Definition: ComputeShaderFunction(vf4;vf4;vf4;vu4;vu4; (temp 4-component vector of float)
0:105 Function Parameters:
0:105 'inF0' (temp 4-component vector of float)
0:105 'inF1' (temp 4-component vector of float)
0:105 'inF2' (temp 4-component vector of float)
0:105 'inU0' (temp 4-component vector of uint)
0:105 'inU1' (temp 4-component vector of uint)
0:? Sequence
0:109 all (global bool)
0:109 'inF0' (temp 4-component vector of float)
0:112 AtomicAdd (global void)
0:112 'gs_ua4' (temp 4-component vector of uint)
0:112 'gs_ub4' (temp 4-component vector of uint)
0:113 move second child to first child (temp 4-component vector of uint)
0:113 'out_u4' (temp 4-component vector of uint)
0:113 AtomicAdd (temp 4-component vector of uint)
0:113 'gs_ua4' (temp 4-component vector of uint)
0:113 'gs_ub4' (temp 4-component vector of uint)
0:114 AtomicAnd (global void)
0:114 'gs_ua4' (temp 4-component vector of uint)
0:114 'gs_ub4' (temp 4-component vector of uint)
0:115 move second child to first child (temp 4-component vector of uint)
0:115 'out_u4' (temp 4-component vector of uint)
0:115 AtomicAnd (temp 4-component vector of uint)
0:115 'gs_ua4' (temp 4-component vector of uint)
0:115 'gs_ub4' (temp 4-component vector of uint)
0:116 move second child to first child (temp 4-component vector of uint)
0:116 'out_u4' (temp 4-component vector of uint)
0:116 AtomicCompSwap (temp 4-component vector of uint)
0:116 'gs_ua4' (temp 4-component vector of uint)
0:116 'gs_ub4' (temp 4-component vector of uint)
0:116 'gs_uc4' (temp 4-component vector of uint)
0:117 move second child to first child (temp 4-component vector of uint)
0:117 'out_u4' (temp 4-component vector of uint)
0:117 AtomicExchange (temp 4-component vector of uint)
0:117 'gs_ua4' (temp 4-component vector of uint)
0:117 'gs_ub4' (temp 4-component vector of uint)
0:118 AtomicMax (global void)
0:118 'gs_ua4' (temp 4-component vector of uint)
0:118 'gs_ub4' (temp 4-component vector of uint)
0:119 move second child to first child (temp 4-component vector of uint)
0:119 'out_u4' (temp 4-component vector of uint)
0:119 AtomicMax (temp 4-component vector of uint)
0:119 'gs_ua4' (temp 4-component vector of uint)
0:119 'gs_ub4' (temp 4-component vector of uint)
0:120 AtomicMin (global void)
0:120 'gs_ua4' (temp 4-component vector of uint)
0:120 'gs_ub4' (temp 4-component vector of uint)
0:121 move second child to first child (temp 4-component vector of uint)
0:121 'out_u4' (temp 4-component vector of uint)
0:121 AtomicMin (temp 4-component vector of uint)
0:121 'gs_ua4' (temp 4-component vector of uint)
0:121 'gs_ub4' (temp 4-component vector of uint)
0:122 AtomicOr (global void)
0:122 'gs_ua4' (temp 4-component vector of uint)
0:122 'gs_ub4' (temp 4-component vector of uint)
0:123 move second child to first child (temp 4-component vector of uint)
0:123 'out_u4' (temp 4-component vector of uint)
0:123 AtomicOr (temp 4-component vector of uint)
0:123 'gs_ua4' (temp 4-component vector of uint)
0:123 'gs_ub4' (temp 4-component vector of uint)
0:124 AtomicXor (global void)
0:124 'gs_ua4' (temp 4-component vector of uint)
0:124 'gs_ub4' (temp 4-component vector of uint)
0:125 move second child to first child (temp 4-component vector of uint)
0:125 'out_u4' (temp 4-component vector of uint)
0:125 AtomicXor (temp 4-component vector of uint)
0:125 'gs_ua4' (temp 4-component vector of uint)
0:125 'gs_ub4' (temp 4-component vector of uint)
0:128 Branch: Return with expression
0:? Constant:
0:? 1.000000
0:? 2.000000
0:? 3.000000
0:? 4.000000
0:? Linker Objects
0:? 'gs_ua' (temp uint)
0:? 'gs_ub' (temp uint)
0:? 'gs_uc' (temp uint)
0:? 'gs_ua2' (temp 2-component vector of uint)
0:? 'gs_ub2' (temp 2-component vector of uint)
0:? 'gs_uc2' (temp 2-component vector of uint)
0:? 'gs_ua3' (temp 3-component vector of uint)
0:? 'gs_ub3' (temp 3-component vector of uint)
0:? 'gs_uc3' (temp 3-component vector of uint)
0:? 'gs_ua4' (temp 4-component vector of uint)
0:? 'gs_ub4' (temp 4-component vector of uint)
0:? 'gs_uc4' (temp 4-component vector of uint)
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 182
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint GLCompute 4 "ComputeShaderFunction"
ExecutionMode 4 LocalSize 1 1 1
Source HLSL 450
Name 4 "ComputeShaderFunction"
Name 8 "inF0"
Name 14 "gs_ua"
Name 15 "gs_ub"
Name 20 "out_u1"
Name 28 "gs_uc"
Name 54 "inF0"
Name 59 "gs_ua2"
Name 60 "gs_ub2"
Name 63 "out_u2"
Name 71 "gs_uc2"
Name 98 "inF0"
Name 103 "gs_ua3"
Name 104 "gs_ub3"
Name 107 "out_u3"
Name 115 "gs_uc3"
Name 141 "inF0"
Name 146 "gs_ua4"
Name 147 "gs_ub4"
Name 150 "out_u4"
Name 158 "gs_uc4"
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
7: TypePointer Function 6(float)
10: TypeBool
12: TypeInt 32 0
13: TypePointer Function 12(int)
17: 12(int) Constant 1
18: 12(int) Constant 0
49: 6(float) Constant 0
52: TypeVector 6(float) 2
53: TypePointer Function 52(fvec2)
57: TypeVector 12(int) 2
58: TypePointer Function 57(ivec2)
92: 6(float) Constant 1065353216
93: 6(float) Constant 1073741824
94: 52(fvec2) ConstantComposite 92 93
96: TypeVector 6(float) 3
97: TypePointer Function 96(fvec3)
101: TypeVector 12(int) 3
102: TypePointer Function 101(ivec3)
136: 6(float) Constant 1077936128
137: 96(fvec3) ConstantComposite 92 93 136
139: TypeVector 6(float) 4
140: TypePointer Function 139(fvec4)
144: TypeVector 12(int) 4
145: TypePointer Function 144(ivec4)
179: 6(float) Constant 1082130432
180: 139(fvec4) ConstantComposite 92 93 136 179
4(ComputeShaderFunction): 2 Function None 3
5: Label
8(inF0): 7(ptr) Variable Function
14(gs_ua): 13(ptr) Variable Function
15(gs_ub): 13(ptr) Variable Function
20(out_u1): 13(ptr) Variable Function
28(gs_uc): 13(ptr) Variable Function
54(inF0): 53(ptr) Variable Function
59(gs_ua2): 58(ptr) Variable Function
60(gs_ub2): 58(ptr) Variable Function
63(out_u2): 58(ptr) Variable Function
71(gs_uc2): 58(ptr) Variable Function
98(inF0): 97(ptr) Variable Function
103(gs_ua3): 102(ptr) Variable Function
104(gs_ub3): 102(ptr) Variable Function
107(out_u3): 102(ptr) Variable Function
115(gs_uc3): 102(ptr) Variable Function
141(inF0): 140(ptr) Variable Function
146(gs_ua4): 145(ptr) Variable Function
147(gs_ub4): 145(ptr) Variable Function
150(out_u4): 145(ptr) Variable Function
158(gs_uc4): 145(ptr) Variable Function
9: 6(float) Load 8(inF0)
11: 10(bool) All 9
16: 12(int) Load 15(gs_ub)
19: 2 AtomicIAdd 14(gs_ua) 17 18 16
21: 12(int) Load 15(gs_ub)
22: 12(int) AtomicIAdd 14(gs_ua) 17 18 21
Store 20(out_u1) 22
23: 12(int) Load 15(gs_ub)
24: 2 AtomicAnd 14(gs_ua) 17 18 23
25: 12(int) Load 15(gs_ub)
26: 12(int) AtomicAnd 14(gs_ua) 17 18 25
Store 20(out_u1) 26
27: 12(int) Load 15(gs_ub)
29: 12(int) Load 28(gs_uc)
30: 12(int) AtomicCompareExchange 14(gs_ua) 17 18 18 29 27
Store 20(out_u1) 30
31: 12(int) Load 15(gs_ub)
32: 12(int) AtomicExchange 14(gs_ua) 17 18 31
Store 20(out_u1) 32
33: 12(int) Load 15(gs_ub)
34: 2 AtomicSMax 14(gs_ua) 17 18 33
35: 12(int) Load 15(gs_ub)
36: 12(int) AtomicUMax 14(gs_ua) 17 18 35
Store 20(out_u1) 36
37: 12(int) Load 15(gs_ub)
38: 2 AtomicSMin 14(gs_ua) 17 18 37
39: 12(int) Load 15(gs_ub)
40: 12(int) AtomicUMin 14(gs_ua) 17 18 39
Store 20(out_u1) 40
41: 12(int) Load 15(gs_ub)
42: 2 AtomicOr 14(gs_ua) 17 18 41
43: 12(int) Load 15(gs_ub)
44: 12(int) AtomicOr 14(gs_ua) 17 18 43
Store 20(out_u1) 44
45: 12(int) Load 15(gs_ub)
46: 2 AtomicXor 14(gs_ua) 17 18 45
47: 12(int) Load 15(gs_ub)
48: 12(int) AtomicXor 14(gs_ua) 17 18 47
Store 20(out_u1) 48
ReturnValue 49
FunctionEnd

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,886 @@
hlsl.intrinsics.negative.comp
ERROR: 0:7: 'asdouble' : no matching overloaded function found
ERROR: 0:8: 'CheckAccessFullyMapped' : no matching overloaded function found
ERROR: 0:9: 'clip' : no matching overloaded function found
ERROR: 0:10: 'countbits' : no matching overloaded function found
ERROR: 0:11: 'cross' : no matching overloaded function found
ERROR: 0:12: 'D3DCOLORtoUBYTE4' : no matching overloaded function found
ERROR: 0:13: 'ddx' : no matching overloaded function found
ERROR: 0:14: 'ddx_coarse' : no matching overloaded function found
ERROR: 0:15: 'ddx_fine' : no matching overloaded function found
ERROR: 0:16: 'ddy' : no matching overloaded function found
ERROR: 0:17: 'ddy_coarse' : no matching overloaded function found
ERROR: 0:18: 'ddy_fine' : no matching overloaded function found
ERROR: 0:19: 'determinant' : no matching overloaded function found
ERROR: 0:20: 'EvaluateAttributeAtCentroid' : no matching overloaded function found
ERROR: 0:21: 'EvaluateAttributeAtSample' : no matching overloaded function found
ERROR: 0:22: 'EvaluateAttributeSnapped' : no matching overloaded function found
ERROR: 0:23: 'f16tof32' : no matching overloaded function found
ERROR: 0:24: 'firstbithigh' : no matching overloaded function found
ERROR: 0:25: 'firstbitlow' : no matching overloaded function found
ERROR: 0:26: 'fma' : no matching overloaded function found
ERROR: 0:27: 'fwidth' : no matching overloaded function found
ERROR: 0:28: 'InterlockedAdd' : no matching overloaded function found
ERROR: 0:29: 'InterlockedAdd' : no matching overloaded function found
ERROR: 0:30: 'InterlockedAnd' : no matching overloaded function found
ERROR: 0:31: 'InterlockedAnd' : no matching overloaded function found
ERROR: 0:32: 'InterlockedCompareExchange' : no matching overloaded function found
ERROR: 0:33: 'InterlockedExchange' : no matching overloaded function found
ERROR: 0:34: 'InterlockedMax' : no matching overloaded function found
ERROR: 0:35: 'InterlockedMax' : no matching overloaded function found
ERROR: 0:36: 'InterlockedMin' : no matching overloaded function found
ERROR: 0:37: 'InterlockedMin' : no matching overloaded function found
ERROR: 0:38: 'InterlockedOr' : no matching overloaded function found
ERROR: 0:39: 'InterlockedOr' : no matching overloaded function found
ERROR: 0:40: 'InterlockedXor' : no matching overloaded function found
ERROR: 0:41: 'InterlockedXor' : no matching overloaded function found
ERROR: 0:42: 'length' : no matching overloaded function found
ERROR: 0:43: 'msad4' : no matching overloaded function found
ERROR: 0:44: 'normalize' : no matching overloaded function found
ERROR: 0:45: 'reflect' : no matching overloaded function found
ERROR: 0:46: 'refract' : no matching overloaded function found
ERROR: 0:47: 'refract' : no matching overloaded function found
ERROR: 0:48: 'reversebits' : no matching overloaded function found
ERROR: 0:49: 'transpose' : no matching overloaded function found
ERROR: 0:60: 'GetRenderTargetSamplePosition' : no matching overloaded function found
ERROR: 0:69: 'asdouble' : no matching overloaded function found
ERROR: 0:70: 'CheckAccessFullyMapped' : no matching overloaded function found
ERROR: 0:71: 'countbits' : no matching overloaded function found
ERROR: 0:72: 'cross' : no matching overloaded function found
ERROR: 0:73: 'D3DCOLORtoUBYTE4' : no matching overloaded function found
ERROR: 0:74: 'ddx' : no matching overloaded function found
ERROR: 0:75: 'ddx_coarse' : no matching overloaded function found
ERROR: 0:76: 'ddx_fine' : no matching overloaded function found
ERROR: 0:77: 'ddy' : no matching overloaded function found
ERROR: 0:78: 'ddy_coarse' : no matching overloaded function found
ERROR: 0:79: 'ddy_fine' : no matching overloaded function found
ERROR: 0:80: 'determinant' : no matching overloaded function found
ERROR: 0:81: 'EvaluateAttributeAtCentroid' : no matching overloaded function found
ERROR: 0:82: 'EvaluateAttributeAtSample' : no matching overloaded function found
ERROR: 0:83: 'EvaluateAttributeSnapped' : no matching overloaded function found
ERROR: 0:84: 'f16tof32' : no matching overloaded function found
ERROR: 0:85: 'firstbithigh' : no matching overloaded function found
ERROR: 0:86: 'firstbitlow' : no matching overloaded function found
ERROR: 0:87: 'fma' : no matching overloaded function found
ERROR: 0:88: 'fwidth' : no matching overloaded function found
ERROR: 0:89: 'InterlockedAdd' : no matching overloaded function found
ERROR: 0:90: 'InterlockedAdd' : no matching overloaded function found
ERROR: 0:91: 'InterlockedAnd' : no matching overloaded function found
ERROR: 0:92: 'InterlockedAnd' : no matching overloaded function found
ERROR: 0:93: 'InterlockedCompareExchange' : no matching overloaded function found
ERROR: 0:94: 'InterlockedExchange' : no matching overloaded function found
ERROR: 0:95: 'InterlockedMax' : no matching overloaded function found
ERROR: 0:96: 'InterlockedMax' : no matching overloaded function found
ERROR: 0:97: 'InterlockedMin' : no matching overloaded function found
ERROR: 0:98: 'InterlockedMin' : no matching overloaded function found
ERROR: 0:99: 'InterlockedOr' : no matching overloaded function found
ERROR: 0:100: 'InterlockedOr' : no matching overloaded function found
ERROR: 0:101: 'InterlockedXor' : no matching overloaded function found
ERROR: 0:102: 'InterlockedXor' : no matching overloaded function found
ERROR: 0:103: 'noise' : no matching overloaded function found
ERROR: 0:104: 'reversebits' : no matching overloaded function found
ERROR: 0:105: 'transpose' : no matching overloaded function found
ERROR: 0:116: 'CheckAccessFullyMapped' : no matching overloaded function found
ERROR: 0:117: 'countbits' : no matching overloaded function found
ERROR: 0:118: 'ddx' : no matching overloaded function found
ERROR: 0:119: 'ddx_coarse' : no matching overloaded function found
ERROR: 0:120: 'ddx_fine' : no matching overloaded function found
ERROR: 0:121: 'ddy' : no matching overloaded function found
ERROR: 0:122: 'ddy_coarse' : no matching overloaded function found
ERROR: 0:123: 'ddy_fine' : no matching overloaded function found
ERROR: 0:124: 'D3DCOLORtoUBYTE4' : no matching overloaded function found
ERROR: 0:125: 'determinant' : no matching overloaded function found
ERROR: 0:126: 'EvaluateAttributeAtCentroid' : no matching overloaded function found
ERROR: 0:127: 'EvaluateAttributeAtSample' : no matching overloaded function found
ERROR: 0:128: 'EvaluateAttributeSnapped' : no matching overloaded function found
ERROR: 0:129: 'f16tof32' : no matching overloaded function found
ERROR: 0:130: 'firstbithigh' : no matching overloaded function found
ERROR: 0:131: 'firstbitlow' : no matching overloaded function found
ERROR: 0:132: 'fma' : no matching overloaded function found
ERROR: 0:133: 'fwidth' : no matching overloaded function found
ERROR: 0:134: 'InterlockedAdd' : no matching overloaded function found
ERROR: 0:135: 'InterlockedAdd' : no matching overloaded function found
ERROR: 0:136: 'InterlockedAnd' : no matching overloaded function found
ERROR: 0:137: 'InterlockedAnd' : no matching overloaded function found
ERROR: 0:138: 'InterlockedCompareExchange' : no matching overloaded function found
ERROR: 0:139: 'InterlockedExchange' : no matching overloaded function found
ERROR: 0:140: 'InterlockedMax' : no matching overloaded function found
ERROR: 0:141: 'InterlockedMax' : no matching overloaded function found
ERROR: 0:142: 'InterlockedMin' : no matching overloaded function found
ERROR: 0:143: 'InterlockedMin' : no matching overloaded function found
ERROR: 0:144: 'InterlockedOr' : no matching overloaded function found
ERROR: 0:145: 'InterlockedOr' : no matching overloaded function found
ERROR: 0:146: 'InterlockedXor' : no matching overloaded function found
ERROR: 0:147: 'InterlockedXor' : no matching overloaded function found
ERROR: 0:148: 'noise' : no matching overloaded function found
ERROR: 0:149: 'reversebits' : no matching overloaded function found
ERROR: 0:150: 'transpose' : no matching overloaded function found
ERROR: 0:161: 'CheckAccessFullyMapped' : no matching overloaded function found
ERROR: 0:162: 'countbits' : no matching overloaded function found
ERROR: 0:163: 'cross' : no matching overloaded function found
ERROR: 0:164: 'determinant' : no matching overloaded function found
ERROR: 0:165: 'ddx' : no matching overloaded function found
ERROR: 0:166: 'ddx_coarse' : no matching overloaded function found
ERROR: 0:167: 'ddx_fine' : no matching overloaded function found
ERROR: 0:168: 'ddy' : no matching overloaded function found
ERROR: 0:169: 'ddy_coarse' : no matching overloaded function found
ERROR: 0:170: 'ddy_fine' : no matching overloaded function found
ERROR: 0:171: 'EvaluateAttributeAtCentroid' : no matching overloaded function found
ERROR: 0:172: 'EvaluateAttributeAtSample' : no matching overloaded function found
ERROR: 0:173: 'EvaluateAttributeSnapped' : no matching overloaded function found
ERROR: 0:174: 'f16tof32' : no matching overloaded function found
ERROR: 0:175: 'firstbithigh' : no matching overloaded function found
ERROR: 0:176: 'firstbitlow' : no matching overloaded function found
ERROR: 0:177: 'fma' : no matching overloaded function found
ERROR: 0:178: 'fwidth' : no matching overloaded function found
ERROR: 0:179: 'InterlockedAdd' : no matching overloaded function found
ERROR: 0:180: 'InterlockedAdd' : no matching overloaded function found
ERROR: 0:181: 'InterlockedAnd' : no matching overloaded function found
ERROR: 0:182: 'InterlockedAnd' : no matching overloaded function found
ERROR: 0:183: 'InterlockedCompareExchange' : no matching overloaded function found
ERROR: 0:184: 'InterlockedExchange' : no matching overloaded function found
ERROR: 0:185: 'InterlockedMax' : no matching overloaded function found
ERROR: 0:186: 'InterlockedMax' : no matching overloaded function found
ERROR: 0:187: 'InterlockedMin' : no matching overloaded function found
ERROR: 0:188: 'InterlockedMin' : no matching overloaded function found
ERROR: 0:189: 'InterlockedOr' : no matching overloaded function found
ERROR: 0:190: 'InterlockedOr' : no matching overloaded function found
ERROR: 0:191: 'InterlockedXor' : no matching overloaded function found
ERROR: 0:192: 'InterlockedXor' : no matching overloaded function found
ERROR: 0:193: 'noise' : no matching overloaded function found
ERROR: 0:194: 'reversebits' : no matching overloaded function found
ERROR: 0:195: 'transpose' : no matching overloaded function found
ERROR: 151 compilation errors. No code generated.
Shader version: 450
local_size = (1, 1, 1)
ERROR: node is still EOpNull!
0:56 Function Definition: ComputeShaderFunction(f1;f1;f1;i1; (temp float)
0:2 Function Parameters:
0:2 'inF0' (temp float)
0:2 'inF1' (temp float)
0:2 'inF2' (temp float)
0:2 'inI0' (temp int)
0:? Sequence
0:7 Constant:
0:7 0.000000
0:8 Constant:
0:8 0.000000
0:9 Constant:
0:9 0.000000
0:10 Constant:
0:10 0.000000
0:11 Constant:
0:11 0.000000
0:12 Constant:
0:12 0.000000
0:13 Constant:
0:13 0.000000
0:14 Constant:
0:14 0.000000
0:15 Constant:
0:15 0.000000
0:16 Constant:
0:16 0.000000
0:17 Constant:
0:17 0.000000
0:18 Constant:
0:18 0.000000
0:19 Constant:
0:19 0.000000
0:20 Constant:
0:20 0.000000
0:21 Constant:
0:21 0.000000
0:22 Constant:
0:22 0.000000
0:23 Constant:
0:23 0.000000
0:24 Constant:
0:24 0.000000
0:25 Constant:
0:25 0.000000
0:26 Constant:
0:26 0.000000
0:27 Constant:
0:27 0.000000
0:28 Constant:
0:28 0.000000
0:29 Constant:
0:29 0.000000
0:30 Constant:
0:30 0.000000
0:31 Constant:
0:31 0.000000
0:32 Constant:
0:32 0.000000
0:33 Constant:
0:33 0.000000
0:34 Constant:
0:34 0.000000
0:35 Constant:
0:35 0.000000
0:36 Constant:
0:36 0.000000
0:37 Constant:
0:37 0.000000
0:38 Constant:
0:38 0.000000
0:39 Constant:
0:39 0.000000
0:40 Constant:
0:40 0.000000
0:41 Constant:
0:41 0.000000
0:42 Constant:
0:42 0.000000
0:43 Constant:
0:43 0.000000
0:44 Constant:
0:44 0.000000
0:45 Constant:
0:45 0.000000
0:46 Constant:
0:46 0.000000
0:47 Constant:
0:47 0.000000
0:48 Constant:
0:48 0.000000
0:49 Constant:
0:49 0.000000
0:53 Branch: Return with expression
0:53 Constant:
0:53 0.000000
0:65 Function Definition: ComputeShaderFunction(vf1;vf1;vf1;vi1; (temp 1-component vector of float)
0:57 Function Parameters:
0:57 'inF0' (temp 1-component vector of float)
0:57 'inF1' (temp 1-component vector of float)
0:57 'inF2' (temp 1-component vector of float)
0:57 'inI0' (temp 1-component vector of int)
0:? Sequence
0:60 Constant:
0:60 0.000000
0:62 Branch: Return with expression
0:62 Constant:
0:62 0.000000
0:112 Function Definition: ComputeShaderFunction(vf2;vf2;vf2;vi2; (temp 2-component vector of float)
0:66 Function Parameters:
0:66 'inF0' (temp 2-component vector of float)
0:66 'inF1' (temp 2-component vector of float)
0:66 'inF2' (temp 2-component vector of float)
0:66 'inI0' (temp 2-component vector of int)
0:? Sequence
0:69 Constant:
0:69 0.000000
0:70 Constant:
0:70 0.000000
0:71 Constant:
0:71 0.000000
0:72 Constant:
0:72 0.000000
0:73 Constant:
0:73 0.000000
0:74 Constant:
0:74 0.000000
0:75 Constant:
0:75 0.000000
0:76 Constant:
0:76 0.000000
0:77 Constant:
0:77 0.000000
0:78 Constant:
0:78 0.000000
0:79 Constant:
0:79 0.000000
0:80 Constant:
0:80 0.000000
0:81 Constant:
0:81 0.000000
0:82 Constant:
0:82 0.000000
0:83 Constant:
0:83 0.000000
0:84 Constant:
0:84 0.000000
0:85 Constant:
0:85 0.000000
0:86 Constant:
0:86 0.000000
0:87 Constant:
0:87 0.000000
0:88 Constant:
0:88 0.000000
0:89 Constant:
0:89 0.000000
0:90 Constant:
0:90 0.000000
0:91 Constant:
0:91 0.000000
0:92 Constant:
0:92 0.000000
0:93 Constant:
0:93 0.000000
0:94 Constant:
0:94 0.000000
0:95 Constant:
0:95 0.000000
0:96 Constant:
0:96 0.000000
0:97 Constant:
0:97 0.000000
0:98 Constant:
0:98 0.000000
0:99 Constant:
0:99 0.000000
0:100 Constant:
0:100 0.000000
0:101 Constant:
0:101 0.000000
0:102 Constant:
0:102 0.000000
0:103 Constant:
0:103 0.000000
0:104 Constant:
0:104 0.000000
0:105 Constant:
0:105 0.000000
0:109 Branch: Return with expression
0:? Constant:
0:? 1.000000
0:? 2.000000
0:157 Function Definition: ComputeShaderFunction(vf3;vf3;vf3;vi3; (temp 3-component vector of float)
0:113 Function Parameters:
0:113 'inF0' (temp 3-component vector of float)
0:113 'inF1' (temp 3-component vector of float)
0:113 'inF2' (temp 3-component vector of float)
0:113 'inI0' (temp 3-component vector of int)
0:? Sequence
0:116 Constant:
0:116 0.000000
0:117 Constant:
0:117 0.000000
0:118 Constant:
0:118 0.000000
0:119 Constant:
0:119 0.000000
0:120 Constant:
0:120 0.000000
0:121 Constant:
0:121 0.000000
0:122 Constant:
0:122 0.000000
0:123 Constant:
0:123 0.000000
0:124 Constant:
0:124 0.000000
0:125 Constant:
0:125 0.000000
0:126 Constant:
0:126 0.000000
0:127 Constant:
0:127 0.000000
0:128 Constant:
0:128 0.000000
0:129 Constant:
0:129 0.000000
0:130 Constant:
0:130 0.000000
0:131 Constant:
0:131 0.000000
0:132 Constant:
0:132 0.000000
0:133 Constant:
0:133 0.000000
0:134 Constant:
0:134 0.000000
0:135 Constant:
0:135 0.000000
0:136 Constant:
0:136 0.000000
0:137 Constant:
0:137 0.000000
0:138 Constant:
0:138 0.000000
0:139 Constant:
0:139 0.000000
0:140 Constant:
0:140 0.000000
0:141 Constant:
0:141 0.000000
0:142 Constant:
0:142 0.000000
0:143 Constant:
0:143 0.000000
0:144 Constant:
0:144 0.000000
0:145 Constant:
0:145 0.000000
0:146 Constant:
0:146 0.000000
0:147 Constant:
0:147 0.000000
0:148 Constant:
0:148 0.000000
0:149 Constant:
0:149 0.000000
0:150 Constant:
0:150 0.000000
0:154 Branch: Return with expression
0:? Constant:
0:? 1.000000
0:? 2.000000
0:? 3.000000
0:202 Function Definition: ComputeShaderFunction(vf4;vf4;vf4;vi4; (temp 4-component vector of float)
0:158 Function Parameters:
0:158 'inF0' (temp 4-component vector of float)
0:158 'inF1' (temp 4-component vector of float)
0:158 'inF2' (temp 4-component vector of float)
0:158 'inI0' (temp 4-component vector of int)
0:? Sequence
0:161 Constant:
0:161 0.000000
0:162 Constant:
0:162 0.000000
0:163 Constant:
0:163 0.000000
0:164 Constant:
0:164 0.000000
0:165 Constant:
0:165 0.000000
0:166 Constant:
0:166 0.000000
0:167 Constant:
0:167 0.000000
0:168 Constant:
0:168 0.000000
0:169 Constant:
0:169 0.000000
0:170 Constant:
0:170 0.000000
0:171 Constant:
0:171 0.000000
0:172 Constant:
0:172 0.000000
0:173 Constant:
0:173 0.000000
0:174 Constant:
0:174 0.000000
0:175 Constant:
0:175 0.000000
0:176 Constant:
0:176 0.000000
0:177 Constant:
0:177 0.000000
0:178 Constant:
0:178 0.000000
0:179 Constant:
0:179 0.000000
0:180 Constant:
0:180 0.000000
0:181 Constant:
0:181 0.000000
0:182 Constant:
0:182 0.000000
0:183 Constant:
0:183 0.000000
0:184 Constant:
0:184 0.000000
0:185 Constant:
0:185 0.000000
0:186 Constant:
0:186 0.000000
0:187 Constant:
0:187 0.000000
0:188 Constant:
0:188 0.000000
0:189 Constant:
0:189 0.000000
0:190 Constant:
0:190 0.000000
0:191 Constant:
0:191 0.000000
0:192 Constant:
0:192 0.000000
0:193 Constant:
0:193 0.000000
0:194 Constant:
0:194 0.000000
0:195 Constant:
0:195 0.000000
0:199 Branch: Return with expression
0:? Constant:
0:? 1.000000
0:? 2.000000
0:? 3.000000
0:? 4.000000
0:? Linker Objects
Linked compute stage:
Shader version: 450
local_size = (1, 1, 1)
ERROR: node is still EOpNull!
0:56 Function Definition: ComputeShaderFunction(f1;f1;f1;i1; (temp float)
0:2 Function Parameters:
0:2 'inF0' (temp float)
0:2 'inF1' (temp float)
0:2 'inF2' (temp float)
0:2 'inI0' (temp int)
0:? Sequence
0:7 Constant:
0:7 0.000000
0:8 Constant:
0:8 0.000000
0:9 Constant:
0:9 0.000000
0:10 Constant:
0:10 0.000000
0:11 Constant:
0:11 0.000000
0:12 Constant:
0:12 0.000000
0:13 Constant:
0:13 0.000000
0:14 Constant:
0:14 0.000000
0:15 Constant:
0:15 0.000000
0:16 Constant:
0:16 0.000000
0:17 Constant:
0:17 0.000000
0:18 Constant:
0:18 0.000000
0:19 Constant:
0:19 0.000000
0:20 Constant:
0:20 0.000000
0:21 Constant:
0:21 0.000000
0:22 Constant:
0:22 0.000000
0:23 Constant:
0:23 0.000000
0:24 Constant:
0:24 0.000000
0:25 Constant:
0:25 0.000000
0:26 Constant:
0:26 0.000000
0:27 Constant:
0:27 0.000000
0:28 Constant:
0:28 0.000000
0:29 Constant:
0:29 0.000000
0:30 Constant:
0:30 0.000000
0:31 Constant:
0:31 0.000000
0:32 Constant:
0:32 0.000000
0:33 Constant:
0:33 0.000000
0:34 Constant:
0:34 0.000000
0:35 Constant:
0:35 0.000000
0:36 Constant:
0:36 0.000000
0:37 Constant:
0:37 0.000000
0:38 Constant:
0:38 0.000000
0:39 Constant:
0:39 0.000000
0:40 Constant:
0:40 0.000000
0:41 Constant:
0:41 0.000000
0:42 Constant:
0:42 0.000000
0:43 Constant:
0:43 0.000000
0:44 Constant:
0:44 0.000000
0:45 Constant:
0:45 0.000000
0:46 Constant:
0:46 0.000000
0:47 Constant:
0:47 0.000000
0:48 Constant:
0:48 0.000000
0:49 Constant:
0:49 0.000000
0:53 Branch: Return with expression
0:53 Constant:
0:53 0.000000
0:65 Function Definition: ComputeShaderFunction(vf1;vf1;vf1;vi1; (temp 1-component vector of float)
0:57 Function Parameters:
0:57 'inF0' (temp 1-component vector of float)
0:57 'inF1' (temp 1-component vector of float)
0:57 'inF2' (temp 1-component vector of float)
0:57 'inI0' (temp 1-component vector of int)
0:? Sequence
0:60 Constant:
0:60 0.000000
0:62 Branch: Return with expression
0:62 Constant:
0:62 0.000000
0:112 Function Definition: ComputeShaderFunction(vf2;vf2;vf2;vi2; (temp 2-component vector of float)
0:66 Function Parameters:
0:66 'inF0' (temp 2-component vector of float)
0:66 'inF1' (temp 2-component vector of float)
0:66 'inF2' (temp 2-component vector of float)
0:66 'inI0' (temp 2-component vector of int)
0:? Sequence
0:69 Constant:
0:69 0.000000
0:70 Constant:
0:70 0.000000
0:71 Constant:
0:71 0.000000
0:72 Constant:
0:72 0.000000
0:73 Constant:
0:73 0.000000
0:74 Constant:
0:74 0.000000
0:75 Constant:
0:75 0.000000
0:76 Constant:
0:76 0.000000
0:77 Constant:
0:77 0.000000
0:78 Constant:
0:78 0.000000
0:79 Constant:
0:79 0.000000
0:80 Constant:
0:80 0.000000
0:81 Constant:
0:81 0.000000
0:82 Constant:
0:82 0.000000
0:83 Constant:
0:83 0.000000
0:84 Constant:
0:84 0.000000
0:85 Constant:
0:85 0.000000
0:86 Constant:
0:86 0.000000
0:87 Constant:
0:87 0.000000
0:88 Constant:
0:88 0.000000
0:89 Constant:
0:89 0.000000
0:90 Constant:
0:90 0.000000
0:91 Constant:
0:91 0.000000
0:92 Constant:
0:92 0.000000
0:93 Constant:
0:93 0.000000
0:94 Constant:
0:94 0.000000
0:95 Constant:
0:95 0.000000
0:96 Constant:
0:96 0.000000
0:97 Constant:
0:97 0.000000
0:98 Constant:
0:98 0.000000
0:99 Constant:
0:99 0.000000
0:100 Constant:
0:100 0.000000
0:101 Constant:
0:101 0.000000
0:102 Constant:
0:102 0.000000
0:103 Constant:
0:103 0.000000
0:104 Constant:
0:104 0.000000
0:105 Constant:
0:105 0.000000
0:109 Branch: Return with expression
0:? Constant:
0:? 1.000000
0:? 2.000000
0:157 Function Definition: ComputeShaderFunction(vf3;vf3;vf3;vi3; (temp 3-component vector of float)
0:113 Function Parameters:
0:113 'inF0' (temp 3-component vector of float)
0:113 'inF1' (temp 3-component vector of float)
0:113 'inF2' (temp 3-component vector of float)
0:113 'inI0' (temp 3-component vector of int)
0:? Sequence
0:116 Constant:
0:116 0.000000
0:117 Constant:
0:117 0.000000
0:118 Constant:
0:118 0.000000
0:119 Constant:
0:119 0.000000
0:120 Constant:
0:120 0.000000
0:121 Constant:
0:121 0.000000
0:122 Constant:
0:122 0.000000
0:123 Constant:
0:123 0.000000
0:124 Constant:
0:124 0.000000
0:125 Constant:
0:125 0.000000
0:126 Constant:
0:126 0.000000
0:127 Constant:
0:127 0.000000
0:128 Constant:
0:128 0.000000
0:129 Constant:
0:129 0.000000
0:130 Constant:
0:130 0.000000
0:131 Constant:
0:131 0.000000
0:132 Constant:
0:132 0.000000
0:133 Constant:
0:133 0.000000
0:134 Constant:
0:134 0.000000
0:135 Constant:
0:135 0.000000
0:136 Constant:
0:136 0.000000
0:137 Constant:
0:137 0.000000
0:138 Constant:
0:138 0.000000
0:139 Constant:
0:139 0.000000
0:140 Constant:
0:140 0.000000
0:141 Constant:
0:141 0.000000
0:142 Constant:
0:142 0.000000
0:143 Constant:
0:143 0.000000
0:144 Constant:
0:144 0.000000
0:145 Constant:
0:145 0.000000
0:146 Constant:
0:146 0.000000
0:147 Constant:
0:147 0.000000
0:148 Constant:
0:148 0.000000
0:149 Constant:
0:149 0.000000
0:150 Constant:
0:150 0.000000
0:154 Branch: Return with expression
0:? Constant:
0:? 1.000000
0:? 2.000000
0:? 3.000000
0:202 Function Definition: ComputeShaderFunction(vf4;vf4;vf4;vi4; (temp 4-component vector of float)
0:158 Function Parameters:
0:158 'inF0' (temp 4-component vector of float)
0:158 'inF1' (temp 4-component vector of float)
0:158 'inF2' (temp 4-component vector of float)
0:158 'inI0' (temp 4-component vector of int)
0:? Sequence
0:161 Constant:
0:161 0.000000
0:162 Constant:
0:162 0.000000
0:163 Constant:
0:163 0.000000
0:164 Constant:
0:164 0.000000
0:165 Constant:
0:165 0.000000
0:166 Constant:
0:166 0.000000
0:167 Constant:
0:167 0.000000
0:168 Constant:
0:168 0.000000
0:169 Constant:
0:169 0.000000
0:170 Constant:
0:170 0.000000
0:171 Constant:
0:171 0.000000
0:172 Constant:
0:172 0.000000
0:173 Constant:
0:173 0.000000
0:174 Constant:
0:174 0.000000
0:175 Constant:
0:175 0.000000
0:176 Constant:
0:176 0.000000
0:177 Constant:
0:177 0.000000
0:178 Constant:
0:178 0.000000
0:179 Constant:
0:179 0.000000
0:180 Constant:
0:180 0.000000
0:181 Constant:
0:181 0.000000
0:182 Constant:
0:182 0.000000
0:183 Constant:
0:183 0.000000
0:184 Constant:
0:184 0.000000
0:185 Constant:
0:185 0.000000
0:186 Constant:
0:186 0.000000
0:187 Constant:
0:187 0.000000
0:188 Constant:
0:188 0.000000
0:189 Constant:
0:189 0.000000
0:190 Constant:
0:190 0.000000
0:191 Constant:
0:191 0.000000
0:192 Constant:
0:192 0.000000
0:193 Constant:
0:193 0.000000
0:194 Constant:
0:194 0.000000
0:195 Constant:
0:195 0.000000
0:199 Branch: Return with expression
0:? Constant:
0:? 1.000000
0:? 2.000000
0:? 3.000000
0:? 4.000000
0:? Linker Objects
SPIR-V is not generated for failed compile or link

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

129
Test/hlsl.intrinsics.comp Normal file
View File

@ -0,0 +1,129 @@
#define gs // TODO: define as groupshared when available in the grammar
gs uint gs_ua;
gs uint gs_ub;
gs uint gs_uc;
gs uint2 gs_ua2;
gs uint2 gs_ub2;
gs uint2 gs_uc2;
gs uint3 gs_ua3;
gs uint3 gs_ub3;
gs uint3 gs_uc3;
gs uint4 gs_ua4;
gs uint4 gs_ub4;
gs uint4 gs_uc4;
float ComputeShaderFunction(float inF0, float inF1, float inF2, uint inU0, uint inU1)
{
uint out_u1;
// Don't repeat all the pixel/vertex fns - just one for sanity.
all(inF0);
// Test atomics
InterlockedAdd(gs_ua, gs_ub);
InterlockedAdd(gs_ua, gs_ub, out_u1);
InterlockedAnd(gs_ua, gs_ub);
InterlockedAnd(gs_ua, gs_ub, out_u1);
InterlockedCompareExchange(gs_ua, gs_ub, gs_uc, out_u1);
InterlockedExchange(gs_ua, gs_ub, out_u1);
InterlockedMax(gs_ua, gs_ub);
InterlockedMax(gs_ua, gs_ub, out_u1);
InterlockedMin(gs_ua, gs_ub);
InterlockedMin(gs_ua, gs_ub, out_u1);
InterlockedOr(gs_ua, gs_ub);
InterlockedOr(gs_ua, gs_ub, out_u1);
InterlockedXor(gs_ua, gs_ub);
InterlockedXor(gs_ua, gs_ub, out_u1);
// CheckAccessFullyMapped(3); // TODO: ...
return 0.0;
}
float1 ComputeShaderFunction(float1 inF0, float1 inF1, float1 inF2)
{
// TODO: ... add when float1 prototypes are generated
return 0.0;
}
float2 ComputeShaderFunction(float2 inF0, float2 inF1, float2 inF2, uint2 inU0, uint2 inU1)
{
uint2 out_u2;
// Don't repeat all the pixel/vertex fns - just one for sanity.
all(inF0);
// Test atomics
InterlockedAdd(gs_ua2, gs_ub2);
InterlockedAdd(gs_ua2, gs_ub2, out_u2);
InterlockedAnd(gs_ua2, gs_ub2);
InterlockedAnd(gs_ua2, gs_ub2, out_u2);
InterlockedCompareExchange(gs_ua2, gs_ub2, gs_uc2, out_u2);
InterlockedExchange(gs_ua2, gs_ub2, out_u2);
InterlockedMax(gs_ua2, gs_ub2);
InterlockedMax(gs_ua2, gs_ub2, out_u2);
InterlockedMin(gs_ua2, gs_ub2);
InterlockedMin(gs_ua2, gs_ub2, out_u2);
InterlockedOr(gs_ua2, gs_ub2);
InterlockedOr(gs_ua2, gs_ub2, out_u2);
InterlockedXor(gs_ua2, gs_ub2);
InterlockedXor(gs_ua2, gs_ub2, out_u2);
// TODO: ... add when float1 prototypes are generated
return float2(1,2);
}
float3 ComputeShaderFunction(float3 inF0, float3 inF1, float3 inF2, uint3 inU0, uint3 inU1)
{
uint3 out_u3;
// Don't repeat all the pixel/vertex fns - just one for sanity.
all(inF0);
// Test atomics
InterlockedAdd(gs_ua3, gs_ub3);
InterlockedAdd(gs_ua3, gs_ub3, out_u3);
InterlockedAnd(gs_ua3, gs_ub3);
InterlockedAnd(gs_ua3, gs_ub3, out_u3);
InterlockedCompareExchange(gs_ua3, gs_ub3, gs_uc3, out_u3);
InterlockedExchange(gs_ua3, gs_ub3, out_u3);
InterlockedMax(gs_ua3, gs_ub3);
InterlockedMax(gs_ua3, gs_ub3, out_u3);
InterlockedMin(gs_ua3, gs_ub3);
InterlockedMin(gs_ua3, gs_ub3, out_u3);
InterlockedOr(gs_ua3, gs_ub3);
InterlockedOr(gs_ua3, gs_ub3, out_u3);
InterlockedXor(gs_ua3, gs_ub3);
InterlockedXor(gs_ua3, gs_ub3, out_u3);
// TODO: ... add when float1 prototypes are generated
return float3(1,2,3);
}
float4 ComputeShaderFunction(float4 inF0, float4 inF1, float4 inF2, uint4 inU0, uint4 inU1)
{
uint4 out_u4;
// Don't repeat all the pixel/vertex fns - just one for sanity.
all(inF0);
// Test atomics
InterlockedAdd(gs_ua4, gs_ub4);
InterlockedAdd(gs_ua4, gs_ub4, out_u4);
InterlockedAnd(gs_ua4, gs_ub4);
InterlockedAnd(gs_ua4, gs_ub4, out_u4);
InterlockedCompareExchange(gs_ua4, gs_ub4, gs_uc4, out_u4);
InterlockedExchange(gs_ua4, gs_ub4, out_u4);
InterlockedMax(gs_ua4, gs_ub4);
InterlockedMax(gs_ua4, gs_ub4, out_u4);
InterlockedMin(gs_ua4, gs_ub4);
InterlockedMin(gs_ua4, gs_ub4, out_u4);
InterlockedOr(gs_ua4, gs_ub4);
InterlockedOr(gs_ua4, gs_ub4, out_u4);
InterlockedXor(gs_ua4, gs_ub4);
InterlockedXor(gs_ua4, gs_ub4, out_u4);
// TODO: ... add when float1 prototypes are generated
return float4(1,2,3,4);
}

View File

@ -1,10 +1,31 @@
float PixelShaderFunction(float inF0, float inF1, float inF2)
#define gs // TODO: define as groupshared when available in the grammar
gs uint gs_ua;
gs uint gs_ub;
gs uint gs_uc;
gs uint2 gs_ua2;
gs uint2 gs_ub2;
gs uint2 gs_uc2;
gs uint3 gs_ua3;
gs uint3 gs_ub3;
gs uint3 gs_uc3;
gs uint4 gs_ua4;
gs uint4 gs_ub4;
gs uint4 gs_uc4;
float PixelShaderFunction(float inF0, float inF1, float inF2, uint inU0, uint inU1)
{
uint out_u1;
all(inF0);
abs(inF0);
acos(inF0);
any(inF0);
asin(inF0);
asint(inF0);
asuint(inF0);
asfloat(inU0);
// asdouble(inU0, inU1); // TODO: enable when HLSL parser used for intrinsics
atan(inF0);
atan2(inF0, inF1);
ceil(inF0);
@ -69,13 +90,19 @@ float1 PixelShaderFunction(float1 inF0, float1 inF1, float1 inF2)
return 0.0;
}
float2 PixelShaderFunction(float2 inF0, float2 inF1, float2 inF2)
float2 PixelShaderFunction(float2 inF0, float2 inF1, float2 inF2, uint2 inU0, uint2 inU1)
{
uint2 out_u2;
all(inF0);
abs(inF0);
acos(inF0);
any(inF0);
asin(inF0);
asint(inF0);
asuint(inF0);
asfloat(inU0);
// asdouble(inU0, inU1); // TODO: enable when HLSL parser used for intrinsics
atan(inF0);
atan2(inF0, inF1);
ceil(inF0);
@ -142,13 +169,19 @@ float2 PixelShaderFunction(float2 inF0, float2 inF1, float2 inF2)
return float2(1,2);
}
float3 PixelShaderFunction(float3 inF0, float3 inF1, float3 inF2)
float3 PixelShaderFunction(float3 inF0, float3 inF1, float3 inF2, uint3 inU0, uint3 inU1)
{
uint3 out_u3;
all(inF0);
abs(inF0);
acos(inF0);
any(inF0);
asin(inF0);
asint(inF0);
asuint(inF0);
asfloat(inU0);
// asdouble(inU0, inU1); // TODO: enable when HLSL parser used for intrinsics
atan(inF0);
atan2(inF0, inF1);
ceil(inF0);
@ -216,13 +249,19 @@ float3 PixelShaderFunction(float3 inF0, float3 inF1, float3 inF2)
return float3(1,2,3);
}
float4 PixelShaderFunction(float4 inF0, float4 inF1, float4 inF2)
float4 PixelShaderFunction(float4 inF0, float4 inF1, float4 inF2, uint4 inU0, uint4 inU1)
{
uint4 out_u4;
all(inF0);
abs(inF0);
acos(inF0);
any(inF0);
asin(inF0);
asint(inF0);
asuint(inF0);
asfloat(inU0);
// asdouble(inU0, inU1); // TODO: enable when HLSL parser used for intrinsics
atan(inF0);
atan2(inF0, inF1);
ceil(inF0);
@ -290,6 +329,11 @@ float4 PixelShaderFunction(float4 inF0, float4 inF1, float4 inF2)
return float4(1,2,3,4);
}
// TODO: for mats:
// asfloat(inU0); \
// asint(inF0); \
// asuint(inF0); \
// TODO: FXC doesn't accept this with (), but glslang doesn't accept it without.
#define MATFNS() \
all(inF0); \

View File

@ -0,0 +1,201 @@
float ComputeShaderFunction(float inF0, float inF1, float inF2, int inI0)
{
uint out_u1;
// AllMemoryBarrier(); // invalid in fragment stage TODO: parser currently crashes on empty arg list
// AllMemoryBarrierWithGroupSync(); // invalid in fragment stage TODO: parser currently crashes on empty arg list
asdouble(inF0, inF1); // expected error: only integer inputs
CheckAccessFullyMapped(3.0); // expected error: only valid on integers
clip(inF0); // expected error: only valid in pixel stage
countbits(inF0); // expected error: only integer inputs
cross(inF0, inF1); // expected error: only on float3 inputs
D3DCOLORtoUBYTE4(inF0); // expected error: only on float4 inputs
ddx(inF0); // expected error: only valid in pixel stage
ddx_coarse(inF0); // expected error: only valid in pixel stage
ddx_fine(inF0); // expected error: only valid in pixel stage
ddy(inF0); // expected error: only valid in pixel stage
ddy_coarse(inF0); // expected error: only valid in pixel stage
ddy_fine(inF0); // expected error: only valid in pixel stage
determinant(inF0); // expected error: only valid on mats
EvaluateAttributeAtCentroid(inF0); // expected error: only valid in pixel stage
EvaluateAttributeAtSample(inF0, 2); // expected error: only valid in pixel stage
EvaluateAttributeSnapped(inF0, int2(2)); // expected error: only valid in pixel stage
f16tof32(inF0); // expected error: only integer inputs
firstbithigh(inF0); // expected error: only integer inputs
firstbitlow(inF0); // expected error: only integer inputs
fma(inF0, inF1, inF2); // expected error: only double inputs
fwidth(inF0); // expected error: only valid in pixel stage
InterlockedAdd(gs_ua, gs_ub); // expected error: only valid in pixel stage
InterlockedAdd(gs_ua, gs_ub, out_u1); // expected error: only valid in pixel stage
InterlockedAnd(gs_ua, gs_ub); // expected error: only valid in pixel stage
InterlockedAnd(gs_ua, gs_ub, out_u1); // expected error: only valid in pixel stage
InterlockedCompareExchange(gs_ua, gs_ub, gs_uc, out_u1); // expected error: only valid in pixel stage
InterlockedExchange(gs_ua, gs_ub, out_u1);// expected error: only valid in pixel stage
InterlockedMax(gs_ua, gs_ub); // expected error: only valid in pixel stage
InterlockedMax(gs_ua, gs_ub, out_u1); // expected error: only valid in pixel stage
InterlockedMin(gs_ua, gs_ub); // expected error: only valid in pixel stage
InterlockedMin(gs_ua, gs_ub, out_u1); // expected error: only valid in pixel stage
InterlockedOr(gs_ua, gs_ub); // expected error: only valid in pixel stage
InterlockedOr(gs_ua, gs_ub, out_u1); // expected error: only valid in pixel stage
InterlockedXor(gs_ua, gs_ub); // expected error: only valid in pixel stage
InterlockedXor(gs_ua, gs_ub, out_u1); // expected error: only valid in pixel stage
length(inF0); // expect error: invalid on scalars
msad4(inF0, float2(0), float4(0)); // expected error: only integer inputs
normalize(inF0); // expect error: invalid on scalars
reflect(inF0, inF1); // expect error: invalid on scalars
refract(inF0, inF1, inF2); // expect error: invalid on scalars
refract(float2(0), float2(0), float2(0)); // expected error: last parameter only scalar
reversebits(inF0); // expected error: only integer inputs
transpose(inF0); // expect error: only valid on mats
// TODO: texture intrinsics, when we can declare samplers.
return 0.0;
}
float1 ComputeShaderFunction(float1 inF0, float1 inF1, float1 inF2, int1 inI0)
{
// TODO: ... add when float1 prototypes are generated
GetRenderTargetSamplePosition(inF0); // expected error: only integer inputs
return 0.0;
}
float2 ComputeShaderFunction(float2 inF0, float2 inF1, float2 inF2, int2 inI0)
{
uint2 out_u2;
asdouble(inF0, inF1); // expected error: only integer inputs
CheckAccessFullyMapped(inF0); // expect error: only valid on scalars
countbits(inF0); // expected error: only integer inputs
cross(inF0, inF1); // expected error: only on float3 inputs
D3DCOLORtoUBYTE4(inF0); // expected error: only on float4 inputs
ddx(inF0); // only valid in pixel stage
ddx_coarse(inF0); // only valid in pixel stage
ddx_fine(inF0); // only valid in pixel stage
ddy(inF0); // only valid in pixel stage
ddy_coarse(inF0); // only valid in pixel stage
ddy_fine(inF0); // only valid in pixel stage
determinant(inF0); // expect error: only valid on mats
EvaluateAttributeAtCentroid(inF0); // expected error: only valid in pixel stage
EvaluateAttributeAtSample(inF0, 2); // expected error: only valid in pixel stage
EvaluateAttributeSnapped(inF0, int2(2)); // expected error: only valid in pixel stage
f16tof32(inF0); // expected error: only integer inputs
firstbithigh(inF0); // expected error: only integer inputs
firstbitlow(inF0); // expected error: only integer inputs
fma(inF0, inF1, inF2); // expected error: only double inputs
fwidth(inF0); // expected error: only valid in pixel stage
InterlockedAdd(gs_ua2, gs_ub2); // expected error: only valid in pixel stage
InterlockedAdd(gs_ua2, gs_ub2, out_u2); // expected error: only valid in pixel stage
InterlockedAnd(gs_ua2, gs_ub2); // expected error: only valid in pixel stage
InterlockedAnd(gs_ua2, gs_ub2, out_u2); // expected error: only valid in pixel stage
InterlockedCompareExchange(gs_ua2, gs_ub2, gs_uc2, out_u2); // expected error: only valid in pixel stage
InterlockedExchange(gs_ua2, gs_ub2, out_u2);// expected error: only valid in pixel stage
InterlockedMax(gs_ua2, gs_ub2); // expected error: only valid in pixel stage
InterlockedMax(gs_ua2, gs_ub2, out_u2); // expected error: only valid in pixel stage
InterlockedMin(gs_ua2, gs_ub2); // expected error: only valid in pixel stage
InterlockedMin(gs_ua2, gs_ub2, out_u2); // expected error: only valid in pixel stage
InterlockedOr(gs_ua2, gs_ub2); // expected error: only valid in pixel stage
InterlockedOr(gs_ua2, gs_ub2, out_u2); // expected error: only valid in pixel stage
InterlockedXor(gs_ua2, gs_ub2); // expected error: only valid in pixel stage
InterlockedXor(gs_ua2, gs_ub2, out_u2); // expected error: only valid in pixel stage
noise(inF0); // expected error: only valid in pixel stage
reversebits(inF0); // expected error: only integer inputs
transpose(inF0); // expect error: only valid on mats
// TODO: texture intrinsics, when we can declare samplers.
return float2(1,2);
}
float3 ComputeShaderFunction(float3 inF0, float3 inF1, float3 inF2, int3 inI0)
{
uint3 out_u3;
CheckAccessFullyMapped(inF0); // expect error: only valid on scalars
countbits(inF0); // expected error: only integer inputs
ddx(inF0); // only valid in pixel stage
ddx_coarse(inF0); // only valid in pixel stage
ddx_fine(inF0); // only valid in pixel stage
ddy(inF0); // only valid in pixel stage
ddy_coarse(inF0); // only valid in pixel stage
ddy_fine(inF0); // only valid in pixel stage
D3DCOLORtoUBYTE4(inF0); // expected error: only on float4 inputs
determinant(inF0); // expect error: only valid on mats
EvaluateAttributeAtCentroid(inF0); // expected error: only valid in pixel stage
EvaluateAttributeAtSample(inF0, 2); // expected error: only valid in pixel stage
EvaluateAttributeSnapped(inF0, int2(2)); // expected error: only valid in pixel stage
f16tof32(inF0); // expected error: only integer inputs
firstbithigh(inF0); // expected error: only integer inputs
firstbitlow(inF0); // expected error: only integer inputs
fma(inF0, inF1, inF2); // expected error: only double inputs
fwidth(inF0); // expected error: only valid in pixel stage
InterlockedAdd(gs_ua3, gs_ub3); // expected error: only valid in pixel stage
InterlockedAdd(gs_ua3, gs_ub3, out_u3); // expected error: only valid in pixel stage
InterlockedAnd(gs_ua3, gs_ub3); // expected error: only valid in pixel stage
InterlockedAnd(gs_ua3, gs_ub3, out_u3); // expected error: only valid in pixel stage
InterlockedCompareExchange(gs_ua3, gs_ub3, gs_uc3, out_u3); // expected error: only valid in pixel stage
InterlockedExchange(gs_ua3, gs_ub3, out_u3); // expected error: only valid in pixel stage
InterlockedMax(gs_ua3, gs_ub3); // expected error: only valid in pixel stage
InterlockedMax(gs_ua3, gs_ub3, out_u3); // expected error: only valid in pixel stage
InterlockedMin(gs_ua3, gs_ub3); // expected error: only valid in pixel stage
InterlockedMin(gs_ua3, gs_ub3, out_u3); // expected error: only valid in pixel stage
InterlockedOr(gs_ua3, gs_ub3); // expected error: only valid in pixel stage
InterlockedOr(gs_ua3, gs_ub3, out_u3); // expected error: only valid in pixel stage
InterlockedXor(gs_ua3, gs_ub3); // expected error: only valid in pixel stage
InterlockedXor(gs_ua3, gs_ub3, out_u3); // expected error: only valid in pixel stage
noise(inF0); // expected error: only valid in pixel stage
reversebits(inF0); // expected error: only integer inputs
transpose(inF0); // expect error: only valid on mats
// TODO: texture intrinsics, when we can declare samplers.
return float3(1,2,3);
}
float4 ComputeShaderFunction(float4 inF0, float4 inF1, float4 inF2, int4 inI0)
{
uint4 out_u4;
CheckAccessFullyMapped(inF0); // expect error: only valid on scalars
countbits(inF0); // expected error: only integer inputs
cross(inF0, inF1); // expected error: only on float3 inputs
determinant(inF0); // expect error: only valid on mats
ddx(inF0); // only valid in pixel stage
ddx_coarse(inF0); // only valid in pixel stage
ddx_fine(inF0); // only valid in pixel stage
ddy(inF0); // only valid in pixel stage
ddy_coarse(inF0); // only valid in pixel stage
ddy_fine(inF0); // only valid in pixel stage
EvaluateAttributeAtCentroid(inF0); // expected error: only valid in pixel stage
EvaluateAttributeAtSample(inF0, 2); // expected error: only valid in pixel stage
EvaluateAttributeSnapped(inF0, int2(2)); // expected error: only valid in pixel stage
f16tof32(inF0); // expected error: only integer inputs
firstbithigh(inF0); // expected error: only integer inputs
firstbitlow(inF0); // expected error: only integer inputs
fma(inF0, inF1, inF2); // expected error: only double inputs
fwidth(inF0); // expected error: only valid in pixel stage
InterlockedAdd(gs_ua4, gs_ub4); // expected error: only valid in pixel stage
InterlockedAdd(gs_ua4, gs_ub4, out_u4); // expected error: only valid in pixel stage
InterlockedAnd(gs_ua4, gs_ub4); // expected error: only valid in pixel stage
InterlockedAnd(gs_ua4, gs_ub4, out_u4); // expected error: only valid in pixel stage
InterlockedCompareExchange(gs_ua4, gs_ub4, gs_uc4, out_u4); // expected error: only valid in pixel stage
InterlockedExchange(gs_ua4, gs_ub4, out_u4); // expected error: only valid in pixel stage
InterlockedMax(gs_ua4, gs_ub4); // expected error: only valid in pixel stage
InterlockedMax(gs_ua4, gs_ub4, out_u4); // expected error: only valid in pixel stage
InterlockedMin(gs_ua4, gs_ub4); // expected error: only valid in pixel stage
InterlockedMin(gs_ua4, gs_ub4, out_u4); // expected error: only valid in pixel stage
InterlockedOr(gs_ua4, gs_ub4); // expected error: only valid in pixel stage
InterlockedOr(gs_ua4, gs_ub4, out_u4); // expected error: only valid in pixel stage
InterlockedXor(gs_ua4, gs_ub4); // expected error: only valid in pixel stage
InterlockedXor(gs_ua4, gs_ub4, out_u4); // expected error: only valid in pixel stage
noise(inF0); // expected error: only valid in pixel stage
reversebits(inF0); // expected error: only integer inputs
transpose(inF0); // expect error: only valid on mats
// TODO: texture intrinsics, when we can declare samplers.
return float4(1,2,3,4);
}

View File

@ -78,16 +78,16 @@ float3 PixelShaderFunction(float3 inF0, float3 inF1, float3 inF2, int3 inI0)
float4 PixelShaderFunction(float4 inF0, float4 inF1, float4 inF2, int4 inI0)
{
CheckAccessFullyMapped(inF0); // expected error: only valid on scalars
countbits(inF0); // expected error: only integer inputs
cross(inF0, inF1); // expected error: only on float3 inputs
determinant(inF0); // expected error: only valid on mats
f16tof32(inF0); // expected error: only integer inputs
firstbithigh(inF0); // expected error: only integer inputs
firstbitlow(inF0); // expected error: only integer inputs
fma(inF0, inF1, inF2); // expected error: only double inputs
reversebits(inF0); // expected error: only integer inputs
transpose(inF0); // expected error: only valid on mats
CheckAccessFullyMapped(inF0); // expected error: only valid on scalars
countbits(inF0); // expected error: only integer inputs
cross(inF0, inF1); // expected error: only on float3 inputs
determinant(inF0); // expected error: only valid on mats
f16tof32(inF0); // expected error: only integer inputs
firstbithigh(inF0); // expected error: only integer inputs
firstbitlow(inF0); // expected error: only integer inputs
fma(inF0, inF1, inF2); // expected error: only double inputs
reversebits(inF0); // expected error: only integer inputs
transpose(inF0); // expected error: only valid on mats
return float4(1,2,3,4);
}

View File

@ -1,22 +1,37 @@
uint gs_ua;
uint gs_ub;
uint gs_uc;
uint2 gs_ua2;
uint2 gs_ub2;
uint2 gs_uc2;
uint3 gs_ua3;
uint3 gs_ub3;
uint3 gs_uc3;
uint4 gs_ua4;
uint4 gs_ub4;
uint4 gs_uc4;
float VertexShaderFunction(float inF0, float inF1, float inF2, int inI0)
{
uint out_u1;
// AllMemoryBarrier(); // invalid in fragment stage TODO: parser currently crashes on empty arg list
// AllMemoryBarrierWithGroupSync(); // invalid in fragment stage TODO: parser currently crashes on empty arg list
asdouble(inF0, inF1); // expected error: only integer inputs
CheckAccessFullyMapped(3.0); // expected error: only valid on integers
CheckAccessFullyMapped(3); // expected error: only valid in pixel & compute stages
clip(inF0); // expected error: only valid in pixel & compute stages
clip(inF0); // expected error: only valid in pixel stage
countbits(inF0); // expected error: only integer inputs
cross(inF0, inF1); // expected error: only on float3 inputs
D3DCOLORtoUBYTE4(inF0); // expected error: only on float4 inputs
// DeviceMemoryBarrier(); // TODO: expected error: only valid in pixel & compute stages
// DeviceMemoryBarrierWithGroupSync(); // TODO: expected error: only valid in compute stage
ddx(inF0); // expected error: only valid in pixel & compute stages
ddx_coarse(inF0); // expected error: only valid in pixel & compute stages
ddx_fine(inF0); // expected error: only valid in pixel & compute stages
ddy(inF0); // expected error: only valid in pixel & compute stages
ddy_coarse(inF0); // expected error: only valid in pixel & compute stages
ddy_fine(inF0); // expected error: only valid in pixel & compute stages
ddx(inF0); // expected error: only valid in pixel stage
ddx_coarse(inF0); // expected error: only valid in pixel stage
ddx_fine(inF0); // expected error: only valid in pixel stage
ddy(inF0); // expected error: only valid in pixel stage
ddy_coarse(inF0); // expected error: only valid in pixel stage
ddy_fine(inF0); // expected error: only valid in pixel stage
determinant(inF0); // expected error: only valid on mats
EvaluateAttributeAtCentroid(inF0); // expected error: only valid in pixel stage
EvaluateAttributeAtSample(inF0, 2); // expected error: only valid in pixel stage
@ -25,11 +40,21 @@ float VertexShaderFunction(float inF0, float inF1, float inF2, int inI0)
firstbithigh(inF0); // expected error: only integer inputs
firstbitlow(inF0); // expected error: only integer inputs
fma(inF0, inF1, inF2); // expected error: only double inputs
// InterlockedAdd(inI0, inI0, 3); // expected error: last parameter is out TODO: accepted even though marked as out in proto generator
// InterlockedAnd(inI0, inI0, 3); // expected error: last parameter is out TODO: accepted even though marked as out i // InterlockedMax(inI0, inI0, 3); // expected error: last parameter is out TODO: accepted even though marked as out in proto generator
// InterlockedMin(inI0, inI0, 3); // expected error: last parameter is out TODO: accepted even though marked as out in proto generator
// InterlockedOor(inI0, inI0, 3); // expected error: last parameter is out TODO: accepted even though marked as out in proto generator
// InterlockedXor(inI0, inI0, 3); // expected error: last parameter is out TODO: accepted even though marked as out in proto generator
fwidth(inF0); // expected error: only valid in pixel stage
InterlockedAdd(gs_ua, gs_ub); // expected error: only valid in pixel stage
InterlockedAdd(gs_ua, gs_ub, out_u1); // expected error: only valid in pixel stage
InterlockedAnd(gs_ua, gs_ub); // expected error: only valid in pixel stage
InterlockedAnd(gs_ua, gs_ub, out_u1); // expected error: only valid in pixel stage
InterlockedCompareExchange(gs_ua, gs_ub, gs_uc, out_u1); // expected error: only valid in pixel stage
InterlockedExchange(gs_ua, gs_ub, out_u1);// expected error: only valid in pixel stage
InterlockedMax(gs_ua, gs_ub); // expected error: only valid in pixel stage
InterlockedMax(gs_ua, gs_ub, out_u1); // expected error: only valid in pixel stage
InterlockedMin(gs_ua, gs_ub); // expected error: only valid in pixel stage
InterlockedMin(gs_ua, gs_ub, out_u1); // expected error: only valid in pixel stage
InterlockedOr(gs_ua, gs_ub); // expected error: only valid in pixel stage
InterlockedOr(gs_ua, gs_ub, out_u1); // expected error: only valid in pixel stage
InterlockedXor(gs_ua, gs_ub); // expected error: only valid in pixel stage
InterlockedXor(gs_ua, gs_ub, out_u1); // expected error: only valid in pixel stage
// GroupMemoryBarrier(); // TODO: expected error: only valid in compute stage
// GroupMemoryBarrierWithGroupSync(); // TODO: expected error: only valid in compute stage
length(inF0); // expect error: invalid on scalars
@ -57,28 +82,45 @@ float1 VertexShaderFunction(float1 inF0, float1 inF1, float1 inF2, int1 inI0)
float2 VertexShaderFunction(float2 inF0, float2 inF1, float2 inF2, int2 inI0)
{
asdouble(inF0, inF1); // expected error: only integer inputs
CheckAccessFullyMapped(inF0); // expect error: only valid on scalars
countbits(inF0); // expected error: only integer inputs
cross(inF0, inF1); // expected error: only on float3 inputs
D3DCOLORtoUBYTE4(inF0); // expected error: only on float4 inputs
ddx(inF0); // only valid in pixel & compute stages
ddx_coarse(inF0); // only valid in pixel & compute stages
ddx_fine(inF0); // only valid in pixel & compute stages
ddy(inF0); // only valid in pixel & compute stages
ddy_coarse(inF0); // only valid in pixel & compute stages
ddy_fine(inF0); // only valid in pixel & compute stages
determinant(inF0); // expect error: only valid on mats
EvaluateAttributeAtCentroid(inF0); // expected error: only valid in pixel stage
EvaluateAttributeAtSample(inF0, 2); // expected error: only valid in pixel stage
EvaluateAttributeSnapped(inF0, int2(2)); // expected error: only valid in pixel stage
f16tof32(inF0); // expected error: only integer inputs
firstbithigh(inF0); // expected error: only integer inputs
firstbitlow(inF0); // expected error: only integer inputs
fma(inF0, inF1, inF2); // expected error: only double inputs
noise(inF0); // expected error: only valid in pixel stage
reversebits(inF0); // expected error: only integer inputs
transpose(inF0); // expect error: only valid on mats
uint2 out_u2;
asdouble(inF0, inF1); // expected error: only integer inputs
CheckAccessFullyMapped(inF0); // expect error: only valid on scalars
countbits(inF0); // expected error: only integer inputs
cross(inF0, inF1); // expected error: only on float3 inputs
D3DCOLORtoUBYTE4(inF0); // expected error: only on float4 inputs
ddx(inF0); // only valid in pixel stage
ddx_coarse(inF0); // only valid in pixel stage
ddx_fine(inF0); // only valid in pixel stage
ddy(inF0); // only valid in pixel stage
ddy_coarse(inF0); // only valid in pixel stage
ddy_fine(inF0); // only valid in pixel stage
determinant(inF0); // expect error: only valid on mats
EvaluateAttributeAtCentroid(inF0); // expected error: only valid in pixel stage
EvaluateAttributeAtSample(inF0, 2); // expected error: only valid in pixel stage
EvaluateAttributeSnapped(inF0, int2(2)); // expected error: only valid in pixel stage
f16tof32(inF0); // expected error: only integer inputs
firstbithigh(inF0); // expected error: only integer inputs
firstbitlow(inF0); // expected error: only integer inputs
fma(inF0, inF1, inF2); // expected error: only double inputs
fwidth(inF0); // expected error: only valid in pixel stage
InterlockedAdd(gs_ua2, gs_ub2); // expected error: only valid in pixel stage
InterlockedAdd(gs_ua2, gs_ub2, out_u2); // expected error: only valid in pixel stage
InterlockedAnd(gs_ua2, gs_ub2); // expected error: only valid in pixel stage
InterlockedAnd(gs_ua2, gs_ub2, out_u2); // expected error: only valid in pixel stage
InterlockedCompareExchange(gs_ua2, gs_ub2, gs_uc2, out_u2); // expected error: only valid in pixel stage
InterlockedExchange(gs_ua2, gs_ub2, out_u2); // expected error: only valid in pixel stage
InterlockedMax(gs_ua2, gs_ub2); // expected error: only valid in pixel stage
InterlockedMax(gs_ua2, gs_ub2, out_u2); // expected error: only valid in pixel stage
InterlockedMin(gs_ua2, gs_ub2); // expected error: only valid in pixel stage
InterlockedMin(gs_ua2, gs_ub2, out_u2); // expected error: only valid in pixel stage
InterlockedOr(gs_ua2, gs_ub2); // expected error: only valid in pixel stage
InterlockedOr(gs_ua2, gs_ub2, out_u2); // expected error: only valid in pixel stage
InterlockedXor(gs_ua2, gs_ub2); // expected error: only valid in pixel stage
InterlockedXor(gs_ua2, gs_ub2, out_u2); // expected error: only valid in pixel stage
noise(inF0); // expected error: only valid in pixel stage
reversebits(inF0); // expected error: only integer inputs
transpose(inF0); // expect error: only valid on mats
// TODO: texture intrinsics, when we can declare samplers.
@ -87,26 +129,43 @@ float2 VertexShaderFunction(float2 inF0, float2 inF1, float2 inF2, int2 inI0)
float3 VertexShaderFunction(float3 inF0, float3 inF1, float3 inF2, int3 inI0)
{
CheckAccessFullyMapped(inF0); // expect error: only valid on scalars
countbits(inF0); // expected error: only integer inputs
ddx(inF0); // only valid in pixel & compute stages
ddx_coarse(inF0); // only valid in pixel & compute stages
ddx_fine(inF0); // only valid in pixel & compute stages
ddy(inF0); // only valid in pixel & compute stages
ddy_coarse(inF0); // only valid in pixel & compute stages
ddy_fine(inF0); // only valid in pixel & compute stages
D3DCOLORtoUBYTE4(inF0); // expected error: only on float4 inputs
determinant(inF0); // expect error: only valid on mats
EvaluateAttributeAtCentroid(inF0); // expected error: only valid in pixel stage
EvaluateAttributeAtSample(inF0, 2); // expected error: only valid in pixel stage
EvaluateAttributeSnapped(inF0, int2(2)); // expected error: only valid in pixel stage
f16tof32(inF0); // expected error: only integer inputs
firstbithigh(inF0); // expected error: only integer inputs
firstbitlow(inF0); // expected error: only integer inputs
fma(inF0, inF1, inF2); // expected error: only double inputs
noise(inF0); // expected error: only valid in pixel stage
reversebits(inF0); // expected error: only integer inputs
transpose(inF0); // expect error: only valid on mats
uint3 out_u3;
CheckAccessFullyMapped(inF0); // expect error: only valid on scalars
countbits(inF0); // expected error: only integer inputs
ddx(inF0); // only valid in pixel stage
ddx_coarse(inF0); // only valid in pixel stage
ddx_fine(inF0); // only valid in pixel stage
ddy(inF0); // only valid in pixel stage
ddy_coarse(inF0); // only valid in pixel stage
ddy_fine(inF0); // only valid in pixel stage
D3DCOLORtoUBYTE4(inF0); // expected error: only on float4 inputs
determinant(inF0); // expect error: only valid on mats
EvaluateAttributeAtCentroid(inF0); // expected error: only valid in pixel stage
EvaluateAttributeAtSample(inF0, 2); // expected error: only valid in pixel stage
EvaluateAttributeSnapped(inF0, int2(2)); // expected error: only valid in pixel stage
f16tof32(inF0); // expected error: only integer inputs
firstbithigh(inF0); // expected error: only integer inputs
firstbitlow(inF0); // expected error: only integer inputs
fma(inF0, inF1, inF2); // expected error: only double inputs
fwidth(inF0); // expected error: only valid in pixel stage
InterlockedAdd(gs_ua3, gs_ub3); // expected error: only valid in pixel stage
InterlockedAdd(gs_ua3, gs_ub3, out_u3); // expected error: only valid in pixel stage
InterlockedAnd(gs_ua3, gs_ub3); // expected error: only valid in pixel stage
InterlockedAnd(gs_ua3, gs_ub3, out_u3); // expected error: only valid in pixel stage
InterlockedCompareExchange(gs_ua3, gs_ub3, gs_uc3, out_u3); // expected error: only valid in pixel stage
InterlockedExchange(gs_ua3, gs_ub3, out_u3); // expected error: only valid in pixel stage
InterlockedMax(gs_ua3, gs_ub3); // expected error: only valid in pixel stage
InterlockedMax(gs_ua3, gs_ub3, out_u3); // expected error: only valid in pixel stage
InterlockedMin(gs_ua3, gs_ub3); // expected error: only valid in pixel stage
InterlockedMin(gs_ua3, gs_ub3, out_u3); // expected error: only valid in pixel stage
InterlockedOr(gs_ua3, gs_ub3); // expected error: only valid in pixel stage
InterlockedOr(gs_ua3, gs_ub3, out_u3); // expected error: only valid in pixel stage
InterlockedXor(gs_ua3, gs_ub3); // expected error: only valid in pixel stage
InterlockedXor(gs_ua3, gs_ub3, out_u3); // expected error: only valid in pixel stage
noise(inF0); // expected error: only valid in pixel stage
reversebits(inF0); // expected error: only integer inputs
transpose(inF0); // expect error: only valid on mats
// TODO: texture intrinsics, when we can declare samplers.
@ -115,26 +174,43 @@ float3 VertexShaderFunction(float3 inF0, float3 inF1, float3 inF2, int3 inI0)
float4 VertexShaderFunction(float4 inF0, float4 inF1, float4 inF2, int4 inI0)
{
CheckAccessFullyMapped(inF0); // expect error: only valid on scalars
countbits(inF0); // expected error: only integer inputs
cross(inF0, inF1); // expected error: only on float3 inputs
determinant(inF0); // expect error: only valid on mats
ddx(inF0); // only valid in pixel & compute stages
ddx_coarse(inF0); // only valid in pixel & compute stages
ddx_fine(inF0); // only valid in pixel & compute stages
ddy(inF0); // only valid in pixel & compute stages
ddy_coarse(inF0); // only valid in pixel & compute stages
ddy_fine(inF0); // only valid in pixel & compute stages
EvaluateAttributeAtCentroid(inF0); // expected error: only valid in pixel stage
EvaluateAttributeAtSample(inF0, 2); // expected error: only valid in pixel stage
EvaluateAttributeSnapped(inF0, int2(2)); // expected error: only valid in pixel stage
f16tof32(inF0); // expected error: only integer inputs
firstbithigh(inF0); // expected error: only integer inputs
firstbitlow(inF0); // expected error: only integer inputs
fma(inF0, inF1, inF2); // expected error: only double inputs
noise(inF0); // expected error: only valid in pixel stage
reversebits(inF0); // expected error: only integer inputs
transpose(inF0); // expect error: only valid on mats
uint4 out_u4;
CheckAccessFullyMapped(inF0); // expect error: only valid on scalars
countbits(inF0); // expected error: only integer inputs
cross(inF0, inF1); // expected error: only on float3 inputs
determinant(inF0); // expect error: only valid on mats
ddx(inF0); // only valid in pixel stage
ddx_coarse(inF0); // only valid in pixel stage
ddx_fine(inF0); // only valid in pixel stage
ddy(inF0); // only valid in pixel stage
ddy_coarse(inF0); // only valid in pixel stage
ddy_fine(inF0); // only valid in pixel stage
EvaluateAttributeAtCentroid(inF0); // expected error: only valid in pixel stage
EvaluateAttributeAtSample(inF0, 2); // expected error: only valid in pixel stage
EvaluateAttributeSnapped(inF0, int2(2)); // expected error: only valid in pixel stage
f16tof32(inF0); // expected error: only integer inputs
firstbithigh(inF0); // expected error: only integer inputs
firstbitlow(inF0); // expected error: only integer inputs
fma(inF0, inF1, inF2); // expected error: only double inputs
fwidth(inF0); // expected error: only valid in pixel stage
InterlockedAdd(gs_ua4, gs_ub4); // expected error: only valid in pixel stage
InterlockedAdd(gs_ua4, gs_ub4, out_u4); // expected error: only valid in pixel stage
InterlockedAnd(gs_ua4, gs_ub4); // expected error: only valid in pixel stage
InterlockedAnd(gs_ua4, gs_ub4, out_u4); // expected error: only valid in pixel stage
InterlockedCompareExchange(gs_ua4, gs_ub4, gs_uc4, out_u4); // expected error: only valid in pixel stage
InterlockedExchange(gs_ua4, gs_ub4, out_u4); // expected error: only valid in pixel stage
InterlockedMax(gs_ua4, gs_ub4); // expected error: only valid in pixel stage
InterlockedMax(gs_ua4, gs_ub4, out_u4); // expected error: only valid in pixel stage
InterlockedMin(gs_ua4, gs_ub4); // expected error: only valid in pixel stage
InterlockedMin(gs_ua4, gs_ub4, out_u4); // expected error: only valid in pixel stage
InterlockedOr(gs_ua4, gs_ub4); // expected error: only valid in pixel stage
InterlockedOr(gs_ua4, gs_ub4, out_u4); // expected error: only valid in pixel stage
InterlockedXor(gs_ua4, gs_ub4); // expected error: only valid in pixel stage
InterlockedXor(gs_ua4, gs_ub4, out_u4); // expected error: only valid in pixel stage
noise(inF0); // expected error: only valid in pixel stage
reversebits(inF0); // expected error: only integer inputs
transpose(inF0); // expect error: only valid on mats
// TODO: texture intrinsics, when we can declare samplers.
@ -159,6 +235,7 @@ float4 VertexShaderFunction(float4 inF0, float4 inF1, float4 inF2, int4 inI0)
firstbithigh(inF0); \
firstbitlow(inF0); \
fma(inF0, inF1, inF2); \
fwidth(inF0); \
noise(inF0); \
reversebits(inF0); \
length(inF0); \

View File

@ -1,10 +1,14 @@
float VertexShaderFunction(float inF0, float inF1, float inF2)
float VertexShaderFunction(float inF0, float inF1, float inF2, uint inU0, uint inU1)
{
all(inF0);
abs(inF0);
acos(inF0);
any(inF0);
asin(inF0);
asint(inF0);
asuint(inF0);
asfloat(inU0);
// asdouble(inU0, inU1); // TODO: enable when HLSL parser used for intrinsics
atan(inF0);
atan2(inF0, inF1);
ceil(inF0);
@ -25,7 +29,6 @@ float VertexShaderFunction(float inF0, float inF1, float inF2)
fmod(inF0, inF1);
frac(inF0);
frexp(inF0, inF1);
fwidth(inF0);
isinf(inF0);
isnan(inF0);
ldexp(inF0, inF1);
@ -62,13 +65,17 @@ float1 VertexShaderFunction(float1 inF0, float1 inF1, float1 inF2)
return 0.0;
}
float2 VertexShaderFunction(float2 inF0, float2 inF1, float2 inF2)
float2 VertexShaderFunction(float2 inF0, float2 inF1, float2 inF2, uint2 inU0, uint2 inU1)
{
all(inF0);
abs(inF0);
acos(inF0);
any(inF0);
asin(inF0);
asint(inF0);
asuint(inF0);
asfloat(inU0);
// asdouble(inU0, inU1); // TODO: enable when HLSL parser used for intrinsics
atan(inF0);
atan2(inF0, inF1);
ceil(inF0);
@ -92,7 +99,6 @@ float2 VertexShaderFunction(float2 inF0, float2 inF1, float2 inF2)
fmod(inF0, inF1);
frac(inF0);
frexp(inF0, inF1);
fwidth(inF0);
isinf(inF0);
isnan(inF0);
ldexp(inF0, inF1);
@ -128,13 +134,17 @@ float2 VertexShaderFunction(float2 inF0, float2 inF1, float2 inF2)
return float2(1,2);
}
float3 VertexShaderFunction(float3 inF0, float3 inF1, float3 inF2)
float3 VertexShaderFunction(float3 inF0, float3 inF1, float3 inF2, uint3 inU0, uint3 inU1)
{
all(inF0);
abs(inF0);
acos(inF0);
any(inF0);
asin(inF0);
asint(inF0);
asuint(inF0);
asfloat(inU0);
// asdouble(inU0, inU1); // TODO: enable when HLSL parser used for intrinsics
atan(inF0);
atan2(inF0, inF1);
ceil(inF0);
@ -159,7 +169,6 @@ float3 VertexShaderFunction(float3 inF0, float3 inF1, float3 inF2)
fmod(inF0, inF1);
frac(inF0);
frexp(inF0, inF1);
fwidth(inF0);
isinf(inF0);
isnan(inF0);
ldexp(inF0, inF1);
@ -195,13 +204,17 @@ float3 VertexShaderFunction(float3 inF0, float3 inF1, float3 inF2)
return float3(1,2,3);
}
float4 VertexShaderFunction(float4 inF0, float4 inF1, float4 inF2)
float4 VertexShaderFunction(float4 inF0, float4 inF1, float4 inF2, uint4 inU0, uint4 inU1)
{
all(inF0);
abs(inF0);
acos(inF0);
any(inF0);
asin(inF0);
asint(inF0);
asuint(inF0);
asfloat(inU0);
// asdouble(inU0, inU1); // TODO: enable when HLSL parser used for intrinsics
atan(inF0);
atan2(inF0, inF1);
ceil(inF0);
@ -226,7 +239,6 @@ float4 VertexShaderFunction(float4 inF0, float4 inF1, float4 inF2)
fmod(inF0, inF1);
frac(inF0);
frexp(inF0, inF1);
fwidth(inF0);
isinf(inF0);
isnan(inF0);
ldexp(inF0, inF1);
@ -262,6 +274,11 @@ float4 VertexShaderFunction(float4 inF0, float4 inF1, float4 inF2)
return float4(1,2,3,4);
}
// TODO: for mats:
// asfloat(inU0); \
// asint(inF0); \
// asuint(inF0); \
// TODO: FXC doesn't accept this with (), but glslang doesn't accept it without.
#define MATFNS() \
all(inF0); \
@ -285,7 +302,6 @@ float4 VertexShaderFunction(float4 inF0, float4 inF1, float4 inF2)
fmod(inF0, inF1); \
frac(inF0); \
frexp(inF0, inF1); \
fwidth(inF0); \
ldexp(inF0, inF1); \
log(inF0); \
log10(inF0); \

View File

@ -498,14 +498,24 @@ enum TOperator {
// HLSL operations
//
EOpClip,
EOpClip, // discard if input value < 0
EOpIsFinite,
EOpLog10,
EOpRcp,
EOpSaturate,
EOpSinCos,
EOpGenMul, // mul(x,y) on any of mat/vec/scalars
EOpDst,
EOpLog10, // base 10 log
EOpRcp, // 1/x
EOpSaturate, // clamp from 0 to 1
EOpSinCos, // sin and cos in out parameters
EOpGenMul, // mul(x,y) on any of mat/vec/scalars
EOpDst, // x = 1, y=src0.y * src1.y, z=src0.z, w=src1.w
EOpInterlockedAdd, // atomic ops, but uses [optional] out arg instead of return
EOpInterlockedAnd, // ...
EOpInterlockedCompareExchange, // ...
EOpInterlockedCompareStore, // ...
EOpInterlockedExchange, // ...
EOpInterlockedMax, // ...
EOpInterlockedMin, // ...
EOpInterlockedOr, // ...
EOpInterlockedXor, // ...
};
class TIntermTraverser;

View File

@ -80,7 +80,9 @@ INSTANTIATE_TEST_CASE_P(
{"hlsl.float4.frag", "PixelShaderFunction"},
{"hlsl.forLoop.frag", "PixelShaderFunction"},
{"hlsl.if.frag", "PixelShaderFunction"},
{"hlsl.intrinsics.comp", "ComputeShaderFunction"},
{"hlsl.intrinsics.frag", "PixelShaderFunction"},
{"hlsl.intrinsics.negative.comp", "ComputeShaderFunction"},
{"hlsl.intrinsics.negative.frag", "PixelShaderFunction"},
{"hlsl.intrinsics.negative.vert", "VertexShaderFunction"},
{"hlsl.intrinsics.vert", "VertexShaderFunction"},

View File

@ -771,6 +771,29 @@ void HlslParseContext::handleFunctionArgument(TFunction* function, TIntermTyped*
arguments = newArg;
}
//
// HLSL atomic operations have slightly different arguments than
// GLSL/AST/SPIRV. The semantics are converted below in decomposeIntrinsic.
// This provides the post-decomposition equivalent opcode.
//
TOperator HlslParseContext::mapAtomicOp(const TSourceLoc& loc, TOperator op, bool isImage)
{
switch (op) {
case EOpInterlockedAdd: return isImage ? EOpImageAtomicAdd : EOpAtomicAdd;
case EOpInterlockedAnd: return isImage ? EOpImageAtomicAnd : EOpAtomicAnd;
case EOpInterlockedCompareExchange: return isImage ? EOpImageAtomicCompSwap : EOpAtomicCompSwap;
case EOpInterlockedMax: return isImage ? EOpImageAtomicMax : EOpAtomicMax;
case EOpInterlockedMin: return isImage ? EOpImageAtomicMin : EOpAtomicMin;
case EOpInterlockedOr: return isImage ? EOpImageAtomicOr : EOpAtomicOr;
case EOpInterlockedXor: return isImage ? EOpImageAtomicXor : EOpAtomicXor;
case EOpInterlockedExchange: return isImage ? EOpImageAtomicExchange : EOpAtomicExchange;
case EOpInterlockedCompareStore: // TODO: ...
default:
error(loc, "unknown atomic operation", "unknown op", "");
return EOpNull;
}
}
// Optionally decompose intrinsics to AST opcodes.
//
void HlslParseContext::decomposeIntrinsic(const TSourceLoc& loc, TIntermTyped*& node, TIntermNode* arguments)
@ -825,6 +848,7 @@ void HlslParseContext::decomposeIntrinsic(const TSourceLoc& loc, TIntermTyped*&
clamp->getSequence().push_back(intermediate.addConstantUnion(1, type0, loc, true));
clamp->setLoc(loc);
clamp->setType(node->getType());
clamp->getWritableType().getQualifier().makeTemporary();
node = clamp;
break;
@ -944,6 +968,61 @@ void HlslParseContext::decomposeIntrinsic(const TSourceLoc& loc, TIntermTyped*&
break;
}
case EOpInterlockedAdd: // optional last argument (if present) is assigned from return value
case EOpInterlockedMin: // ...
case EOpInterlockedMax: // ...
case EOpInterlockedAnd: // ...
case EOpInterlockedOr: // ...
case EOpInterlockedXor: // ...
case EOpInterlockedExchange: // always has output arg
{
TIntermTyped* arg0 = argAggregate->getSequence()[0]->getAsTyped();
TIntermTyped* arg1 = argAggregate->getSequence()[1]->getAsTyped();
const bool isImage = arg0->getType().isImage();
const TOperator atomicOp = mapAtomicOp(loc, op, isImage);
if (argAggregate->getSequence().size() > 2) {
// optional output param is present. return value goes to arg2.
TIntermTyped* arg2 = argAggregate->getSequence()[2]->getAsTyped();
TIntermAggregate* atomic = new TIntermAggregate(atomicOp);
atomic->getSequence().push_back(arg0);
atomic->getSequence().push_back(arg1);
atomic->setLoc(loc);
atomic->setType(arg0->getType());
atomic->getWritableType().getQualifier().makeTemporary();
node = intermediate.addAssign(EOpAssign, arg2, atomic, loc);
} else {
// Set the matching operator. Since output is absent, this is all we need to do.
node->getAsAggregate()->setOperator(atomicOp);
}
break;
}
case EOpInterlockedCompareExchange:
{
TIntermTyped* arg0 = argAggregate->getSequence()[0]->getAsTyped(); // dest
TIntermTyped* arg1 = argAggregate->getSequence()[1]->getAsTyped(); // cmp
TIntermTyped* arg2 = argAggregate->getSequence()[2]->getAsTyped(); // value
TIntermTyped* arg3 = argAggregate->getSequence()[3]->getAsTyped(); // orig
const bool isImage = arg0->getType().isImage();
TIntermAggregate* atomic = new TIntermAggregate(mapAtomicOp(loc, op, isImage));
atomic->getSequence().push_back(arg0);
atomic->getSequence().push_back(arg1);
atomic->getSequence().push_back(arg2);
atomic->setLoc(loc);
atomic->setType(arg2->getType());
atomic->getWritableType().getQualifier().makeTemporary();
node = intermediate.addAssign(EOpAssign, arg3, atomic, loc);
break;
}
default:
break; // most pass through unchanged
}

View File

@ -155,6 +155,7 @@ protected:
TIntermNode* executeInitializer(const TSourceLoc&, TIntermTyped* initializer, TVariable* variable);
TIntermTyped* convertInitializerList(const TSourceLoc&, const TType&, TIntermTyped* initializer);
TOperator mapTypeToConstructorOp(const TType&) const;
TOperator mapAtomicOp(const TSourceLoc& loc, TOperator op, bool isImage);
void outputMessage(const TSourceLoc&, const char* szReason, const char* szToken,
const char* szExtraInfoFormat, TPrefixType prefix,
va_list args);

View File

@ -296,20 +296,26 @@ void TBuiltInParseablesHlsl::initialize(int version, EProfile profile, int spv,
{ "fmod", nullptr, nullptr, "SVM,", "F,", EShLangAll },
{ "frac", nullptr, nullptr, "SVM", "F", EShLangAll },
{ "frexp", nullptr, nullptr, "SVM,", "F,", EShLangAll },
{ "fwidth", nullptr, nullptr, "SVM", "F", EShLangAll },
{ "fwidth", nullptr, nullptr, "SVM", "F", EShLangFragmentMask },
{ "GetRenderTargetSampleCount", "S", "U", "-", "-", EShLangAll },
{ "GetRenderTargetSamplePosition", "V2", "F", "V1", "I", EShLangAll },
{ "GroupMemoryBarrier", nullptr, nullptr, "-", "-", EShLangComputeMask },
{ "GroupMemoryBarrierWithGroupSync", nullptr, nullptr, "-", "-", EShLangComputeMask },
{ "InterlockedAdd", "-", "-", "SVM,,>", "UI,,", EShLangFragmentMask | EShLangComputeMask },
{ "InterlockedAdd", "-", "-", "SVM,", "UI,", EShLangFragmentMask | EShLangComputeMask },
{ "InterlockedAnd", "-", "-", "SVM,,>", "UI,,", EShLangFragmentMask | EShLangComputeMask },
{ "InterlockedAnd", "-", "-", "SVM,", "UI,", EShLangFragmentMask | EShLangComputeMask },
{ "InterlockedCompareExchange", "-", "-", "SVM,,,>", "UI,,,", EShLangFragmentMask | EShLangComputeMask },
{ "InterlockedCompareStore", "-", "-", "SVM,,", "UI,,", EShLangFragmentMask | EShLangComputeMask },
{ "InterlockedExchange", "-", "-", "SVM,,>", "UI,,", EShLangFragmentMask | EShLangComputeMask },
{ "InterlockedMax", "-", "-", "SVM,,>", "UI,,", EShLangFragmentMask | EShLangComputeMask },
{ "InterlockedMax", "-", "-", "SVM,", "UI,", EShLangFragmentMask | EShLangComputeMask },
{ "InterlockedMin", "-", "-", "SVM,,>", "UI,,", EShLangFragmentMask | EShLangComputeMask },
{ "InterlockedMin", "-", "-", "SVM,", "UI,", EShLangFragmentMask | EShLangComputeMask },
{ "InterlockedOr", "-", "-", "SVM,,>", "UI,,", EShLangFragmentMask | EShLangComputeMask },
{ "InterlockedOr", "-", "-", "SVM,", "UI,", EShLangFragmentMask | EShLangComputeMask },
{ "InterlockedXor", "-", "-", "SVM,,>", "UI,,", EShLangFragmentMask | EShLangComputeMask },
{ "InterlockedXor", "-", "-", "SVM,", "UI,", EShLangFragmentMask | EShLangComputeMask },
{ "isfinite", nullptr, "B" , "SVM", "F", EShLangAll },
{ "isinf", nullptr, "B" , "SVM", "F", EShLangAll },
{ "isnan", nullptr, "B" , "SVM", "F", EShLangAll },
@ -516,11 +522,11 @@ void TBuiltInParseablesHlsl::identifyBuiltIns(int version, EProfile profile, int
// symbolTable.relateToOperator("AllMemoryBarrier");
// symbolTable.relateToOperator("AllMemoryBarrierWithGroupSync");
symbolTable.relateToOperator("any", EOpAny);
// symbolTable.relateToOperator("asdouble");
// symbolTable.relateToOperator("asfloat");
symbolTable.relateToOperator("asdouble", EOpUint64BitsToDouble);
symbolTable.relateToOperator("asfloat", EOpIntBitsToFloat);
symbolTable.relateToOperator("asin", EOpAsin);
// symbolTable.relateToOperator("asint");
// symbolTable.relateToOperator("asuint");
symbolTable.relateToOperator("asint", EOpFloatBitsToInt);
symbolTable.relateToOperator("asuint", EOpFloatBitsToUint);
symbolTable.relateToOperator("atan", EOpAtan);
symbolTable.relateToOperator("atan2", EOpAtan);
symbolTable.relateToOperator("ceil", EOpCeil);
@ -566,15 +572,15 @@ void TBuiltInParseablesHlsl::identifyBuiltIns(int version, EProfile profile, int
// symbolTable.relateToOperator("GetRenderTargetSamplePosition");
// symbolTable.relateToOperator("GroupMemoryBarrier");
// symbolTable.relateToOperator("GroupMemoryBarrierWithGroupSync");
// symbolTable.relateToOperator("InterlockedAdd");
// symbolTable.relateToOperator("InterlockedAnd");
// symbolTable.relateToOperator("InterlockedCompareExchange");
// symbolTable.relateToOperator("InterlockedCompareStore");
// symbolTable.relateToOperator("InterlockedExchange");
// symbolTable.relateToOperator("InterlockedMax");
// symbolTable.relateToOperator("InterlockedMin");
// symbolTable.relateToOperator("InterlockedOr");
// symbolTable.relateToOperator("InterlockedXor");
symbolTable.relateToOperator("InterlockedAdd", EOpInterlockedAdd);
symbolTable.relateToOperator("InterlockedAnd", EOpInterlockedAnd);
symbolTable.relateToOperator("InterlockedCompareExchange", EOpInterlockedCompareExchange);
symbolTable.relateToOperator("InterlockedCompareStore", EOpInterlockedCompareStore);
symbolTable.relateToOperator("InterlockedExchange", EOpInterlockedExchange);
symbolTable.relateToOperator("InterlockedMax", EOpInterlockedMax);
symbolTable.relateToOperator("InterlockedMin", EOpInterlockedMin);
symbolTable.relateToOperator("InterlockedOr", EOpInterlockedOr);
symbolTable.relateToOperator("InterlockedXor", EOpInterlockedXor);
symbolTable.relateToOperator("isfinite", EOpIsFinite);
symbolTable.relateToOperator("isinf", EOpIsInf);
symbolTable.relateToOperator("isnan", EOpIsNan);