Handmade Hero»Episode Guide
Tableless Grid Walk
?
?

Keyboard Navigation

Global Keys

[, < / ], > Jump to previous / next episode
W, K, P / S, J, N Jump to previous / next marker
t / T Toggle theatre / SUPERtheatre mode
V Revert filter to original state Y Select link (requires manual Ctrl-c)

Menu toggling

q Quotes r References f Filter y Link c Credits

In-Menu Movement

a
w
s
d
h j k l


Quotes and References Menus

Enter Jump to timecode

Quotes, References and Credits Menus

o Open URL (in new tab)

Filter Menu

x, Space Toggle category and focus next
X, ShiftSpace Toggle category and focus previous
v Invert topics / media as per focus

Filter and Link Menus

z Toggle filter / linking mode

Credits Menu

Enter Open URL (in new tab)
0:02Recap and set the stage for the day
🗩
0:02Recap and set the stage for the day
🗩
0:02Recap and set the stage for the day
🗩
0:39hhlightprof total seconds elapsed: 4.508690
🏃
0:39hhlightprof total seconds elapsed: 4.508690
🏃
0:39hhlightprof total seconds elapsed: 4.508690
🏃
1:32Set up to gauge the performance of the inline lighting grid traversal computation
🗩
1:32Set up to gauge the performance of the inline lighting grid traversal computation
🗩
1:32Set up to gauge the performance of the inline lighting grid traversal computation
🗩
3:49Walk through ComputeWalkTableFast()
📖
3:49Walk through ComputeWalkTableFast()
📖
3:49Walk through ComputeWalkTableFast()
📖
6:11Begin to enable GridRayCast() to invoke and verify the inline lighting grid traversal
6:11Begin to enable GridRayCast() to invoke and verify the inline lighting grid traversal
6:11Begin to enable GridRayCast() to invoke and verify the inline lighting grid traversal
9:39Consider the problem with our WalkTable X, Y, X, Z ordering
📖
9:39Consider the problem with our WalkTable X, Y, X, Z ordering
📖
9:39Consider the problem with our WalkTable X, Y, X, Z ordering
📖
10:31Revert GridRayCast()
10:31Revert GridRayCast()
10:31Revert GridRayCast()
10:41Consider ordering our WalkTable X, Y, Z, X
📖
10:41Consider ordering our WalkTable X, Y, Z, X
📖
10:41Consider ordering our WalkTable X, Y, Z, X
📖
14:00Run hhlightprof successfully
🏃
14:00Run hhlightprof successfully
🏃
14:00Run hhlightprof successfully
🏃
14:08Provoke an error in the BestTable
14:08Provoke an error in the BestTable
14:08Provoke an error in the BestTable
14:21Run hhlightprof with a fault
🏃
14:21Run hhlightprof with a fault
🏃
14:21Run hhlightprof with a fault
🏃
14:28Change ComputeWalkTableFast() to pack our SIMD lanes X, Y, Z, X
14:28Change ComputeWalkTableFast() to pack our SIMD lanes X, Y, Z, X
14:28Change ComputeWalkTableFast() to pack our SIMD lanes X, Y, Z, X
19:48Run hhlightprof with a fault
🏃
19:48Run hhlightprof with a fault
🏃
19:48Run hhlightprof with a fault
🏃
19:54Update the MaskTable in ComputeWalkTableFast() to work with X, Y, Z, X ordering
19:54Update the MaskTable in ComputeWalkTableFast() to work with X, Y, Z, X ordering
19:54Update the MaskTable in ComputeWalkTableFast() to work with X, Y, Z, X ordering
20:30Run hhlightprof with a fault
🏃
20:30Run hhlightprof with a fault
🏃
20:30Run hhlightprof with a fault
🏃
21:11Fix the X, Y, Z, X ordered MaskTable in ComputeWalkTableFast()
21:11Fix the X, Y, Z, X ordered MaskTable in ComputeWalkTableFast()
21:11Fix the X, Y, Z, X ordered MaskTable in ComputeWalkTableFast()
21:28Run hhlightprof with a fault
🏃
21:28Run hhlightprof with a fault
🏃
21:28Run hhlightprof with a fault
🏃
21:57Update ComputeWalkTableFast() to set t4s from shuffled X, Y, Z, X ordering
21:57Update ComputeWalkTableFast() to set t4s from shuffled X, Y, Z, X ordering
21:57Update ComputeWalkTableFast() to set t4s from shuffled X, Y, Z, X ordering
22:16Run hhlightprof with a fault
🏃
22:16Run hhlightprof with a fault
🏃
22:16Run hhlightprof with a fault
🏃
27:02Fix the BestTable documentation
27:02Fix the BestTable documentation
27:02Fix the BestTable documentation
27:57Investigate why t4's fourth SIMD lane is unset
🏃
27:57Investigate why t4's fourth SIMD lane is unset
🏃
27:57Investigate why t4's fourth SIMD lane is unset
🏃
28:36Fix MaskTable to set the fourth SIMD lane
28:36Fix MaskTable to set the fourth SIMD lane
28:36Fix MaskTable to set the fourth SIMD lane
29:00Run hhlightprof successfully
🏃
29:00Run hhlightprof successfully
🏃
29:00Run hhlightprof successfully
🏃
29:03Change ComputeWalkTableFast() to leave the fourth SIMD lane blank, to give X, Y, Z
29:03Change ComputeWalkTableFast() to leave the fourth SIMD lane blank, to give X, Y, Z
29:03Change ComputeWalkTableFast() to leave the fourth SIMD lane blank, to give X, Y, Z
34:35Run hhlightprof with a fault
🏃
34:35Run hhlightprof with a fault
🏃
34:35Run hhlightprof with a fault
🏃
35:00Make ComputeWalkTableFast() zero out the fourth lane of InvRayD4
35:00Make ComputeWalkTableFast() zero out the fourth lane of InvRayD4
35:00Make ComputeWalkTableFast() zero out the fourth lane of InvRayD4
35:19Run hhlightprof with a fault
🏃
35:19Run hhlightprof with a fault
🏃
35:19Run hhlightprof with a fault
🏃
36:40Update the MaskTable in ComputeWalkTableFast() for X, Y, Z ordering
36:40Update the MaskTable in ComputeWalkTableFast() for X, Y, Z ordering
36:40Update the MaskTable in ComputeWalkTableFast() for X, Y, Z ordering
37:13Run hhlightprof with a fault
🏃
37:13Run hhlightprof with a fault
🏃
37:13Run hhlightprof with a fault
🏃
37:43Update the ShuffleTable in ComputeWalkTableFast() for X, Y, Z ordering
37:43Update the ShuffleTable in ComputeWalkTableFast() for X, Y, Z ordering
37:43Update the ShuffleTable in ComputeWalkTableFast() for X, Y, Z ordering
38:09Run hhlightprof with a fault
🏃
38:09Run hhlightprof with a fault
🏃
38:09Run hhlightprof with a fault
🏃
38:40Step through ComputeWalkTableFast()
🏃
38:40Step through ComputeWalkTableFast()
🏃
38:40Step through ComputeWalkTableFast()
🏃
40:31Document the BestTable in ComputeWalkTableFast()
40:31Document the BestTable in ComputeWalkTableFast()
40:31Document the BestTable in ComputeWalkTableFast()
47:57Make ComputeWalkTableFast() set the BestTable entry for all-equal as 0 (or X)
47:57Make ComputeWalkTableFast() set the BestTable entry for all-equal as 0 (or X)
47:57Make ComputeWalkTableFast() set the BestTable entry for all-equal as 0 (or X)
48:25Run hhlightprof until faulting on SampleDirIndex 1012 (out of 1024)
🏃
48:25Run hhlightprof until faulting on SampleDirIndex 1012 (out of 1024)
🏃
48:25Run hhlightprof until faulting on SampleDirIndex 1012 (out of 1024)
🏃
50:26Document and determine that the Y > Z case simply involves a preference problem
50:26Document and determine that the Y > Z case simply involves a preference problem
50:26Document and determine that the Y > Z case simply involves a preference problem
52:53Change the old ComputeWalkTable() to prefer Z in the Y > Z case
52:53Change the old ComputeWalkTable() to prefer Z in the Y > Z case
52:53Change the old ComputeWalkTable() to prefer Z in the Y > Z case
54:25Run hhlightprof successfully
🏃
54:25Run hhlightprof successfully
🏃
54:25Run hhlightprof successfully
🏃
54:37Loft up the BestTable, ShuffleTable, MaskTable and related values from ComputeWalkTableFast() to GridRayCast(), prefixing their names with t
54:37Loft up the BestTable, ShuffleTable, MaskTable and related values from ComputeWalkTableFast() to GridRayCast(), prefixing their names with t
54:37Loft up the BestTable, ShuffleTable, MaskTable and related values from ComputeWalkTableFast() to GridRayCast(), prefixing their names with t
1:07:24Run hhlightprof with a fault
🏃
1:07:24Run hhlightprof with a fault
🏃
1:07:24Run hhlightprof with a fault
🏃
1:08:19Fix GridRayCast() to update tTerminateVerify after verifying
1:08:19Fix GridRayCast() to update tTerminateVerify after verifying
1:08:19Fix GridRayCast() to update tTerminateVerify after verifying
1:08:27Run hhlightprof with a fault
🏃
1:08:27Run hhlightprof with a fault
🏃
1:08:27Run hhlightprof with a fault
🏃
1:10:34Double-check what ComputeWalkTable() does when a Ray is pointing backwards
📖
1:10:34Double-check what ComputeWalkTable() does when a Ray is pointing backwards
📖
1:10:34Double-check what ComputeWalkTable() does when a Ray is pointing backwards
📖
1:12:04Step through GridRayCast()
🏃
1:12:04Step through GridRayCast()
🏃
1:12:04Step through GridRayCast()
🏃
1:16:31The WalkTable contains garbage also in-game
🏃
1:16:31The WalkTable contains garbage also in-game
🏃
1:16:31The WalkTable contains garbage also in-game
🏃
1:18:49Step through GridRayCast() watching the tTerminate values
🏃
1:18:49Step through GridRayCast() watching the tTerminate values
🏃
1:18:49Step through GridRayCast() watching the tTerminate values
🏃
1:21:44Break into GridRayCast() and investigate the inf tTerminate
🏃
1:21:44Break into GridRayCast() and investigate the inf tTerminate
🏃
1:21:44Break into GridRayCast() and investigate the inf tTerminate
🏃
1:24:17Add a breakpoint in ComputeWalkTable() on DestIndex 6913
1:24:17Add a breakpoint in ComputeWalkTable() on DestIndex 6913
1:24:17Add a breakpoint in ComputeWalkTable() on DestIndex 6913
1:24:57Break into ComputeWalkTable() on DestIndex 6913, with inf tTerminate
🏃
1:24:57Break into ComputeWalkTable() on DestIndex 6913, with inf tTerminate
🏃
1:24:57Break into ComputeWalkTable() on DestIndex 6913, with inf tTerminate
🏃
1:27:59Add a breakpoint earlier in ComputeWalkTable() on DestIndex 6912
1:27:59Add a breakpoint earlier in ComputeWalkTable() on DestIndex 6912
1:27:59Add a breakpoint earlier in ComputeWalkTable() on DestIndex 6912
1:28:16Step through ComputeWalkTable() on DestIndex 6912
🏃
1:28:16Step through ComputeWalkTable() on DestIndex 6912
🏃
1:28:16Step through ComputeWalkTable() on DestIndex 6912
🏃
1:29:32Make ComputeWalkTable() and ComputeWalkTableFast() use the AbsoluteValue of the ray direction
1:29:32Make ComputeWalkTable() and ComputeWalkTableFast() use the AbsoluteValue of the ray direction
1:29:32Make ComputeWalkTable() and ComputeWalkTableFast() use the AbsoluteValue of the ray direction
1:30:31Successfully step through ComputeWalkTable() on DestIndex 6912, and into the game
🏃
1:30:31Successfully step through ComputeWalkTable() on DestIndex 6912, and into the game
🏃
1:30:31Successfully step through ComputeWalkTable() on DestIndex 6912, and into the game
🏃
1:31:04Run the game successfully in -O2
🏃
1:31:04Run the game successfully in -O2
🏃
1:31:04Run the game successfully in -O2
🏃
1:31:32Switch GridRayCast() over to use the inline lighting grid traversal
1:31:32Switch GridRayCast() over to use the inline lighting grid traversal
1:31:32Switch GridRayCast() over to use the inline lighting grid traversal
1:32:46Run the game successfully
🏃
1:32:46Run the game successfully
🏃
1:32:46Run the game successfully
🏃
1:33:01hhlightprof total seconds elapsed: 6.826915
🏃
1:33:01hhlightprof total seconds elapsed: 6.826915
🏃
1:33:01hhlightprof total seconds elapsed: 6.826915
🏃
1:33:47Toggle GridRayCast() to the precomputed WalkTable
1:33:47Toggle GridRayCast() to the precomputed WalkTable
1:33:47Toggle GridRayCast() to the precomputed WalkTable
1:33:57hhlightprof total seconds elapsed: 4.458800
🏃
1:33:57hhlightprof total seconds elapsed: 4.458800
🏃
1:33:57hhlightprof total seconds elapsed: 4.458800
🏃
1:35:45Change GridRayCast() to compute InvRayDPacked more concisely
1:35:45Change GridRayCast() to compute InvRayDPacked more concisely
1:35:45Change GridRayCast() to compute InvRayDPacked more concisely
1:37:16hhlightprof total seconds elapsed: 4.470019
🏃
1:37:16hhlightprof total seconds elapsed: 4.470019
🏃
1:37:16hhlightprof total seconds elapsed: 4.470019
🏃
1:37:34Toggle GridRayCast() to the inline lighting grid traversal
1:37:34Toggle GridRayCast() to the inline lighting grid traversal
1:37:34Toggle GridRayCast() to the inline lighting grid traversal
1:37:43hhlightprof total seconds elapsed: 7.426753
🏃
1:37:43hhlightprof total seconds elapsed: 7.426753
🏃
1:37:43hhlightprof total seconds elapsed: 7.426753
🏃
1:37:55Try letting GridRayCast() both use the precomputed WalkTable, and compute the traversal inline
1:37:55Try letting GridRayCast() both use the precomputed WalkTable, and compute the traversal inline
1:37:55Try letting GridRayCast() both use the precomputed WalkTable, and compute the traversal inline
1:38:32Run hhlightprof with a fault
🏃
1:38:32Run hhlightprof with a fault
🏃
1:38:32Run hhlightprof with a fault
🏃
1:39:31Break into GridRayCast() on our fault
🏃
1:39:31Break into GridRayCast() on our fault
🏃
1:39:31Break into GridRayCast() on our fault
🏃
1:41:16Prevent GridRayCast() from setting tTerminate to tTerminateVerify
1:41:16Prevent GridRayCast() from setting tTerminate to tTerminateVerify
1:41:16Prevent GridRayCast() from setting tTerminate to tTerminateVerify
1:41:26Run the game with a fault
🏃
1:41:26Run the game with a fault
🏃
1:41:26Run the game with a fault
🏃
1:42:12Prevent GridRayCast() from setting GridIndex to dGridResult
1:42:12Prevent GridRayCast() from setting GridIndex to dGridResult
1:42:12Prevent GridRayCast() from setting GridIndex to dGridResult
1:42:24Run the game successfully
🏃
1:42:24Run the game successfully
🏃
1:42:24Run the game successfully
🏃
1:42:37Run the game in -O2
🏃
1:42:37Run the game in -O2
🏃
1:42:37Run the game in -O2
🏃
1:42:57hhlightprof total seconds elapsed: 6.543860
🏃
1:42:57hhlightprof total seconds elapsed: 6.543860
🏃
1:42:57hhlightprof total seconds elapsed: 6.543860
🏃
1:43:29Inspect the assembly of our inline lighting grid traversal
🏃
1:43:29Inspect the assembly of our inline lighting grid traversal
🏃
1:43:29Inspect the assembly of our inline lighting grid traversal
🏃
1:45:36Q&A
🗩
1:45:36Q&A
🗩
1:45:36Q&A
🗩
1:45:55somebody_took_my_name Q: I think the first entry of the tShuffle and tMask tables haven't changed to x, as you have done for the BestDim table (the all equal case). It is a rare case, though (if it happens at all)
🗪
1:45:55somebody_took_my_name Q: I think the first entry of the tShuffle and tMask tables haven't changed to x, as you have done for the BestDim table (the all equal case). It is a rare case, though (if it happens at all)
🗪
1:45:55somebody_took_my_name Q: I think the first entry of the tShuffle and tMask tables haven't changed to x, as you have done for the BestDim table (the all equal case). It is a rare case, though (if it happens at all)
🗪
1:46:38Fix the ShuffleTable and MaskTable for X, Y, Z ordering
1:46:38Fix the ShuffleTable and MaskTable for X, Y, Z ordering
1:46:38Fix the ShuffleTable and MaskTable for X, Y, Z ordering
1:47:15Run the game successfully
🏃
1:47:15Run the game successfully
🏃
1:47:15Run the game successfully
🏃
1:47:44billdstrong Q: Could we be going out of the cache and that made it slow? How would we check that?
🗪
1:47:44billdstrong Q: Could we be going out of the cache and that made it slow? How would we check that?
🗪
1:47:44billdstrong Q: Could we be going out of the cache and that made it slow? How would we check that?
🗪
1:49:48Wrap it up
🗩
1:49:48Wrap it up
🗩
1:49:48Wrap it up
🗩