index_signedness_autogen.cpp 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733
  1. // GENERATED FILE - DO NOT EDIT.
  2. // Generated by generate_tests.py
  3. //
  4. // Copyright (c) 2022 Google LLC.
  5. //
  6. // Licensed under the Apache License, Version 2.0 (the "License");
  7. // you may not use this file except in compliance with the License.
  8. // You may obtain a copy of the License at
  9. //
  10. // http://www.apache.org/licenses/LICENSE-2.0
  11. //
  12. // Unless required by applicable law or agreed to in writing, software
  13. // distributed under the License is distributed on an "AS IS" BASIS,
  14. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15. // See the License for the specific language governing permissions and
  16. // limitations under the License.
  17. #include "../diff_test_utils.h"
  18. #include "gtest/gtest.h"
  19. namespace spvtools {
  20. namespace diff {
  21. namespace {
  22. // Test where signedness of indices are different between src and dst.
  23. constexpr char kSrc[] = R"( OpCapability Shader
  24. %1 = OpExtInstImport "GLSL.std.450"
  25. OpMemoryModel Logical GLSL450
  26. OpEntryPoint GLCompute %4 "main"
  27. OpExecutionMode %4 LocalSize 1 1 1
  28. OpSource ESSL 310
  29. OpName %4 "main"
  30. OpName %13 "BufferOut"
  31. OpMemberName %13 0 "o1"
  32. OpMemberName %13 1 "o2"
  33. OpMemberName %13 2 "o3"
  34. OpName %15 ""
  35. OpName %22 "BufferIn"
  36. OpMemberName %22 0 "i1"
  37. OpMemberName %22 1 "i2"
  38. OpName %24 ""
  39. OpDecorate %8 ArrayStride 4
  40. OpDecorate %9 ArrayStride 4
  41. OpDecorate %11 ArrayStride 4
  42. OpDecorate %12 ArrayStride 8
  43. OpMemberDecorate %13 0 Offset 0
  44. OpMemberDecorate %13 1 Offset 12
  45. OpMemberDecorate %13 2 Offset 24
  46. OpDecorate %13 BufferBlock
  47. OpDecorate %15 DescriptorSet 0
  48. OpDecorate %15 Binding 1
  49. OpDecorate %18 ArrayStride 16
  50. OpDecorate %19 ArrayStride 48
  51. OpDecorate %21 ArrayStride 16
  52. OpMemberDecorate %22 0 Offset 0
  53. OpMemberDecorate %22 1 Offset 96
  54. OpDecorate %22 Block
  55. OpDecorate %24 DescriptorSet 0
  56. OpDecorate %24 Binding 0
  57. %2 = OpTypeVoid
  58. %3 = OpTypeFunction %2
  59. %6 = OpTypeInt 32 0
  60. %7 = OpConstant %6 3
  61. %8 = OpTypeArray %6 %7
  62. %9 = OpTypeArray %6 %7
  63. %10 = OpConstant %6 2
  64. %11 = OpTypeArray %6 %10
  65. %12 = OpTypeArray %11 %10
  66. %13 = OpTypeStruct %8 %9 %12
  67. %14 = OpTypePointer Uniform %13
  68. %15 = OpVariable %14 Uniform
  69. %16 = OpTypeInt 32 1
  70. %17 = OpConstant %16 0
  71. %18 = OpTypeArray %6 %7
  72. %19 = OpTypeArray %18 %10
  73. %20 = OpConstant %6 4
  74. %21 = OpTypeArray %6 %20
  75. %22 = OpTypeStruct %19 %21
  76. %23 = OpTypePointer Uniform %22
  77. %24 = OpVariable %23 Uniform
  78. %25 = OpTypePointer Uniform %6
  79. %28 = OpConstant %6 1
  80. %31 = OpConstant %16 1
  81. %34 = OpConstant %6 0
  82. %37 = OpConstant %16 2
  83. %61 = OpConstant %16 3
  84. %4 = OpFunction %2 None %3
  85. %5 = OpLabel
  86. %26 = OpAccessChain %25 %24 %17 %17 %17
  87. %27 = OpLoad %6 %26
  88. %29 = OpIAdd %6 %27 %28
  89. %30 = OpAccessChain %25 %15 %17 %17
  90. OpStore %30 %29
  91. %32 = OpAccessChain %25 %24 %17 %31 %17
  92. %33 = OpLoad %6 %32
  93. %35 = OpIAdd %6 %33 %34
  94. %36 = OpAccessChain %25 %15 %17 %31
  95. OpStore %36 %35
  96. %38 = OpAccessChain %25 %24 %17 %31 %31
  97. %39 = OpLoad %6 %38
  98. %40 = OpIAdd %6 %39 %10
  99. %41 = OpAccessChain %25 %15 %17 %37
  100. OpStore %41 %40
  101. %42 = OpAccessChain %25 %24 %17 %17 %37
  102. %43 = OpLoad %6 %42
  103. %44 = OpAccessChain %25 %15 %31 %17
  104. OpStore %44 %43
  105. %45 = OpAccessChain %25 %24 %17 %17 %31
  106. %46 = OpLoad %6 %45
  107. %47 = OpIMul %6 %46 %7
  108. %48 = OpAccessChain %25 %15 %31 %31
  109. OpStore %48 %47
  110. %49 = OpAccessChain %25 %24 %17 %31 %37
  111. %50 = OpLoad %6 %49
  112. %51 = OpAccessChain %25 %15 %31 %37
  113. OpStore %51 %50
  114. %52 = OpAccessChain %25 %24 %31 %17
  115. %53 = OpLoad %6 %52
  116. %54 = OpAccessChain %25 %15 %37 %17 %17
  117. OpStore %54 %53
  118. %55 = OpAccessChain %25 %24 %31 %31
  119. %56 = OpLoad %6 %55
  120. %57 = OpAccessChain %25 %15 %37 %17 %31
  121. OpStore %57 %56
  122. %58 = OpAccessChain %25 %24 %31 %37
  123. %59 = OpLoad %6 %58
  124. %60 = OpAccessChain %25 %15 %37 %31 %17
  125. OpStore %60 %59
  126. %62 = OpAccessChain %25 %24 %31 %61
  127. %63 = OpLoad %6 %62
  128. %64 = OpAccessChain %25 %15 %37 %31 %31
  129. OpStore %64 %63
  130. OpReturn
  131. OpFunctionEnd
  132. )";
  133. constexpr char kDst[] = R"( OpCapability Shader
  134. %1 = OpExtInstImport "GLSL.std.450"
  135. OpMemoryModel Logical GLSL450
  136. OpEntryPoint GLCompute %4 "main"
  137. OpExecutionMode %4 LocalSize 1 1 1
  138. OpSource ESSL 310
  139. OpName %4 "main"
  140. OpName %13 "BufferOut"
  141. OpMemberName %13 0 "o1"
  142. OpMemberName %13 1 "o2"
  143. OpMemberName %13 2 "o3"
  144. OpName %15 ""
  145. OpName %22 "BufferIn"
  146. OpMemberName %22 0 "i1"
  147. OpMemberName %22 1 "i2"
  148. OpName %24 ""
  149. OpDecorate %8 ArrayStride 4
  150. OpDecorate %9 ArrayStride 4
  151. OpDecorate %11 ArrayStride 4
  152. OpDecorate %12 ArrayStride 8
  153. OpMemberDecorate %13 0 Offset 0
  154. OpMemberDecorate %13 1 Offset 12
  155. OpMemberDecorate %13 2 Offset 24
  156. OpDecorate %13 BufferBlock
  157. OpDecorate %15 DescriptorSet 0
  158. OpDecorate %15 Binding 1
  159. OpDecorate %18 ArrayStride 16
  160. OpDecorate %19 ArrayStride 48
  161. OpDecorate %21 ArrayStride 16
  162. OpMemberDecorate %22 0 Offset 0
  163. OpMemberDecorate %22 1 Offset 96
  164. OpDecorate %22 Block
  165. OpDecorate %24 DescriptorSet 0
  166. OpDecorate %24 Binding 0
  167. %2 = OpTypeVoid
  168. %3 = OpTypeFunction %2
  169. %6 = OpTypeInt 32 0
  170. %16 = OpTypeInt 32 1
  171. %7 = OpConstant %16 3
  172. %8 = OpTypeArray %6 %7
  173. %9 = OpTypeArray %6 %7
  174. %10 = OpConstant %16 2
  175. %11 = OpTypeArray %6 %10
  176. %12 = OpTypeArray %11 %10
  177. %13 = OpTypeStruct %8 %9 %12
  178. %14 = OpTypePointer Uniform %13
  179. %15 = OpVariable %14 Uniform
  180. %18 = OpTypeArray %6 %7
  181. %19 = OpTypeArray %18 %10
  182. %20 = OpConstant %16 4
  183. %21 = OpTypeArray %6 %20
  184. %22 = OpTypeStruct %19 %21
  185. %23 = OpTypePointer Uniform %22
  186. %24 = OpVariable %23 Uniform
  187. %25 = OpTypePointer Uniform %6
  188. %17 = OpConstant %16 0
  189. %28 = OpConstant %16 1
  190. %31 = OpConstant %6 1
  191. %34 = OpConstant %6 0
  192. %37 = OpConstant %6 2
  193. %61 = OpConstant %6 3
  194. %4 = OpFunction %2 None %3
  195. %5 = OpLabel
  196. %26 = OpAccessChain %25 %24 %17 %17 %17
  197. %27 = OpLoad %6 %26
  198. %29 = OpIAdd %6 %27 %28
  199. %30 = OpAccessChain %25 %15 %17 %17
  200. OpStore %30 %29
  201. %32 = OpAccessChain %25 %24 %17 %31 %17
  202. %33 = OpLoad %6 %32
  203. %35 = OpIAdd %6 %33 %34
  204. %36 = OpAccessChain %25 %15 %17 %31
  205. OpStore %36 %35
  206. %38 = OpAccessChain %25 %24 %17 %31 %31
  207. %39 = OpLoad %6 %38
  208. %40 = OpIAdd %6 %39 %37
  209. %41 = OpAccessChain %25 %15 %17 %10
  210. OpStore %41 %40
  211. %42 = OpAccessChain %25 %24 %17 %17 %10
  212. %43 = OpLoad %6 %42
  213. %44 = OpAccessChain %25 %15 %31 %17
  214. OpStore %44 %43
  215. %45 = OpAccessChain %25 %24 %17 %17 %31
  216. %46 = OpLoad %6 %45
  217. %47 = OpIMul %6 %46 %7
  218. %48 = OpAccessChain %25 %15 %31 %31
  219. OpStore %48 %47
  220. %49 = OpAccessChain %25 %24 %17 %31 %10
  221. %50 = OpLoad %6 %49
  222. %51 = OpAccessChain %25 %15 %31 %10
  223. OpStore %51 %50
  224. %52 = OpAccessChain %25 %24 %31 %17
  225. %53 = OpLoad %6 %52
  226. %54 = OpAccessChain %25 %15 %37 %17 %17
  227. OpStore %54 %53
  228. %55 = OpAccessChain %25 %24 %31 %31
  229. %56 = OpLoad %6 %55
  230. %57 = OpAccessChain %25 %15 %37 %17 %31
  231. OpStore %57 %56
  232. %58 = OpAccessChain %25 %24 %31 %37
  233. %59 = OpLoad %6 %58
  234. %60 = OpAccessChain %25 %15 %37 %31 %17
  235. OpStore %60 %59
  236. %62 = OpAccessChain %25 %24 %31 %61
  237. %63 = OpLoad %6 %62
  238. %64 = OpAccessChain %25 %15 %37 %31 %31
  239. OpStore %64 %63
  240. OpReturn
  241. OpFunctionEnd
  242. )";
  243. TEST(DiffTest, IndexSignedness) {
  244. constexpr char kDiff[] = R"( ; SPIR-V
  245. ; Version: 1.6
  246. ; Generator: Khronos SPIR-V Tools Assembler; 0
  247. ; Bound: 65
  248. ; Schema: 0
  249. OpCapability Shader
  250. %1 = OpExtInstImport "GLSL.std.450"
  251. OpMemoryModel Logical GLSL450
  252. OpEntryPoint GLCompute %4 "main"
  253. OpExecutionMode %4 LocalSize 1 1 1
  254. OpSource ESSL 310
  255. OpName %4 "main"
  256. OpName %13 "BufferOut"
  257. OpMemberName %13 0 "o1"
  258. OpMemberName %13 1 "o2"
  259. OpMemberName %13 2 "o3"
  260. OpName %15 ""
  261. OpName %22 "BufferIn"
  262. OpMemberName %22 0 "i1"
  263. OpMemberName %22 1 "i2"
  264. OpName %24 ""
  265. OpDecorate %8 ArrayStride 4
  266. OpDecorate %9 ArrayStride 4
  267. OpDecorate %11 ArrayStride 4
  268. OpDecorate %12 ArrayStride 8
  269. OpMemberDecorate %13 0 Offset 0
  270. OpMemberDecorate %13 1 Offset 12
  271. OpMemberDecorate %13 2 Offset 24
  272. OpDecorate %13 BufferBlock
  273. OpDecorate %15 DescriptorSet 0
  274. OpDecorate %15 Binding 1
  275. OpDecorate %18 ArrayStride 16
  276. OpDecorate %19 ArrayStride 48
  277. OpDecorate %21 ArrayStride 16
  278. OpMemberDecorate %22 0 Offset 0
  279. OpMemberDecorate %22 1 Offset 96
  280. OpDecorate %22 Block
  281. OpDecorate %24 DescriptorSet 0
  282. OpDecorate %24 Binding 0
  283. %2 = OpTypeVoid
  284. %3 = OpTypeFunction %2
  285. %6 = OpTypeInt 32 0
  286. %7 = OpConstant %6 3
  287. -%8 = OpTypeArray %6 %7
  288. +%8 = OpTypeArray %6 %61
  289. -%9 = OpTypeArray %6 %7
  290. +%9 = OpTypeArray %6 %61
  291. %10 = OpConstant %6 2
  292. -%11 = OpTypeArray %6 %10
  293. +%11 = OpTypeArray %6 %37
  294. -%12 = OpTypeArray %11 %10
  295. +%12 = OpTypeArray %11 %37
  296. %13 = OpTypeStruct %8 %9 %12
  297. %14 = OpTypePointer Uniform %13
  298. %15 = OpVariable %14 Uniform
  299. %16 = OpTypeInt 32 1
  300. %17 = OpConstant %16 0
  301. -%18 = OpTypeArray %6 %7
  302. +%18 = OpTypeArray %6 %61
  303. -%19 = OpTypeArray %18 %10
  304. +%19 = OpTypeArray %18 %37
  305. -%20 = OpConstant %6 4
  306. +%20 = OpConstant %16 4
  307. %21 = OpTypeArray %6 %20
  308. %22 = OpTypeStruct %19 %21
  309. %23 = OpTypePointer Uniform %22
  310. %24 = OpVariable %23 Uniform
  311. %25 = OpTypePointer Uniform %6
  312. %28 = OpConstant %6 1
  313. %31 = OpConstant %16 1
  314. %34 = OpConstant %6 0
  315. %37 = OpConstant %16 2
  316. %61 = OpConstant %16 3
  317. %4 = OpFunction %2 None %3
  318. %5 = OpLabel
  319. %26 = OpAccessChain %25 %24 %17 %17 %17
  320. %27 = OpLoad %6 %26
  321. -%29 = OpIAdd %6 %27 %28
  322. +%29 = OpIAdd %6 %27 %31
  323. %30 = OpAccessChain %25 %15 %17 %17
  324. OpStore %30 %29
  325. -%32 = OpAccessChain %25 %24 %17 %31 %17
  326. +%32 = OpAccessChain %25 %24 %17 %28 %17
  327. %33 = OpLoad %6 %32
  328. %35 = OpIAdd %6 %33 %34
  329. -%36 = OpAccessChain %25 %15 %17 %31
  330. +%36 = OpAccessChain %25 %15 %17 %28
  331. OpStore %36 %35
  332. -%38 = OpAccessChain %25 %24 %17 %31 %31
  333. +%38 = OpAccessChain %25 %24 %17 %28 %28
  334. %39 = OpLoad %6 %38
  335. %40 = OpIAdd %6 %39 %10
  336. %41 = OpAccessChain %25 %15 %17 %37
  337. OpStore %41 %40
  338. %42 = OpAccessChain %25 %24 %17 %17 %37
  339. %43 = OpLoad %6 %42
  340. -%44 = OpAccessChain %25 %15 %31 %17
  341. +%44 = OpAccessChain %25 %15 %28 %17
  342. OpStore %44 %43
  343. -%45 = OpAccessChain %25 %24 %17 %17 %31
  344. +%45 = OpAccessChain %25 %24 %17 %17 %28
  345. %46 = OpLoad %6 %45
  346. -%47 = OpIMul %6 %46 %7
  347. +%47 = OpIMul %6 %46 %61
  348. -%48 = OpAccessChain %25 %15 %31 %31
  349. +%48 = OpAccessChain %25 %15 %28 %28
  350. OpStore %48 %47
  351. -%49 = OpAccessChain %25 %24 %17 %31 %37
  352. +%49 = OpAccessChain %25 %24 %17 %28 %37
  353. %50 = OpLoad %6 %49
  354. -%51 = OpAccessChain %25 %15 %31 %37
  355. +%51 = OpAccessChain %25 %15 %28 %37
  356. OpStore %51 %50
  357. -%52 = OpAccessChain %25 %24 %31 %17
  358. +%52 = OpAccessChain %25 %24 %28 %17
  359. %53 = OpLoad %6 %52
  360. -%54 = OpAccessChain %25 %15 %37 %17 %17
  361. +%54 = OpAccessChain %25 %15 %10 %17 %17
  362. OpStore %54 %53
  363. -%55 = OpAccessChain %25 %24 %31 %31
  364. +%55 = OpAccessChain %25 %24 %28 %28
  365. %56 = OpLoad %6 %55
  366. -%57 = OpAccessChain %25 %15 %37 %17 %31
  367. +%57 = OpAccessChain %25 %15 %10 %17 %28
  368. OpStore %57 %56
  369. -%58 = OpAccessChain %25 %24 %31 %37
  370. +%58 = OpAccessChain %25 %24 %28 %10
  371. %59 = OpLoad %6 %58
  372. -%60 = OpAccessChain %25 %15 %37 %31 %17
  373. +%60 = OpAccessChain %25 %15 %10 %28 %17
  374. OpStore %60 %59
  375. -%62 = OpAccessChain %25 %24 %31 %61
  376. +%62 = OpAccessChain %25 %24 %28 %7
  377. %63 = OpLoad %6 %62
  378. -%64 = OpAccessChain %25 %15 %37 %31 %31
  379. +%64 = OpAccessChain %25 %15 %10 %28 %28
  380. OpStore %64 %63
  381. OpReturn
  382. OpFunctionEnd
  383. )";
  384. Options options;
  385. DoStringDiffTest(kSrc, kDst, kDiff, options);
  386. }
  387. TEST(DiffTest, IndexSignednessNoDebug) {
  388. constexpr char kSrcNoDebug[] = R"( OpCapability Shader
  389. %1 = OpExtInstImport "GLSL.std.450"
  390. OpMemoryModel Logical GLSL450
  391. OpEntryPoint GLCompute %4 "main"
  392. OpExecutionMode %4 LocalSize 1 1 1
  393. OpSource ESSL 310
  394. OpDecorate %8 ArrayStride 4
  395. OpDecorate %9 ArrayStride 4
  396. OpDecorate %11 ArrayStride 4
  397. OpDecorate %12 ArrayStride 8
  398. OpMemberDecorate %13 0 Offset 0
  399. OpMemberDecorate %13 1 Offset 12
  400. OpMemberDecorate %13 2 Offset 24
  401. OpDecorate %13 BufferBlock
  402. OpDecorate %15 DescriptorSet 0
  403. OpDecorate %15 Binding 1
  404. OpDecorate %18 ArrayStride 16
  405. OpDecorate %19 ArrayStride 48
  406. OpDecorate %21 ArrayStride 16
  407. OpMemberDecorate %22 0 Offset 0
  408. OpMemberDecorate %22 1 Offset 96
  409. OpDecorate %22 Block
  410. OpDecorate %24 DescriptorSet 0
  411. OpDecorate %24 Binding 0
  412. %2 = OpTypeVoid
  413. %3 = OpTypeFunction %2
  414. %6 = OpTypeInt 32 0
  415. %7 = OpConstant %6 3
  416. %8 = OpTypeArray %6 %7
  417. %9 = OpTypeArray %6 %7
  418. %10 = OpConstant %6 2
  419. %11 = OpTypeArray %6 %10
  420. %12 = OpTypeArray %11 %10
  421. %13 = OpTypeStruct %8 %9 %12
  422. %14 = OpTypePointer Uniform %13
  423. %15 = OpVariable %14 Uniform
  424. %16 = OpTypeInt 32 1
  425. %17 = OpConstant %16 0
  426. %18 = OpTypeArray %6 %7
  427. %19 = OpTypeArray %18 %10
  428. %20 = OpConstant %6 4
  429. %21 = OpTypeArray %6 %20
  430. %22 = OpTypeStruct %19 %21
  431. %23 = OpTypePointer Uniform %22
  432. %24 = OpVariable %23 Uniform
  433. %25 = OpTypePointer Uniform %6
  434. %28 = OpConstant %6 1
  435. %31 = OpConstant %16 1
  436. %34 = OpConstant %6 0
  437. %37 = OpConstant %16 2
  438. %61 = OpConstant %16 3
  439. %4 = OpFunction %2 None %3
  440. %5 = OpLabel
  441. %26 = OpAccessChain %25 %24 %17 %17 %17
  442. %27 = OpLoad %6 %26
  443. %29 = OpIAdd %6 %27 %28
  444. %30 = OpAccessChain %25 %15 %17 %17
  445. OpStore %30 %29
  446. %32 = OpAccessChain %25 %24 %17 %31 %17
  447. %33 = OpLoad %6 %32
  448. %35 = OpIAdd %6 %33 %34
  449. %36 = OpAccessChain %25 %15 %17 %31
  450. OpStore %36 %35
  451. %38 = OpAccessChain %25 %24 %17 %31 %31
  452. %39 = OpLoad %6 %38
  453. %40 = OpIAdd %6 %39 %10
  454. %41 = OpAccessChain %25 %15 %17 %37
  455. OpStore %41 %40
  456. %42 = OpAccessChain %25 %24 %17 %17 %37
  457. %43 = OpLoad %6 %42
  458. %44 = OpAccessChain %25 %15 %31 %17
  459. OpStore %44 %43
  460. %45 = OpAccessChain %25 %24 %17 %17 %31
  461. %46 = OpLoad %6 %45
  462. %47 = OpIMul %6 %46 %7
  463. %48 = OpAccessChain %25 %15 %31 %31
  464. OpStore %48 %47
  465. %49 = OpAccessChain %25 %24 %17 %31 %37
  466. %50 = OpLoad %6 %49
  467. %51 = OpAccessChain %25 %15 %31 %37
  468. OpStore %51 %50
  469. %52 = OpAccessChain %25 %24 %31 %17
  470. %53 = OpLoad %6 %52
  471. %54 = OpAccessChain %25 %15 %37 %17 %17
  472. OpStore %54 %53
  473. %55 = OpAccessChain %25 %24 %31 %31
  474. %56 = OpLoad %6 %55
  475. %57 = OpAccessChain %25 %15 %37 %17 %31
  476. OpStore %57 %56
  477. %58 = OpAccessChain %25 %24 %31 %37
  478. %59 = OpLoad %6 %58
  479. %60 = OpAccessChain %25 %15 %37 %31 %17
  480. OpStore %60 %59
  481. %62 = OpAccessChain %25 %24 %31 %61
  482. %63 = OpLoad %6 %62
  483. %64 = OpAccessChain %25 %15 %37 %31 %31
  484. OpStore %64 %63
  485. OpReturn
  486. OpFunctionEnd
  487. )";
  488. constexpr char kDstNoDebug[] = R"( OpCapability Shader
  489. %1 = OpExtInstImport "GLSL.std.450"
  490. OpMemoryModel Logical GLSL450
  491. OpEntryPoint GLCompute %4 "main"
  492. OpExecutionMode %4 LocalSize 1 1 1
  493. OpSource ESSL 310
  494. OpDecorate %8 ArrayStride 4
  495. OpDecorate %9 ArrayStride 4
  496. OpDecorate %11 ArrayStride 4
  497. OpDecorate %12 ArrayStride 8
  498. OpMemberDecorate %13 0 Offset 0
  499. OpMemberDecorate %13 1 Offset 12
  500. OpMemberDecorate %13 2 Offset 24
  501. OpDecorate %13 BufferBlock
  502. OpDecorate %15 DescriptorSet 0
  503. OpDecorate %15 Binding 1
  504. OpDecorate %18 ArrayStride 16
  505. OpDecorate %19 ArrayStride 48
  506. OpDecorate %21 ArrayStride 16
  507. OpMemberDecorate %22 0 Offset 0
  508. OpMemberDecorate %22 1 Offset 96
  509. OpDecorate %22 Block
  510. OpDecorate %24 DescriptorSet 0
  511. OpDecorate %24 Binding 0
  512. %2 = OpTypeVoid
  513. %3 = OpTypeFunction %2
  514. %6 = OpTypeInt 32 0
  515. %16 = OpTypeInt 32 1
  516. %7 = OpConstant %16 3
  517. %8 = OpTypeArray %6 %7
  518. %9 = OpTypeArray %6 %7
  519. %10 = OpConstant %16 2
  520. %11 = OpTypeArray %6 %10
  521. %12 = OpTypeArray %11 %10
  522. %13 = OpTypeStruct %8 %9 %12
  523. %14 = OpTypePointer Uniform %13
  524. %15 = OpVariable %14 Uniform
  525. %18 = OpTypeArray %6 %7
  526. %19 = OpTypeArray %18 %10
  527. %20 = OpConstant %16 4
  528. %21 = OpTypeArray %6 %20
  529. %22 = OpTypeStruct %19 %21
  530. %23 = OpTypePointer Uniform %22
  531. %24 = OpVariable %23 Uniform
  532. %25 = OpTypePointer Uniform %6
  533. %17 = OpConstant %16 0
  534. %28 = OpConstant %16 1
  535. %31 = OpConstant %6 1
  536. %34 = OpConstant %6 0
  537. %37 = OpConstant %6 2
  538. %61 = OpConstant %6 3
  539. %4 = OpFunction %2 None %3
  540. %5 = OpLabel
  541. %26 = OpAccessChain %25 %24 %17 %17 %17
  542. %27 = OpLoad %6 %26
  543. %29 = OpIAdd %6 %27 %28
  544. %30 = OpAccessChain %25 %15 %17 %17
  545. OpStore %30 %29
  546. %32 = OpAccessChain %25 %24 %17 %31 %17
  547. %33 = OpLoad %6 %32
  548. %35 = OpIAdd %6 %33 %34
  549. %36 = OpAccessChain %25 %15 %17 %31
  550. OpStore %36 %35
  551. %38 = OpAccessChain %25 %24 %17 %31 %31
  552. %39 = OpLoad %6 %38
  553. %40 = OpIAdd %6 %39 %37
  554. %41 = OpAccessChain %25 %15 %17 %10
  555. OpStore %41 %40
  556. %42 = OpAccessChain %25 %24 %17 %17 %10
  557. %43 = OpLoad %6 %42
  558. %44 = OpAccessChain %25 %15 %31 %17
  559. OpStore %44 %43
  560. %45 = OpAccessChain %25 %24 %17 %17 %31
  561. %46 = OpLoad %6 %45
  562. %47 = OpIMul %6 %46 %7
  563. %48 = OpAccessChain %25 %15 %31 %31
  564. OpStore %48 %47
  565. %49 = OpAccessChain %25 %24 %17 %31 %10
  566. %50 = OpLoad %6 %49
  567. %51 = OpAccessChain %25 %15 %31 %10
  568. OpStore %51 %50
  569. %52 = OpAccessChain %25 %24 %31 %17
  570. %53 = OpLoad %6 %52
  571. %54 = OpAccessChain %25 %15 %37 %17 %17
  572. OpStore %54 %53
  573. %55 = OpAccessChain %25 %24 %31 %31
  574. %56 = OpLoad %6 %55
  575. %57 = OpAccessChain %25 %15 %37 %17 %31
  576. OpStore %57 %56
  577. %58 = OpAccessChain %25 %24 %31 %37
  578. %59 = OpLoad %6 %58
  579. %60 = OpAccessChain %25 %15 %37 %31 %17
  580. OpStore %60 %59
  581. %62 = OpAccessChain %25 %24 %31 %61
  582. %63 = OpLoad %6 %62
  583. %64 = OpAccessChain %25 %15 %37 %31 %31
  584. OpStore %64 %63
  585. OpReturn
  586. OpFunctionEnd
  587. )";
  588. constexpr char kDiff[] = R"( ; SPIR-V
  589. ; Version: 1.6
  590. ; Generator: Khronos SPIR-V Tools Assembler; 0
  591. ; Bound: 65
  592. ; Schema: 0
  593. OpCapability Shader
  594. %1 = OpExtInstImport "GLSL.std.450"
  595. OpMemoryModel Logical GLSL450
  596. OpEntryPoint GLCompute %4 "main"
  597. OpExecutionMode %4 LocalSize 1 1 1
  598. OpSource ESSL 310
  599. OpDecorate %8 ArrayStride 4
  600. OpDecorate %9 ArrayStride 4
  601. OpDecorate %11 ArrayStride 4
  602. OpDecorate %12 ArrayStride 8
  603. OpMemberDecorate %13 0 Offset 0
  604. OpMemberDecorate %13 1 Offset 12
  605. OpMemberDecorate %13 2 Offset 24
  606. OpDecorate %13 BufferBlock
  607. OpDecorate %15 DescriptorSet 0
  608. OpDecorate %15 Binding 1
  609. OpDecorate %18 ArrayStride 16
  610. OpDecorate %19 ArrayStride 48
  611. OpDecorate %21 ArrayStride 16
  612. OpMemberDecorate %22 0 Offset 0
  613. OpMemberDecorate %22 1 Offset 96
  614. OpDecorate %22 Block
  615. OpDecorate %24 DescriptorSet 0
  616. OpDecorate %24 Binding 0
  617. %2 = OpTypeVoid
  618. %3 = OpTypeFunction %2
  619. %6 = OpTypeInt 32 0
  620. %7 = OpConstant %6 3
  621. -%8 = OpTypeArray %6 %7
  622. +%8 = OpTypeArray %6 %61
  623. -%9 = OpTypeArray %6 %7
  624. +%9 = OpTypeArray %6 %61
  625. %10 = OpConstant %6 2
  626. -%11 = OpTypeArray %6 %10
  627. +%11 = OpTypeArray %6 %37
  628. -%12 = OpTypeArray %11 %10
  629. +%12 = OpTypeArray %11 %37
  630. %13 = OpTypeStruct %8 %9 %12
  631. %14 = OpTypePointer Uniform %13
  632. %15 = OpVariable %14 Uniform
  633. %16 = OpTypeInt 32 1
  634. %17 = OpConstant %16 0
  635. -%18 = OpTypeArray %6 %7
  636. +%18 = OpTypeArray %6 %61
  637. -%19 = OpTypeArray %18 %10
  638. +%19 = OpTypeArray %18 %37
  639. -%20 = OpConstant %6 4
  640. +%20 = OpConstant %16 4
  641. %21 = OpTypeArray %6 %20
  642. %22 = OpTypeStruct %19 %21
  643. %23 = OpTypePointer Uniform %22
  644. %24 = OpVariable %23 Uniform
  645. %25 = OpTypePointer Uniform %6
  646. %28 = OpConstant %6 1
  647. %31 = OpConstant %16 1
  648. %34 = OpConstant %6 0
  649. %37 = OpConstant %16 2
  650. %61 = OpConstant %16 3
  651. %4 = OpFunction %2 None %3
  652. %5 = OpLabel
  653. %26 = OpAccessChain %25 %24 %17 %17 %17
  654. %27 = OpLoad %6 %26
  655. -%29 = OpIAdd %6 %27 %28
  656. +%29 = OpIAdd %6 %27 %31
  657. %30 = OpAccessChain %25 %15 %17 %17
  658. OpStore %30 %29
  659. -%32 = OpAccessChain %25 %24 %17 %31 %17
  660. +%32 = OpAccessChain %25 %24 %17 %28 %17
  661. %33 = OpLoad %6 %32
  662. %35 = OpIAdd %6 %33 %34
  663. -%36 = OpAccessChain %25 %15 %17 %31
  664. +%36 = OpAccessChain %25 %15 %17 %28
  665. OpStore %36 %35
  666. -%38 = OpAccessChain %25 %24 %17 %31 %31
  667. +%38 = OpAccessChain %25 %24 %17 %28 %28
  668. %39 = OpLoad %6 %38
  669. %40 = OpIAdd %6 %39 %10
  670. %41 = OpAccessChain %25 %15 %17 %37
  671. OpStore %41 %40
  672. %42 = OpAccessChain %25 %24 %17 %17 %37
  673. %43 = OpLoad %6 %42
  674. -%44 = OpAccessChain %25 %15 %31 %17
  675. +%44 = OpAccessChain %25 %15 %28 %17
  676. OpStore %44 %43
  677. -%45 = OpAccessChain %25 %24 %17 %17 %31
  678. +%45 = OpAccessChain %25 %24 %17 %17 %28
  679. %46 = OpLoad %6 %45
  680. -%47 = OpIMul %6 %46 %7
  681. +%47 = OpIMul %6 %46 %61
  682. -%48 = OpAccessChain %25 %15 %31 %31
  683. +%48 = OpAccessChain %25 %15 %28 %28
  684. OpStore %48 %47
  685. -%49 = OpAccessChain %25 %24 %17 %31 %37
  686. +%49 = OpAccessChain %25 %24 %17 %28 %37
  687. %50 = OpLoad %6 %49
  688. -%51 = OpAccessChain %25 %15 %31 %37
  689. +%51 = OpAccessChain %25 %15 %28 %37
  690. OpStore %51 %50
  691. -%52 = OpAccessChain %25 %24 %31 %17
  692. +%52 = OpAccessChain %25 %24 %28 %17
  693. %53 = OpLoad %6 %52
  694. -%54 = OpAccessChain %25 %15 %37 %17 %17
  695. +%54 = OpAccessChain %25 %15 %10 %17 %17
  696. OpStore %54 %53
  697. -%55 = OpAccessChain %25 %24 %31 %31
  698. +%55 = OpAccessChain %25 %24 %28 %28
  699. %56 = OpLoad %6 %55
  700. -%57 = OpAccessChain %25 %15 %37 %17 %31
  701. +%57 = OpAccessChain %25 %15 %10 %17 %28
  702. OpStore %57 %56
  703. -%58 = OpAccessChain %25 %24 %31 %37
  704. +%58 = OpAccessChain %25 %24 %28 %10
  705. %59 = OpLoad %6 %58
  706. -%60 = OpAccessChain %25 %15 %37 %31 %17
  707. +%60 = OpAccessChain %25 %15 %10 %28 %17
  708. OpStore %60 %59
  709. -%62 = OpAccessChain %25 %24 %31 %61
  710. +%62 = OpAccessChain %25 %24 %28 %7
  711. %63 = OpLoad %6 %62
  712. -%64 = OpAccessChain %25 %15 %37 %31 %31
  713. +%64 = OpAccessChain %25 %15 %10 %28 %28
  714. OpStore %64 %63
  715. OpReturn
  716. OpFunctionEnd
  717. )";
  718. Options options;
  719. DoStringDiffTest(kSrcNoDebug, kDstNoDebug, kDiff, options);
  720. }
  721. } // namespace
  722. } // namespace diff
  723. } // namespace spvtools