First Pass Optimization of Voxel Sampling
?
?

Keyboard Navigation

Global Keys

[, < / ], > Jump to previous / next episode
W, K, P / S, J, N Jump to previous / next timestamp
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 and Index Controls

a
w
s
d
h j k l


Esc Close menu / unfocus timestamp

Quotes and References Menus and Index

Enter Jump to timestamp

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:01Recap and set the stage for the day
🗩
0:01Recap and set the stage for the day
🗩
0:01Recap and set the stage for the day
🗩
2:08Describe our vectorisation of ComputeVoxelIrradianceAt()
📖
2:08Describe our vectorisation of ComputeVoxelIrradianceAt()
📖
2:08Describe our vectorisation of ComputeVoxelIrradianceAt()
📖
3:11Instrument ComputeVoxelIrradianceAt() to verify the new SIMD against the old scalar code
3:11Instrument ComputeVoxelIrradianceAt() to verify the new SIMD against the old scalar code
3:11Instrument ComputeVoxelIrradianceAt() to verify the new SIMD against the old scalar code
9:08Continue to make ComputeVoxelIrradianceAt() operate wide
9:08Continue to make ComputeVoxelIrradianceAt() operate wide
9:08Continue to make ComputeVoxelIrradianceAt() operate wide
13:14Introduce an f32_4x version of Clamp01(), with a few words on optimising compilers
13:14Introduce an f32_4x version of Clamp01(), with a few words on optimising compilers
13:14Introduce an f32_4x version of Clamp01(), with a few words on optimising compilers
16:19Continue to make ComputeVoxelIrradianceAt() operate wide
16:19Continue to make ComputeVoxelIrradianceAt() operate wide
16:19Continue to make ComputeVoxelIrradianceAt() operate wide
29:10Change the f32_4x version of Clamp01() to use ZeroF32_4x()
29:10Change the f32_4x version of Clamp01() to use ZeroF32_4x()
29:10Change the f32_4x version of Clamp01() to use ZeroF32_4x()
29:57billdstrong How is he going to test the Clamp01() if he deleted it from the original code?
🗪
29:57billdstrong How is he going to test the Clamp01() if he deleted it from the original code?
🗪
29:57billdstrong How is he going to test the Clamp01() if he deleted it from the original code?
🗪
30:04Introduce an f32_4x version Floor()1
30:04Introduce an f32_4x version Floor()1
30:04Introduce an f32_4x version Floor()1
31:46Fix compile errors in our ComputeVoxelIrradianceAt() vectorisation
31:46Fix compile errors in our ComputeVoxelIrradianceAt() vectorisation
31:46Fix compile errors in our ComputeVoxelIrradianceAt() vectorisation
35:52Optimise ComputeVoxelIrradianceAt() to sum weights before broadcasting them
35:52Optimise ComputeVoxelIrradianceAt() to sum weights before broadcasting them
35:52Optimise ComputeVoxelIrradianceAt() to sum weights before broadcasting them
38:19On the cognitive demand of SIMD, as opposed to instruction sets like AVX-512 and NEON
🗩
38:19On the cognitive demand of SIMD, as opposed to instruction sets like AVX-512 and NEON
🗩
38:19On the cognitive demand of SIMD, as opposed to instruction sets like AVX-512 and NEON
🗩
42:01Continue to make ComputeVoxelIrradianceAt() operate wide, loading in the tiles2,3
42:01Continue to make ComputeVoxelIrradianceAt() operate wide, loading in the tiles2,3
42:01Continue to make ComputeVoxelIrradianceAt() operate wide, loading in the tiles2,3
1:09:06Introduce ConvertS32()4
1:09:06Introduce ConvertS32()4
1:09:06Introduce ConvertS32()4
1:12:44Finish making ComputeVoxelIrradianceAt() operate wide, introducing an f32_4x version of Clamp()
1:12:44Finish making ComputeVoxelIrradianceAt() operate wide, introducing an f32_4x version of Clamp()
1:12:44Finish making ComputeVoxelIrradianceAt() operate wide, introducing an f32_4x version of Clamp()
1:18:39Run the game
🏃
1:18:39Run the game
🏃
1:18:39Run the game
🏃
1:19:02Step through ComputeVoxelIrradianceAt() to find that our vectorised code has been compiled out
🏃
1:19:02Step through ComputeVoxelIrradianceAt() to find that our vectorised code has been compiled out
🏃
1:19:02Step through ComputeVoxelIrradianceAt() to find that our vectorised code has been compiled out
🏃
1:19:28Make ComputeVoxelIrradianceAt() return the SIMD computed result
1:19:28Make ComputeVoxelIrradianceAt() return the SIMD computed result
1:19:28Make ComputeVoxelIrradianceAt() return the SIMD computed result
1:19:50Step through ComputeVoxelIrradianceAt() and try to check out our vectorised code
🏃
1:19:50Step through ComputeVoxelIrradianceAt() and try to check out our vectorised code
🏃
1:19:50Step through ComputeVoxelIrradianceAt() and try to check out our vectorised code
🏃
1:21:15Disable multithreading of the lighting
1:21:15Disable multithreading of the lighting
1:21:15Disable multithreading of the lighting
1:21:45Step through our multithreaded ComputeVoxelIrradianceAt()
🏃
1:21:45Step through our multithreaded ComputeVoxelIrradianceAt()
🏃
1:21:45Step through our multithreaded ComputeVoxelIrradianceAt()
🏃
1:22:19Comment out the old scalar ComputeVoxelIrradianceAt()
1:22:19Comment out the old scalar ComputeVoxelIrradianceAt()
1:22:19Comment out the old scalar ComputeVoxelIrradianceAt()
1:23:16Step through our single-threaded ComputeVoxelIrradianceAt()
🏃
1:23:16Step through our single-threaded ComputeVoxelIrradianceAt()
🏃
1:23:16Step through our single-threaded ComputeVoxelIrradianceAt()
🏃
1:23:54Update RemedyBG
🗹
1:23:54Update RemedyBG
🗹
1:23:54Update RemedyBG
🗹
1:26:30Step through the assembly of our new vectorised ComputeVoxelIrradianceAt()
🏃
1:26:30Step through the assembly of our new vectorised ComputeVoxelIrradianceAt()
🏃
1:26:30Step through the assembly of our new vectorised ComputeVoxelIrradianceAt()
🏃
1:28:41Our lighting looks like the vectorisation just worked
🏃
1:28:41Our lighting looks like the vectorisation just worked
🏃
1:28:41Our lighting looks like the vectorisation just worked
🏃
1:28:47Enable multithreading of the lighting
1:28:47Enable multithreading of the lighting
1:28:47Enable multithreading of the lighting
1:29:05Our lighting looks like it did before
🏃
1:29:05Our lighting looks like it did before
🏃
1:29:05Our lighting looks like it did before
🏃
1:29:18hhlightprof total seconds elapsed: 5.110175
🏃
1:29:18hhlightprof total seconds elapsed: 5.110175
🏃
1:29:18hhlightprof total seconds elapsed: 5.110175
🏃
1:30:56Disable LIGHTING_USE_GRID
1:30:56Disable LIGHTING_USE_GRID
1:30:56Disable LIGHTING_USE_GRID
1:31:13hhlightprof total seconds elapsed: 6.390334
🏃
1:31:13hhlightprof total seconds elapsed: 6.390334
🏃
1:31:13hhlightprof total seconds elapsed: 6.390334
🏃
1:32:36Enable LIGHTING_USE_GRID
1:32:36Enable LIGHTING_USE_GRID
1:32:36Enable LIGHTING_USE_GRID
1:32:5477% of our frame time spent in ComputeLightPropagationWork
🏃
1:32:5477% of our frame time spent in ComputeLightPropagationWork
🏃
1:32:5477% of our frame time spent in ComputeLightPropagationWork
🏃
1:34:09Q&A
🗩
1:34:09Q&A
🗩
1:34:09Q&A
🗩
1:35:00billdstrong Q: Do you plan on bringing your editor on stream, or not? You keep bragging about it
🗪
1:35:00billdstrong Q: Do you plan on bringing your editor on stream, or not? You keep bragging about it
🗪
1:35:00billdstrong Q: Do you plan on bringing your editor on stream, or not? You keep bragging about it
🗪
1:35:05mindmark42 Q: Can you run lightprof without any days?
🗪
1:35:05mindmark42 Q: Can you run lightprof without any days?
🗪
1:35:05mindmark42 Q: Can you run lightprof without any days?
🗪
1:35:17mindmark42 rays
🗪
1:35:17mindmark42 rays
🗪
1:35:17mindmark42 rays
🗪
1:35:28Try decreasing the CostMetric from 16 to 0 in GridRayCast()
1:35:28Try decreasing the CostMetric from 16 to 0 in GridRayCast()
1:35:28Try decreasing the CostMetric from 16 to 0 in GridRayCast()
1:36:03hhlightprof total seconds elapsed: 2.583887
🏃
1:36:03hhlightprof total seconds elapsed: 2.583887
🏃
1:36:03hhlightprof total seconds elapsed: 2.583887
🏃
1:36:47vaualbus Q: Can we time that function with the debug system? So we see how long the top part of that function takes?
🗪
1:36:47vaualbus Q: Can we time that function with the debug system? So we see how long the top part of that function takes?
🗪
1:36:47vaualbus Q: Can we time that function with the debug system? So we see how long the top part of that function takes?
🗪
1:37:01equivocatorrr Q: Why is frame time stability such a rare / impossible thing without leaving headroom?
🗪
1:37:01equivocatorrr Q: Why is frame time stability such a rare / impossible thing without leaving headroom?
🗪
1:37:01equivocatorrr Q: Why is frame time stability such a rare / impossible thing without leaving headroom?
🗪
1:38:54pragmascrypt Q: Did you activate threading again for the benchmark?
🗪
1:38:54pragmascrypt Q: Did you activate threading again for the benchmark?
🗪
1:38:54pragmascrypt Q: Did you activate threading again for the benchmark?
🗪
1:39:18sagian2005 Q: Casey, I just sent you an email. It's re: the SSE stuff you did on today's stream. You might get a smile out of it
🗪
1:39:18sagian2005 Q: Casey, I just sent you an email. It's re: the SSE stuff you did on today's stream. You might get a smile out of it
🗪
1:39:18sagian2005 Q: Casey, I just sent you an email. It's re: the SSE stuff you did on today's stream. You might get a smile out of it
🗪
1:39:29nobodad Q: naysayer88 mentioned that you discussed with him why programming languages shouldn't have unsigned integers. Have you posted your rationale somewhere that I can read? Would you be willing to?
🗪
1:39:29nobodad Q: naysayer88 mentioned that you discussed with him why programming languages shouldn't have unsigned integers. Have you posted your rationale somewhere that I can read? Would you be willing to?
🗪
1:39:29nobodad Q: naysayer88 mentioned that you discussed with him why programming languages shouldn't have unsigned integers. Have you posted your rationale somewhere that I can read? Would you be willing to?
🗪
1:40:49fl_aw3n Q: Can I compile all files in all subdirectories with CL recursively?
🗪
1:40:49fl_aw3n Q: Can I compile all files in all subdirectories with CL recursively?
🗪
1:40:49fl_aw3n Q: Can I compile all files in all subdirectories with CL recursively?
🗪
1:41:06yesyesyourmother Q: Can you use some of the lighting work you do on Handmade Hero in different projects?
🗪
1:41:06yesyesyourmother Q: Can you use some of the lighting work you do on Handmade Hero in different projects?
🗪
1:41:06yesyesyourmother Q: Can you use some of the lighting work you do on Handmade Hero in different projects?
🗪
1:41:31relvet Q: When do we add special sauce, and how much of it? I feel this game needs a Sauce-O-Meter
🗪
1:41:31relvet Q: When do we add special sauce, and how much of it? I feel this game needs a Sauce-O-Meter
🗪
1:41:31relvet Q: When do we add special sauce, and how much of it? I feel this game needs a Sauce-O-Meter
🗪
1:42:31mindmark42 Q: Couldn't the v3 XYZ be loaded with a single load if we pad them?
🗪
1:42:31mindmark42 Q: Couldn't the v3 XYZ be loaded with a single load if we pad them?
🗪
1:42:31mindmark42 Q: Couldn't the v3 XYZ be loaded with a single load if we pad them?
🗪
1:46:11exp_ix Q: Are there any fundamental differences between games engines that use low poly models vs this one?
🗪
1:46:11exp_ix Q: Are there any fundamental differences between games engines that use low poly models vs this one?
🗪
1:46:11exp_ix Q: Are there any fundamental differences between games engines that use low poly models vs this one?
🗪
1:47:34noobgirrafe How can I get your emacs config?
🗪
1:47:34noobgirrafe How can I get your emacs config?
🗪
1:47:34noobgirrafe How can I get your emacs config?
🗪
1:48:08Shut it down
🗩
1:48:08Shut it down
🗩
1:48:08Shut it down
🗩