Zgragselus

BVH Traversal - While DXBC/DXIL

Apr 15th, 2023
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 29.37 KB | None | 0 0
  1. ; Note: shader requires additional functionality:
  2. ; 64 UAV slots
  3. ;
  4. ; shader hash: 4d2c2162c55b28f9b0d19035ae7f5503
  5.  
  6. ; Compute Shader, compiled under SM6.5
  7.  
  8. target datalayout = "e-m:e-p:32:32-i1:32-i8:32-i16:32-i32:32-i64:64-f16:32-f32:32-f64:64-n8:16:32:64"
  9. target triple = "dxil-ms-dx"
  10.  
  11. %dx.types.Handle = type { i8* }
  12. %dx.types.CBufRet.f32 = type { float, float, float, float }
  13. %dx.types.ResRet.f32 = type { float, float, float, float, i32 }
  14. %dx.types.ResRet.i32 = type { i32, i32, i32, i32, i32 }
  15. %"class.RWStructuredBuffer<Ray>" = type { %struct.Ray }
  16. %struct.Ray = type { <4 x float>, <4 x float>, <4 x float> }
  17. %"class.RWTexture2D<vector<float, 4> >" = type { <4 x float> }
  18. %"class.RWStructuredBuffer<GeometryNode>" = type { %struct.GeometryNode }
  19. %struct.GeometryNode = type { <4 x float>, <4 x float>, i32, i32, i32, i32, i32, i32, i32, i32 }
  20. %"hostlayout.class.RWStructuredBuffer<InstanceNode>" = type { %hostlayout.struct.InstanceNode }
  21. %hostlayout.struct.InstanceNode = type { [4 x <4 x float>], [4 x <4 x float>], i32, i32, i32, i32 }
  22. %"class.RWStructuredBuffer<BVHNode>" = type { %struct.BVHNode }
  23. %struct.BVHNode = type { <4 x float>, <4 x float>, <4 x float>, i32, i32, i32, i32 }
  24. %"class.RWStructuredBuffer<MemoryNode>" = type { %struct.MemoryNode }
  25. %struct.MemoryNode = type { i32, i32, i32, i32 }
  26. %"class.RWStructuredBuffer<unsigned int>" = type { i32 }
  27. %"class.RWStructuredBuffer<vector<float, 4> >" = type { <4 x float> }
  28. %Params = type { <4 x float>, <4 x float>, <4 x float> }
  29.  
  30. define void @RenderPass() {
  31. %1 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 1, i32 8, i32 13, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex)
  32. %2 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 1, i32 7, i32 12, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex)
  33. %3 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 1, i32 6, i32 10, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex)
  34. %4 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 1, i32 5, i32 9, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex)
  35. %5 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 1, i32 4, i32 8, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex)
  36. %6 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 1, i32 3, i32 7, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex)
  37. %7 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 1, i32 2, i32 6, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex)
  38. %8 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 1, i32 1, i32 1, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex)
  39. %9 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 1, i32 0, i32 0, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex)
  40. %10 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 2, i32 0, i32 0, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex)
  41. %11 = call i32 @dx.op.threadId.i32(i32 93, i32 0) ; ThreadId(component)
  42. %12 = call i32 @dx.op.threadId.i32(i32 93, i32 1) ; ThreadId(component)
  43. %13 = alloca [64 x i32], align 4
  44. %14 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %10, i32 0) ; CBufferLoadLegacy(handle,regIndex)
  45. %15 = extractvalue %dx.types.CBufRet.f32 %14, 0
  46. %16 = bitcast float %15 to i32
  47. %17 = mul i32 %16, %12
  48. %18 = add i32 %17, %11
  49. %19 = call %dx.types.ResRet.f32 @dx.op.rawBufferLoad.f32(i32 139, %dx.types.Handle %9, i32 %18, i32 0, i8 15, i32 4) ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
  50. %20 = extractvalue %dx.types.ResRet.f32 %19, 0
  51. %21 = extractvalue %dx.types.ResRet.f32 %19, 1
  52. %22 = extractvalue %dx.types.ResRet.f32 %19, 2
  53. %23 = extractvalue %dx.types.ResRet.f32 %19, 3
  54. %24 = call %dx.types.ResRet.f32 @dx.op.rawBufferLoad.f32(i32 139, %dx.types.Handle %9, i32 %18, i32 16, i8 15, i32 4) ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
  55. %25 = extractvalue %dx.types.ResRet.f32 %24, 0
  56. %26 = extractvalue %dx.types.ResRet.f32 %24, 1
  57. %27 = extractvalue %dx.types.ResRet.f32 %24, 2
  58. %28 = extractvalue %dx.types.ResRet.f32 %24, 3
  59. %29 = call %dx.types.ResRet.f32 @dx.op.rawBufferLoad.f32(i32 139, %dx.types.Handle %9, i32 %18, i32 32, i8 15, i32 4) ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
  60. %30 = extractvalue %dx.types.ResRet.f32 %29, 0
  61. %31 = extractvalue %dx.types.ResRet.f32 %29, 1
  62. %32 = extractvalue %dx.types.ResRet.f32 %29, 2
  63. %33 = fmul fast float %30, %20
  64. %34 = fmul fast float %31, %21
  65. %35 = fmul fast float %32, %22
  66. %36 = getelementptr inbounds [64 x i32], [64 x i32]* %13, i32 0, i32 0
  67. store i32 -1, i32* %36, align 4, !tbaa !26
  68. %37 = call %dx.types.ResRet.i32 @dx.op.rawBufferLoad.i32(i32 139, %dx.types.Handle %6, i32 0, i32 128, i8 1, i32 4) ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
  69. %38 = extractvalue %dx.types.ResRet.i32 %37, 0
  70. br label %39
  71.  
  72. ; <label>:39 ; preds = %221, %0
  73. %40 = phi float [ %33, %0 ], [ %222, %221 ]
  74. %41 = phi float [ %34, %0 ], [ %223, %221 ]
  75. %42 = phi float [ %35, %0 ], [ %224, %221 ]
  76. %43 = phi float [ %30, %0 ], [ %225, %221 ]
  77. %44 = phi float [ %31, %0 ], [ %226, %221 ]
  78. %45 = phi float [ %32, %0 ], [ %227, %221 ]
  79. %46 = phi float [ %25, %0 ], [ %228, %221 ]
  80. %47 = phi float [ %26, %0 ], [ %229, %221 ]
  81. %48 = phi float [ %27, %0 ], [ %230, %221 ]
  82. %49 = phi float [ %20, %0 ], [ %231, %221 ]
  83. %50 = phi float [ %21, %0 ], [ %232, %221 ]
  84. %51 = phi float [ %22, %0 ], [ %233, %221 ]
  85. %52 = phi i32 [ 0, %0 ], [ %234, %221 ]
  86. %53 = phi i32 [ 0, %0 ], [ %235, %221 ]
  87. %54 = phi i32 [ -1, %0 ], [ %236, %221 ]
  88. %55 = phi i32 [ %38, %0 ], [ %237, %221 ]
  89. %56 = phi float [ 1.000000e+040x40C3880000000000, %0 ], [ %238, %221 ]
  90. %57 = phi float [ 0.000000e+000x0, %0 ], [ %239, %221 ]
  91. %58 = phi float [ 0.000000e+000x0, %0 ], [ %240, %221 ]
  92. %59 = phi float [ 0.000000e+000x0, %0 ], [ %60, %221 ]
  93. %60 = fadd fast float %59, 1.000000e-030x3F50624DE0000000
  94. %61 = call %dx.types.ResRet.i32 @dx.op.rawBufferLoad.i32(i32 139, %dx.types.Handle %5, i32 %52, i32 52, i8 1, i32 4) ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
  95. %62 = extractvalue %dx.types.ResRet.i32 %61, 0
  96. %63 = icmp eq i32 %62, 0
  97. br i1 %63, label %64, label %161, !dx.controlflow.hints !30
  98.  
  99. ; <label>:64 ; preds = %39
  100. %65 = call %dx.types.ResRet.f32 @dx.op.rawBufferLoad.f32(i32 139, %dx.types.Handle %5, i32 %52, i32 0, i8 15, i32 4) ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
  101. %66 = extractvalue %dx.types.ResRet.f32 %65, 0
  102. %67 = extractvalue %dx.types.ResRet.f32 %65, 1
  103. %68 = extractvalue %dx.types.ResRet.f32 %65, 2
  104. %69 = extractvalue %dx.types.ResRet.f32 %65, 3
  105. %70 = call %dx.types.ResRet.f32 @dx.op.rawBufferLoad.f32(i32 139, %dx.types.Handle %5, i32 %52, i32 16, i8 15, i32 4) ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
  106. %71 = extractvalue %dx.types.ResRet.f32 %70, 0
  107. %72 = extractvalue %dx.types.ResRet.f32 %70, 1
  108. %73 = extractvalue %dx.types.ResRet.f32 %70, 2
  109. %74 = extractvalue %dx.types.ResRet.f32 %70, 3
  110. %75 = call %dx.types.ResRet.f32 @dx.op.rawBufferLoad.f32(i32 139, %dx.types.Handle %5, i32 %52, i32 32, i8 15, i32 4) ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
  111. %76 = extractvalue %dx.types.ResRet.f32 %75, 0
  112. %77 = extractvalue %dx.types.ResRet.f32 %75, 1
  113. %78 = extractvalue %dx.types.ResRet.f32 %75, 2
  114. %79 = extractvalue %dx.types.ResRet.f32 %75, 3
  115. %80 = fmul fast float %66, %43
  116. %81 = fsub fast float %80, %40
  117. %82 = fmul fast float %67, %43
  118. %83 = fsub fast float %82, %40
  119. %84 = fmul fast float %68, %44
  120. %85 = fsub fast float %84, %41
  121. %86 = fmul fast float %69, %44
  122. %87 = fsub fast float %86, %41
  123. %88 = fmul fast float %76, %45
  124. %89 = fsub fast float %88, %42
  125. %90 = fmul fast float %77, %45
  126. %91 = fsub fast float %90, %42
  127. %92 = fmul fast float %78, %45
  128. %93 = fsub fast float %92, %42
  129. %94 = fmul fast float %79, %45
  130. %95 = fsub fast float %94, %42
  131. %96 = call float @dx.op.binary.f32(i32 36, float %89, float %91) ; FMin(a,b)
  132. %97 = call float @dx.op.binary.f32(i32 35, float %96, float 0.000000e+000x0) ; FMax(a,b)
  133. %98 = call float @dx.op.binary.f32(i32 36, float %85, float %87) ; FMin(a,b)
  134. %99 = call float @dx.op.binary.f32(i32 36, float %81, float %83) ; FMin(a,b)
  135. %100 = call float @dx.op.binary.f32(i32 35, float %99, float %98) ; FMax(a,b)
  136. %101 = call float @dx.op.binary.f32(i32 35, float %100, float %97) ; FMax(a,b)
  137. %102 = call float @dx.op.binary.f32(i32 35, float %89, float %91) ; FMax(a,b)
  138. %103 = call float @dx.op.binary.f32(i32 36, float %102, float %56) ; FMin(a,b)
  139. %104 = call float @dx.op.binary.f32(i32 35, float %85, float %87) ; FMax(a,b)
  140. %105 = call float @dx.op.binary.f32(i32 35, float %81, float %83) ; FMax(a,b)
  141. %106 = call float @dx.op.binary.f32(i32 36, float %105, float %104) ; FMin(a,b)
  142. %107 = call float @dx.op.binary.f32(i32 36, float %106, float %103) ; FMin(a,b)
  143. %108 = fmul fast float %71, %43
  144. %109 = fsub fast float %108, %40
  145. %110 = fmul fast float %72, %43
  146. %111 = fsub fast float %110, %40
  147. %112 = fmul fast float %73, %44
  148. %113 = fsub fast float %112, %41
  149. %114 = fmul fast float %74, %44
  150. %115 = fsub fast float %114, %41
  151. %116 = call float @dx.op.binary.f32(i32 36, float %93, float %95) ; FMin(a,b)
  152. %117 = call float @dx.op.binary.f32(i32 35, float %116, float 0.000000e+000x0) ; FMax(a,b)
  153. %118 = call float @dx.op.binary.f32(i32 36, float %113, float %115) ; FMin(a,b)
  154. %119 = call float @dx.op.binary.f32(i32 36, float %109, float %111) ; FMin(a,b)
  155. %120 = call float @dx.op.binary.f32(i32 35, float %119, float %118) ; FMax(a,b)
  156. %121 = call float @dx.op.binary.f32(i32 35, float %120, float %117) ; FMax(a,b)
  157. %122 = call float @dx.op.binary.f32(i32 35, float %93, float %95) ; FMax(a,b)
  158. %123 = call float @dx.op.binary.f32(i32 36, float %122, float %56) ; FMin(a,b)
  159. %124 = call float @dx.op.binary.f32(i32 35, float %113, float %115) ; FMax(a,b)
  160. %125 = call float @dx.op.binary.f32(i32 35, float %109, float %111) ; FMax(a,b)
  161. %126 = call float @dx.op.binary.f32(i32 36, float %125, float %124) ; FMin(a,b)
  162. %127 = call float @dx.op.binary.f32(i32 36, float %126, float %123) ; FMin(a,b)
  163. %128 = fcmp fast oge float %107, %101
  164. %129 = fcmp fast oge float %127, %121
  165. %130 = or i1 %128, %129
  166. br i1 %130, label %149, label %131
  167.  
  168. ; <label>:131 ; preds = %64
  169. %132 = icmp eq i32 %53, %54
  170. %133 = select i1 %132, float %33, float %40
  171. %134 = select i1 %132, float %34, float %41
  172. %135 = select i1 %132, float %35, float %42
  173. %136 = select i1 %132, float %30, float %43
  174. %137 = select i1 %132, float %31, float %44
  175. %138 = select i1 %132, float %32, float %45
  176. %139 = select i1 %132, float %25, float %46
  177. %140 = select i1 %132, float %26, float %47
  178. %141 = select i1 %132, float %27, float %48
  179. %142 = select i1 %132, float %20, float %49
  180. %143 = select i1 %132, float %21, float %50
  181. %144 = select i1 %132, float %22, float %51
  182. %145 = select i1 %132, i32 -1, i32 %54
  183. %146 = getelementptr inbounds [64 x i32], [64 x i32]* %13, i32 0, i32 %53
  184. %147 = load i32, i32* %146, align 4, !tbaa !26
  185. %148 = add i32 %53, -1
  186. br label %221
  187.  
  188. ; <label>:149 ; preds = %64
  189. %150 = add i32 %52, 1
  190. %151 = call %dx.types.ResRet.i32 @dx.op.rawBufferLoad.i32(i32 139, %dx.types.Handle %5, i32 %52, i32 48, i8 1, i32 4) ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
  191. %152 = extractvalue %dx.types.ResRet.i32 %151, 0
  192. %153 = select i1 %128, i32 %150, i32 %152
  193. %154 = and i1 %128, %129
  194. br i1 %154, label %155, label %221
  195.  
  196. ; <label>:155 ; preds = %149
  197. %156 = fcmp fast olt float %121, %101
  198. %157 = add i32 %53, 1
  199. %158 = getelementptr inbounds [64 x i32], [64 x i32]* %13, i32 0, i32 %157
  200. br i1 %156, label %159, label %160
  201.  
  202. ; <label>:159 ; preds = %155
  203. store i32 %150, i32* %158, align 4, !tbaa !26
  204. br label %221
  205.  
  206. ; <label>:160 ; preds = %155
  207. store i32 %152, i32* %158, align 4, !tbaa !26
  208. br label %221
  209.  
  210. ; <label>:161 ; preds = %39
  211. %162 = icmp eq i32 %62, -1
  212. br i1 %162, label %163, label %242
  213.  
  214. ; <label>:163 ; preds = %161
  215. %164 = call %dx.types.ResRet.i32 @dx.op.rawBufferLoad.i32(i32 139, %dx.types.Handle %5, i32 %52, i32 48, i8 1, i32 4) ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
  216. %165 = extractvalue %dx.types.ResRet.i32 %164, 0
  217. %166 = call %dx.types.ResRet.i32 @dx.op.rawBufferLoad.i32(i32 139, %dx.types.Handle %3, i32 %165, i32 0, i8 1, i32 4) ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
  218. %167 = extractvalue %dx.types.ResRet.i32 %166, 0
  219. %168 = call %dx.types.ResRet.f32 @dx.op.rawBufferLoad.f32(i32 139, %dx.types.Handle %6, i32 %167, i32 64, i8 15, i32 4) ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
  220. %169 = extractvalue %dx.types.ResRet.f32 %168, 0
  221. %170 = extractvalue %dx.types.ResRet.f32 %168, 1
  222. %171 = extractvalue %dx.types.ResRet.f32 %168, 2
  223. %172 = extractvalue %dx.types.ResRet.f32 %168, 3
  224. %173 = call %dx.types.ResRet.f32 @dx.op.rawBufferLoad.f32(i32 139, %dx.types.Handle %6, i32 %167, i32 80, i8 15, i32 4) ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
  225. %174 = extractvalue %dx.types.ResRet.f32 %173, 0
  226. %175 = extractvalue %dx.types.ResRet.f32 %173, 1
  227. %176 = extractvalue %dx.types.ResRet.f32 %173, 2
  228. %177 = extractvalue %dx.types.ResRet.f32 %173, 3
  229. %178 = call %dx.types.ResRet.f32 @dx.op.rawBufferLoad.f32(i32 139, %dx.types.Handle %6, i32 %167, i32 96, i8 15, i32 4) ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
  230. %179 = extractvalue %dx.types.ResRet.f32 %178, 0
  231. %180 = extractvalue %dx.types.ResRet.f32 %178, 1
  232. %181 = extractvalue %dx.types.ResRet.f32 %178, 2
  233. %182 = extractvalue %dx.types.ResRet.f32 %178, 3
  234. %183 = call %dx.types.ResRet.i32 @dx.op.rawBufferLoad.i32(i32 139, %dx.types.Handle %6, i32 %167, i32 128, i8 1, i32 4) ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
  235. %184 = extractvalue %dx.types.ResRet.i32 %183, 0
  236. %185 = call %dx.types.ResRet.i32 @dx.op.rawBufferLoad.i32(i32 139, %dx.types.Handle %7, i32 %184, i32 40, i8 1, i32 4) ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
  237. %186 = extractvalue %dx.types.ResRet.i32 %185, 0
  238. %187 = add i32 %186, 1
  239. %188 = call %dx.types.ResRet.i32 @dx.op.rawBufferLoad.i32(i32 139, %dx.types.Handle %4, i32 %187, i32 8, i8 1, i32 4) ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
  240. %189 = extractvalue %dx.types.ResRet.i32 %188, 0
  241. %190 = lshr i32 %189, 6
  242. %191 = fmul fast float %169, %20
  243. %192 = call float @dx.op.tertiary.f32(i32 46, float %21, float %170, float %191) ; FMad(a,b,c)
  244. %193 = call float @dx.op.tertiary.f32(i32 46, float %22, float %171, float %192) ; FMad(a,b,c)
  245. %194 = call float @dx.op.tertiary.f32(i32 46, float %23, float %172, float %193) ; FMad(a,b,c)
  246. %195 = fmul fast float %174, %20
  247. %196 = call float @dx.op.tertiary.f32(i32 46, float %21, float %175, float %195) ; FMad(a,b,c)
  248. %197 = call float @dx.op.tertiary.f32(i32 46, float %22, float %176, float %196) ; FMad(a,b,c)
  249. %198 = call float @dx.op.tertiary.f32(i32 46, float %23, float %177, float %197) ; FMad(a,b,c)
  250. %199 = fmul fast float %179, %20
  251. %200 = call float @dx.op.tertiary.f32(i32 46, float %21, float %180, float %199) ; FMad(a,b,c)
  252. %201 = call float @dx.op.tertiary.f32(i32 46, float %22, float %181, float %200) ; FMad(a,b,c)
  253. %202 = call float @dx.op.tertiary.f32(i32 46, float %23, float %182, float %201) ; FMad(a,b,c)
  254. %203 = fmul fast float %169, %25
  255. %204 = call float @dx.op.tertiary.f32(i32 46, float %26, float %170, float %203) ; FMad(a,b,c)
  256. %205 = call float @dx.op.tertiary.f32(i32 46, float %27, float %171, float %204) ; FMad(a,b,c)
  257. %206 = call float @dx.op.tertiary.f32(i32 46, float %28, float %172, float %205) ; FMad(a,b,c)
  258. %207 = fmul fast float %174, %25
  259. %208 = call float @dx.op.tertiary.f32(i32 46, float %26, float %175, float %207) ; FMad(a,b,c)
  260. %209 = call float @dx.op.tertiary.f32(i32 46, float %27, float %176, float %208) ; FMad(a,b,c)
  261. %210 = call float @dx.op.tertiary.f32(i32 46, float %28, float %177, float %209) ; FMad(a,b,c)
  262. %211 = fmul fast float %179, %25
  263. %212 = call float @dx.op.tertiary.f32(i32 46, float %26, float %180, float %211) ; FMad(a,b,c)
  264. %213 = call float @dx.op.tertiary.f32(i32 46, float %27, float %181, float %212) ; FMad(a,b,c)
  265. %214 = call float @dx.op.tertiary.f32(i32 46, float %28, float %182, float %213) ; FMad(a,b,c)
  266. %215 = fdiv fast float 1.000000e+000x3FF0000000000000, %206
  267. %216 = fdiv fast float 1.000000e+000x3FF0000000000000, %210
  268. %217 = fdiv fast float 1.000000e+000x3FF0000000000000, %214
  269. %218 = fmul fast float %215, %194
  270. %219 = fmul fast float %216, %198
  271. %220 = fmul fast float %217, %202
  272. br label %221
  273.  
  274. ; <label>:221 ; preds = %345, %163, %160, %159, %149, %131
  275. %222 = phi float [ %40, %159 ], [ %40, %160 ], [ %40, %149 ], [ %133, %131 ], [ %218, %163 ], [ %350, %345 ]
  276. %223 = phi float [ %41, %159 ], [ %41, %160 ], [ %41, %149 ], [ %134, %131 ], [ %219, %163 ], [ %351, %345 ]
  277. %224 = phi float [ %42, %159 ], [ %42, %160 ], [ %42, %149 ], [ %135, %131 ], [ %220, %163 ], [ %352, %345 ]
  278. %225 = phi float [ %43, %159 ], [ %43, %160 ], [ %43, %149 ], [ %136, %131 ], [ %215, %163 ], [ %353, %345 ]
  279. %226 = phi float [ %44, %159 ], [ %44, %160 ], [ %44, %149 ], [ %137, %131 ], [ %216, %163 ], [ %354, %345 ]
  280. %227 = phi float [ %45, %159 ], [ %45, %160 ], [ %45, %149 ], [ %138, %131 ], [ %217, %163 ], [ %355, %345 ]
  281. %228 = phi float [ %46, %159 ], [ %46, %160 ], [ %46, %149 ], [ %139, %131 ], [ %206, %163 ], [ %356, %345 ]
  282. %229 = phi float [ %47, %159 ], [ %47, %160 ], [ %47, %149 ], [ %140, %131 ], [ %210, %163 ], [ %357, %345 ]
  283. %230 = phi float [ %48, %159 ], [ %48, %160 ], [ %48, %149 ], [ %141, %131 ], [ %214, %163 ], [ %358, %345 ]
  284. %231 = phi float [ %49, %159 ], [ %49, %160 ], [ %49, %149 ], [ %142, %131 ], [ %194, %163 ], [ %359, %345 ]
  285. %232 = phi float [ %50, %159 ], [ %50, %160 ], [ %50, %149 ], [ %143, %131 ], [ %198, %163 ], [ %360, %345 ]
  286. %233 = phi float [ %51, %159 ], [ %51, %160 ], [ %51, %149 ], [ %144, %131 ], [ %202, %163 ], [ %361, %345 ]
  287. %234 = phi i32 [ %152, %159 ], [ %153, %160 ], [ %153, %149 ], [ %147, %131 ], [ %190, %163 ], [ %364, %345 ]
  288. %235 = phi i32 [ %157, %159 ], [ %157, %160 ], [ %53, %149 ], [ %148, %131 ], [ %53, %163 ], [ %365, %345 ]
  289. %236 = phi i32 [ %54, %159 ], [ %54, %160 ], [ %54, %149 ], [ %145, %131 ], [ %53, %163 ], [ %362, %345 ]
  290. %237 = phi i32 [ %55, %159 ], [ %55, %160 ], [ %55, %149 ], [ %55, %131 ], [ %184, %163 ], [ %55, %345 ]
  291. %238 = phi float [ %56, %159 ], [ %56, %160 ], [ %56, %149 ], [ %56, %131 ], [ %56, %163 ], [ %346, %345 ]
  292. %239 = phi float [ %57, %159 ], [ %57, %160 ], [ %57, %149 ], [ %57, %131 ], [ %57, %163 ], [ %347, %345 ]
  293. %240 = phi float [ %58, %159 ], [ %58, %160 ], [ %58, %149 ], [ %58, %131 ], [ %58, %163 ], [ %348, %345 ]
  294. %241 = icmp eq i32 %234, -1
  295. br i1 %241, label %366, label %39
  296.  
  297. ; <label>:242 ; preds = %161
  298. %243 = icmp sgt i32 %62, 0
  299. br i1 %243, label %244, label %345
  300.  
  301. ; <label>:244 ; preds = %242
  302. %245 = call %dx.types.ResRet.i32 @dx.op.rawBufferLoad.i32(i32 139, %dx.types.Handle %7, i32 %55, i32 48, i8 1, i32 4) ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
  303. %246 = extractvalue %dx.types.ResRet.i32 %245, 0
  304. %247 = call %dx.types.ResRet.i32 @dx.op.rawBufferLoad.i32(i32 139, %dx.types.Handle %1, i32 %246, i32 8, i8 1, i32 4) ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
  305. %248 = extractvalue %dx.types.ResRet.i32 %247, 0
  306. br label %249
  307.  
  308. ; <label>:249 ; preds = %339, %244
  309. %250 = phi float [ %56, %244 ], [ %340, %339 ]
  310. %251 = phi float [ %57, %244 ], [ %341, %339 ]
  311. %252 = phi float [ %58, %244 ], [ %342, %339 ]
  312. %253 = phi i32 [ 0, %244 ], [ %343, %339 ]
  313. %254 = call %dx.types.ResRet.i32 @dx.op.rawBufferLoad.i32(i32 139, %dx.types.Handle %5, i32 %52, i32 52, i8 1, i32 4) ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
  314. %255 = extractvalue %dx.types.ResRet.i32 %254, 0
  315. %256 = icmp ult i32 %253, %255
  316. br i1 %256, label %257, label %344
  317.  
  318. ; <label>:257 ; preds = %249
  319. %258 = call %dx.types.ResRet.i32 @dx.op.rawBufferLoad.i32(i32 139, %dx.types.Handle %5, i32 %52, i32 48, i8 1, i32 4) ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
  320. %259 = extractvalue %dx.types.ResRet.i32 %258, 0
  321. %260 = add i32 %259, %253
  322. %261 = call %dx.types.ResRet.i32 @dx.op.rawBufferLoad.i32(i32 139, %dx.types.Handle %3, i32 %260, i32 0, i8 1, i32 4) ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
  323. %262 = extractvalue %dx.types.ResRet.i32 %261, 0
  324. %263 = mul i32 %262, 3
  325. %264 = lshr i32 %248, 4
  326. %265 = add i32 %263, %264
  327. %266 = call %dx.types.ResRet.f32 @dx.op.rawBufferLoad.f32(i32 139, %dx.types.Handle %2, i32 %265, i32 0, i8 15, i32 4) ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
  328. %267 = extractvalue %dx.types.ResRet.f32 %266, 0
  329. %268 = extractvalue %dx.types.ResRet.f32 %266, 1
  330. %269 = extractvalue %dx.types.ResRet.f32 %266, 2
  331. %270 = extractvalue %dx.types.ResRet.f32 %266, 3
  332. %271 = add nuw nsw i32 %264, 1
  333. %272 = add i32 %271, %263
  334. %273 = call %dx.types.ResRet.f32 @dx.op.rawBufferLoad.f32(i32 139, %dx.types.Handle %2, i32 %272, i32 0, i8 15, i32 4) ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
  335. %274 = extractvalue %dx.types.ResRet.f32 %273, 0
  336. %275 = extractvalue %dx.types.ResRet.f32 %273, 1
  337. %276 = extractvalue %dx.types.ResRet.f32 %273, 2
  338. %277 = add nuw nsw i32 %264, 2
  339. %278 = add i32 %277, %263
  340. %279 = call %dx.types.ResRet.f32 @dx.op.rawBufferLoad.f32(i32 139, %dx.types.Handle %2, i32 %278, i32 0, i8 15, i32 4) ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
  341. %280 = extractvalue %dx.types.ResRet.f32 %279, 0
  342. %281 = extractvalue %dx.types.ResRet.f32 %279, 1
  343. %282 = extractvalue %dx.types.ResRet.f32 %279, 2
  344. %283 = extractvalue %dx.types.ResRet.f32 %279, 3
  345. %284 = fmul fast float %267, %49
  346. %285 = fsub fast float %270, %284
  347. %286 = fmul fast float %268, %50
  348. %287 = fsub fast float %285, %286
  349. %288 = fmul fast float %269, %51
  350. %289 = fsub fast float %287, %288
  351. %290 = fmul fast float %267, %46
  352. %291 = fmul fast float %268, %47
  353. %292 = fadd fast float %290, %291
  354. %293 = fmul fast float %269, %48
  355. %294 = fadd fast float %292, %293
  356. %295 = fdiv fast float 1.000000e+000x3FF0000000000000, %294
  357. %296 = fmul fast float %295, %289
  358. %297 = fcmp fast ogt float %296, 0.000000e+000x0
  359. %298 = fcmp fast olt float %296, %250
  360. %299 = and i1 %297, %298
  361. br i1 %299, label %300, label %339
  362.  
  363. ; <label>:300 ; preds = %257
  364. %301 = extractvalue %dx.types.ResRet.f32 %273, 3
  365. %302 = fmul fast float %274, %49
  366. %303 = fadd fast float %302, %301
  367. %304 = fmul fast float %275, %50
  368. %305 = fadd fast float %303, %304
  369. %306 = fmul fast float %276, %51
  370. %307 = fadd fast float %305, %306
  371. %308 = fmul fast float %274, %46
  372. %309 = fmul fast float %275, %47
  373. %310 = fadd fast float %308, %309
  374. %311 = fmul fast float %276, %48
  375. %312 = fadd fast float %310, %311
  376. %313 = fmul fast float %296, %312
  377. %314 = fadd fast float %307, %313
  378. %315 = fcmp fast oge float %314, 0.000000e+000x0
  379. %316 = fcmp fast ole float %314, 1.000000e+000x3FF0000000000000
  380. %317 = and i1 %315, %316
  381. br i1 %317, label %318, label %339
  382.  
  383. ; <label>:318 ; preds = %300
  384. %319 = fmul fast float %280, %49
  385. %320 = fadd fast float %319, %283
  386. %321 = fmul fast float %281, %50
  387. %322 = fadd fast float %320, %321
  388. %323 = fmul fast float %282, %51
  389. %324 = fadd fast float %322, %323
  390. %325 = fmul fast float %280, %46
  391. %326 = fmul fast float %281, %47
  392. %327 = fadd fast float %325, %326
  393. %328 = fmul fast float %282, %48
  394. %329 = fadd fast float %327, %328
  395. %330 = fmul fast float %329, %296
  396. %331 = fadd fast float %324, %330
  397. %332 = fcmp fast oge float %331, 0.000000e+000x0
  398. %333 = fadd fast float %331, %314
  399. %334 = fcmp fast ole float %333, 1.000000e+000x3FF0000000000000
  400. %335 = and i1 %332, %334
  401. %336 = select i1 %335, float %296, float %250
  402. %337 = select i1 %335, float %314, float %251
  403. %338 = select i1 %335, float %331, float %252
  404. br label %339
  405.  
  406. ; <label>:339 ; preds = %318, %300, %257
  407. %340 = phi float [ %250, %300 ], [ %250, %257 ], [ %336, %318 ]
  408. %341 = phi float [ %251, %300 ], [ %251, %257 ], [ %337, %318 ]
  409. %342 = phi float [ %252, %300 ], [ %252, %257 ], [ %338, %318 ]
  410. %343 = add i32 %253, 1
  411. br label %249
  412.  
  413. ; <label>:344 ; preds = %249
  414. br label %345
  415.  
  416. ; <label>:345 ; preds = %344, %242
  417. %346 = phi float [ %56, %242 ], [ %250, %344 ]
  418. %347 = phi float [ %57, %242 ], [ %251, %344 ]
  419. %348 = phi float [ %58, %242 ], [ %252, %344 ]
  420. %349 = icmp eq i32 %53, %54
  421. %350 = select i1 %349, float %33, float %40
  422. %351 = select i1 %349, float %34, float %41
  423. %352 = select i1 %349, float %35, float %42
  424. %353 = select i1 %349, float %30, float %43
  425. %354 = select i1 %349, float %31, float %44
  426. %355 = select i1 %349, float %32, float %45
  427. %356 = select i1 %349, float %25, float %46
  428. %357 = select i1 %349, float %26, float %47
  429. %358 = select i1 %349, float %27, float %48
  430. %359 = select i1 %349, float %20, float %49
  431. %360 = select i1 %349, float %21, float %50
  432. %361 = select i1 %349, float %22, float %51
  433. %362 = select i1 %349, i32 -1, i32 %54
  434. %363 = getelementptr inbounds [64 x i32], [64 x i32]* %13, i32 0, i32 %53
  435. %364 = load i32, i32* %363, align 4, !tbaa !26
  436. %365 = add i32 %53, -1
  437. br label %221
  438.  
  439. ; <label>:366 ; preds = %221
  440. call void @dx.op.textureStore.f32(i32 67, %dx.types.Handle %8, i32 %11, i32 %12, i32 undef, float %239, float %240, float %60, float 1.000000e+000x3FF0000000000000, i8 15) ; TextureStore(srv,coord0,coord1,coord2,value0,value1,value2,value3,mask)
  441. ret void
  442. }
  443.  
  444. ; Function Attrs: nounwind readnone
  445. declare i32 @dx.op.threadId.i32(i32, i32) #0
  446.  
  447. ; Function Attrs: nounwind readonly
  448. declare %dx.types.ResRet.f32 @dx.op.rawBufferLoad.f32(i32, %dx.types.Handle, i32, i32, i8, i32) #1
  449.  
  450. ; Function Attrs: nounwind readonly
  451. declare %dx.types.ResRet.i32 @dx.op.rawBufferLoad.i32(i32, %dx.types.Handle, i32, i32, i8, i32) #1
  452.  
  453. ; Function Attrs: nounwind readnone
  454. declare float @dx.op.binary.f32(i32, float, float) #0
  455.  
  456. ; Function Attrs: nounwind
  457. declare void @dx.op.textureStore.f32(i32, %dx.types.Handle, i32, i32, i32, float, float, float, float, i8) #2
  458.  
  459. ; Function Attrs: nounwind readonly
  460. declare %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32, %dx.types.Handle, i32) #1
  461.  
  462. ; Function Attrs: nounwind readnone
  463. declare float @dx.op.tertiary.f32(i32, float, float, float) #0
  464.  
  465. ; Function Attrs: nounwind readonly
  466. declare %dx.types.Handle @dx.op.createHandle(i32, i8, i32, i32, i1) #1
  467.  
  468. attributes #0 = { nounwind readnone }
  469. attributes #1 = { nounwind readonly }
  470. attributes #2 = { nounwind }
  471.  
  472. !llvm.ident = !{!0}
  473. !dx.version = !{!1}
  474. !dx.valver = !{!2}
  475. !dx.shaderModel = !{!3}
  476. !dx.resources = !{!4}
  477. !dx.entryPoints = !{!23}
  478.  
  479. !0 = !{!"clang version 3.7 (tags/RELEASE_370/final)"}
  480. !1 = !{i32 1, i32 5}
  481. !2 = !{i32 1, i32 7}
  482. !3 = !{!"cs", i32 6, i32 5}
  483. !4 = !{null, !5, !21, null}
  484. !5 = !{!6, !8, !10, !12, !14, !15, !17, !19, !20}
  485. !6 = !{i32 0, %"class.RWStructuredBuffer<Ray>"* undef, !"", i32 0, i32 0, i32 1, i32 12, i1 false, i1 false, i1 false, !7}
  486. !7 = !{i32 1, i32 48}
  487. !8 = !{i32 1, %"class.RWTexture2D<vector<float, 4> >"* undef, !"", i32 0, i32 1, i32 1, i32 2, i1 false, i1 false, i1 false, !9}
  488. !9 = !{i32 0, i32 9}
  489. !10 = !{i32 2, %"class.RWStructuredBuffer<GeometryNode>"* undef, !"", i32 0, i32 6, i32 1, i32 12, i1 false, i1 false, i1 false, !11}
  490. !11 = !{i32 1, i32 64}
  491. !12 = !{i32 3, %"hostlayout.class.RWStructuredBuffer<InstanceNode>"* undef, !"", i32 0, i32 7, i32 1, i32 12, i1 false, i1 false, i1 false, !13}
  492. !13 = !{i32 1, i32 144}
  493. !14 = !{i32 4, %"class.RWStructuredBuffer<BVHNode>"* undef, !"", i32 0, i32 8, i32 1, i32 12, i1 false, i1 false, i1 false, !11}
  494. !15 = !{i32 5, %"class.RWStructuredBuffer<MemoryNode>"* undef, !"", i32 0, i32 9, i32 1, i32 12, i1 false, i1 false, i1 false, !16}
  495. !16 = !{i32 1, i32 16}
  496. !17 = !{i32 6, %"class.RWStructuredBuffer<unsigned int>"* undef, !"", i32 0, i32 10, i32 1, i32 12, i1 false, i1 false, i1 false, !18}
  497. !18 = !{i32 1, i32 4}
  498. !19 = !{i32 7, %"class.RWStructuredBuffer<vector<float, 4> >"* undef, !"", i32 0, i32 12, i32 1, i32 12, i1 false, i1 false, i1 false, !16}
  499. !20 = !{i32 8, %"class.RWStructuredBuffer<MemoryNode>"* undef, !"", i32 0, i32 13, i32 1, i32 12, i1 false, i1 false, i1 false, !16}
  500. !21 = !{!22}
  501. !22 = !{i32 0, %Params* undef, !"", i32 0, i32 0, i32 1, i32 48, null}
  502. !23 = !{void ()* @RenderPass, !"RenderPass", null, !4, !24}
  503. !24 = !{i32 0, i64 32784, i32 4, !25}
  504. !25 = !{i32 32, i32 32, i32 1}
  505. !26 = !{!27, !27, i64 0}
  506. !27 = !{!"int", !28, i64 0}
  507. !28 = !{!"omnipotent char", !29, i64 0}
  508. !29 = !{!"Simple C/C++ TBAA"}
  509. !30 = distinct !{!30, !"dx.controlflow.hints", i32 1}
  510.  
  511.  
Add Comment
Please, Sign In to add comment