Finishing Debugging the Grid Raycaster
?
?

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:35Demo the differently coloured ray walk boxes, notably the magenta leaf ones beyond the occluding box
🏃
0:35Demo the differently coloured ray walk boxes, notably the magenta leaf ones beyond the occluding box
🏃
0:35Demo the differently coloured ray walk boxes, notably the magenta leaf ones beyond the occluding box
🏃
3:48Describe the ray colouring debug visualisation code in GridRayCast()
📖
3:48Describe the ray colouring debug visualisation code in GridRayCast()
📖
3:48Describe the ray colouring debug visualisation code in GridRayCast()
📖
5:04Make GridRayCast() draw the occluders within leaf boxes
5:04Make GridRayCast() draw the occluders within leaf boxes
5:04Make GridRayCast() draw the occluders within leaf boxes
8:09See no occluders within those leaf boxes
🏃
8:09See no occluders within those leaf boxes
🏃
8:09See no occluders within those leaf boxes
🏃
9:03Make GridRayCast() colour the occluder boxes white
9:03Make GridRayCast() colour the occluder boxes white
9:03Make GridRayCast() colour the occluder boxes white
9:30See no white occluder boxes
🏃
9:30See no white occluder boxes
🏃
9:30See no white occluder boxes
🏃
9:40Make GridRayCast() enlarge the occluder boxes
9:40Make GridRayCast() enlarge the occluder boxes
9:40Make GridRayCast() enlarge the occluder boxes
10:12See no occluders
🏃
10:12See no occluders
🏃
10:12See no occluders
🏃
10:24Compile in -Od
10:24Compile in -Od
10:24Compile in -Od
10:44Try unsuccessfully to break on PushDebugBox() for an occluder
🏃
10:44Try unsuccessfully to break on PushDebugBox() for an occluder
🏃
10:44Try unsuccessfully to break on PushDebugBox() for an occluder
🏃
13:08Fix GridBuildSpatialPartition() to modify StartIndex only after having used it to set OnePastLastIndex
13:08Fix GridBuildSpatialPartition() to modify StartIndex only after having used it to set OnePastLastIndex
13:08Fix GridBuildSpatialPartition() to modify StartIndex only after having used it to set OnePastLastIndex
13:19How to succeed in the game industry, according to Jon Blow: Always update OnePastLastIndex before StartIndex
🗩
13:19How to succeed in the game industry, according to Jon Blow: Always update OnePastLastIndex before StartIndex
🗩
13:19How to succeed in the game industry, according to Jon Blow: Always update OnePastLastIndex before StartIndex
🗩
14:18Again try unsuccessfully to break on PushDebugBox() for an occluder
🏃
14:18Again try unsuccessfully to break on PushDebugBox() for an occluder
🏃
14:18Again try unsuccessfully to break on PushDebugBox() for an occluder
🏃
15:23Fix GridBuildSpatialPartition() to increment OnePastLastIndex
15:23Fix GridBuildSpatialPartition() to increment OnePastLastIndex
15:23Fix GridBuildSpatialPartition() to increment OnePastLastIndex
17:34Break on PushDebugBox() for an occluder, and inspect the values
🏃
17:34Break on PushDebugBox() for an occluder, and inspect the values
🏃
17:34Break on PushDebugBox() for an occluder, and inspect the values
🏃
18:32See that our ray walk debug visualisation now reports more correct results
🏃
18:32See that our ray walk debug visualisation now reports more correct results
🏃
18:32See that our ray walk debug visualisation now reports more correct results
🏃
18:56In an -O2 build, with our ray hitting, we are not drawing the ray itself
🏃
18:56In an -O2 build, with our ray hitting, we are not drawing the ray itself
🏃
18:56In an -O2 build, with our ray hitting, we are not drawing the ray itself
🏃
19:39Prevent GridRayCast() from enlarging the occluder boxes, and make it draw the ray
19:39Prevent GridRayCast() from enlarging the occluder boxes, and make it draw the ray
19:39Prevent GridRayCast() from enlarging the occluder boxes, and make it draw the ray
21:59See our ray
🏃
21:59See our ray
🏃
21:59See our ray
🏃
22:34Determine the ProbeSampleP computation in GridRayCast() to be busted
📖
22:34Determine the ProbeSampleP computation in GridRayCast() to be busted
📖
22:34Determine the ProbeSampleP computation in GridRayCast() to be busted
📖
23:31Step into the origin ray drawing PushDebugLine() in GridRayCast(), to see that tRay is erroneous
🏃
23:31Step into the origin ray drawing PushDebugLine() in GridRayCast(), to see that tRay is erroneous
🏃
23:31Step into the origin ray drawing PushDebugLine() in GridRayCast(), to see that tRay is erroneous
🏃
26:27Add a break location in the SomethingHit branch in GridRayCast()
26:27Add a break location in the SomethingHit branch in GridRayCast()
26:27Add a break location in the SomethingHit branch in GridRayCast()
27:01Break into the SomethingHit branch in GridRayCast(), scrutinise the HComp shuffling code, and consider the hit detection code to be wrong
🏃
27:01Break into the SomethingHit branch in GridRayCast(), scrutinise the HComp shuffling code, and consider the hit detection code to be wrong
🏃
27:01Break into the SomethingHit branch in GridRayCast(), scrutinise the HComp shuffling code, and consider the hit detection code to be wrong
🏃
30:50Scrutinise GridRayCast() for hit bugs, keeping it in the back of our mind
30:50Scrutinise GridRayCast() for hit bugs, keeping it in the back of our mind
30:50Scrutinise GridRayCast() for hit bugs, keeping it in the back of our mind
33:01Again break into the SomethingHit branch in GridRayCast(), and scrutinise the HComp shuffling code
🏃
33:01Again break into the SomethingHit branch in GridRayCast(), and scrutinise the HComp shuffling code
🏃
33:01Again break into the SomethingHit branch in GridRayCast(), and scrutinise the HComp shuffling code
🏃
36:03Fix GridRayCast() to make _mm_extract_epi16() select the 1st 16-bit integer when setting ShuffleIndex
36:03Fix GridRayCast() to make _mm_extract_epi16() select the 1st 16-bit integer when setting ShuffleIndex
36:03Fix GridRayCast() to make _mm_extract_epi16() select the 1st 16-bit integer when setting ShuffleIndex
36:34Break into the SomethingHit branch in GridRayCast(), and past the ray selection
🏃
36:34Break into the SomethingHit branch in GridRayCast(), and past the ray selection
🏃
36:34Break into the SomethingHit branch in GridRayCast(), and past the ray selection
🏃
38:56Compile in -O2
38:56Compile in -O2
38:56Compile in -O2
39:05Our hit detection is now correct
🏃
39:05Our hit detection is now correct
🏃
39:05Our hit detection is now correct
🏃
39:19Make GridRayCast() draw a small box at the hit point
39:19Make GridRayCast() draw a small box at the hit point
39:19Make GridRayCast() draw a small box at the hit point
40:17Our hit detection is definitely close
🏃
40:17Our hit detection is definitely close
🏃
40:17Our hit detection is definitely close
🏃
40:58Make GridRayCast() decrease the distance walked by our rays
40:58Make GridRayCast() decrease the distance walked by our rays
40:58Make GridRayCast() decrease the distance walked by our rays
42:05See our shorter ray travel distance
🏃
42:05See our shorter ray travel distance
🏃
42:05See our shorter ray travel distance
🏃
42:11Make GridRayCast() slightly increase the distance walked by our rays
42:11Make GridRayCast() slightly increase the distance walked by our rays
42:11Make GridRayCast() slightly increase the distance walked by our rays
42:27See our better ray travel distance, and check the performance
🏃
42:27See our better ray travel distance, and check the performance
🏃
42:27See our better ray travel distance, and check the performance
🏃
42:55Make GridRayCast() slightly decrease the distance walked by our rays
42:55Make GridRayCast() slightly decrease the distance walked by our rays
42:55Make GridRayCast() slightly decrease the distance walked by our rays
43:04Our frame time is basically unchanged
🏃
43:04Our frame time is basically unchanged
🏃
43:04Our frame time is basically unchanged
🏃
43:17Rerun the game to regenerate the walk table
🏃
43:17Rerun the game to regenerate the walk table
🏃
43:17Rerun the game to regenerate the walk table
🏃
43:46Make GridRayCast() increase the distance walked by our rays
43:46Make GridRayCast() increase the distance walked by our rays
43:46Make GridRayCast() increase the distance walked by our rays
44:00Make GridRayCast() draw the normal of our hit surface
44:00Make GridRayCast() draw the normal of our hit surface
44:00Make GridRayCast() draw the normal of our hit surface
44:45Check out our correct normal
🏃
44:45Check out our correct normal
🏃
44:45Check out our correct normal
🏃
45:02Add a DebugGridIndex for FullCast() to use
45:02Add a DebugGridIndex for FullCast() to use
45:02Add a DebugGridIndex for FullCast() to use
47:24See the DebugGridIndex in our UI
🏃
47:24See the DebugGridIndex in our UI
🏃
47:24See the DebugGridIndex in our UI
🏃
47:50Begin to make DEBUGBeginInteract() and DEBUGInteract() support editable u32 values
47:50Begin to make DEBUGBeginInteract() and DEBUGInteract() support editable u32 values
47:50Begin to make DEBUGBeginInteract() and DEBUGInteract() support editable u32 values
51:08Revert, and instead make the DebugGridIndex be a float, for editing
51:08Revert, and instead make the DebugGridIndex be a float, for editing
51:08Revert, and instead make the DebugGridIndex be a float, for editing
51:50Try editing the DebugGridIndex
🏃
51:50Try editing the DebugGridIndex
🏃
51:50Try editing the DebugGridIndex
🏃
52:24Change DEBUGInteract() to edit draggable values in X
52:24Change DEBUGInteract() to edit draggable values in X
52:24Change DEBUGInteract() to edit draggable values in X
52:37Try editing the DebugGridIndex
🏃
52:37Try editing the DebugGridIndex
🏃
52:37Try editing the DebugGridIndex
🏃
53:21Make FullCast() set the DebugGridIndex to 5×4677
53:21Make FullCast() set the DebugGridIndex to 5×4677
53:21Make FullCast() set the DebugGridIndex to 5×4677
53:43Edit the DebugGridIndex
🏃
53:43Edit the DebugGridIndex
🏃
53:43Edit the DebugGridIndex
🏃
53:54Make FullCast() set the DebugGridIndex to 3×4677
53:54Make FullCast() set the DebugGridIndex to 3×4677
53:54Make FullCast() set the DebugGridIndex to 3×4677
54:08Edit the DebugGridIndex to 14889
🏃
54:08Edit the DebugGridIndex to 14889
🏃
54:08Edit the DebugGridIndex to 14889
🏃
55:47Make FullCast() set the DebugGridIndex to 14889 + (24×16)
55:47Make FullCast() set the DebugGridIndex to 14889 + (24×16)
55:47Make FullCast() set the DebugGridIndex to 14889 + (24×16)
56:31Check out our ray
🏃
56:31Check out our ray
🏃
56:31Check out our ray
🏃
56:42Make FullCast() set the DebugGridIndex to 14889 + (26×18)
56:42Make FullCast() set the DebugGridIndex to 14889 + (26×18)
56:42Make FullCast() set the DebugGridIndex to 14889 + (26×18)
56:58Try to check out our ray
🏃
56:58Try to check out our ray
🏃
56:58Try to check out our ray
🏃
57:07Make FullCast() set the DebugGridIndex to 14889 + (SpatialGrid.CellCount.x × SpatialGrid.CellCount.y)
57:07Make FullCast() set the DebugGridIndex to 14889 + (SpatialGrid.CellCount.x × SpatialGrid.CellCount.y)
57:07Make FullCast() set the DebugGridIndex to 14889 + (SpatialGrid.CellCount.x × SpatialGrid.CellCount.y)
57:52Check out our ray
🏃
57:52Check out our ray
🏃
57:52Check out our ray
🏃
58:05Augment lighting_solution with a DebugGridIndex and DebugRayIndex for the single-threaded UpdateLighting() to set
58:05Augment lighting_solution with a DebugGridIndex and DebugRayIndex for the single-threaded UpdateLighting() to set
58:05Augment lighting_solution with a DebugGridIndex and DebugRayIndex for the single-threaded UpdateLighting() to set
1:01:51Try editing our DebugGridIndex and DebugRayIndex to 16317 and 42
🏃
1:01:51Try editing our DebugGridIndex and DebugRayIndex to 16317 and 42
🏃
1:01:51Try editing our DebugGridIndex and DebugRayIndex to 16317 and 42
🏃
1:04:47Make UpdateLighting() set DebugGridIndex and DebugRayIndex to 16317 and 42
1:04:47Make UpdateLighting() set DebugGridIndex and DebugRayIndex to 16317 and 42
1:04:47Make UpdateLighting() set DebugGridIndex and DebugRayIndex to 16317 and 42
1:05:13Confirm that we've picked the right ray
🏃
1:05:13Confirm that we've picked the right ray
🏃
1:05:13Confirm that we've picked the right ray
🏃
1:05:18Consider scrutinising ComputeWalkTable() for bugs
📖
1:05:18Consider scrutinising ComputeWalkTable() for bugs
📖
1:05:18Consider scrutinising ComputeWalkTable() for bugs
📖
1:05:54Show our erroneous hit
🏃
1:05:54Show our erroneous hit
🏃
1:05:54Show our erroneous hit
🏃
1:06:24Fix ComputeWalkTable() to correctly set tTerminate
1:06:24Fix ComputeWalkTable() to correctly set tTerminate
1:06:24Fix ComputeWalkTable() to correctly set tTerminate
1:07:22Check out our correct hit
🏃
1:07:22Check out our correct hit
🏃
1:07:22Check out our correct hit
🏃
1:07:48Try editing our DebugGridIndex and DebugRayIndex, and consider the ray cast to be correct
🏃
1:07:48Try editing our DebugGridIndex and DebugRayIndex, and consider the ray cast to be correct
🏃
1:07:48Try editing our DebugGridIndex and DebugRayIndex, and consider the ray cast to be correct
🏃
1:08:54Consider scrutinising GridRayCast() for bugs in the TransferPPS
📖
1:08:54Consider scrutinising GridRayCast() for bugs in the TransferPPS
📖
1:08:54Consider scrutinising GridRayCast() for bugs in the TransferPPS
📖
1:10:46Disable LIGHTING_USE_GRID
1:10:46Disable LIGHTING_USE_GRID
1:10:46Disable LIGHTING_USE_GRID
1:11:07Check out the old AABB ray traced lighting
🏃
1:11:07Check out the old AABB ray traced lighting
🏃
1:11:07Check out the old AABB ray traced lighting
🏃
1:11:21Enable LIGHTING_USE_GRID
1:11:21Enable LIGHTING_USE_GRID
1:11:21Enable LIGHTING_USE_GRID
1:11:31Check out the new grid ray traced lighting
🏃
1:11:31Check out the new grid ray traced lighting
🏃
1:11:31Check out the new grid ray traced lighting
🏃
1:12:18Scrutinise the TransferPPS computation in GridRayCast()
📖
1:12:18Scrutinise the TransferPPS computation in GridRayCast()
📖
1:12:18Scrutinise the TransferPPS computation in GridRayCast()
📖
1:19:19Make GridRayCast() at least index into a different TransferPPS for each ray
1:19:19Make GridRayCast() at least index into a different TransferPPS for each ray
1:19:19Make GridRayCast() at least index into a different TransferPPS for each ray
1:20:16Our lighting remains wrong
🏃
1:20:16Our lighting remains wrong
🏃
1:20:16Our lighting remains wrong
🏃
1:20:50Prevent GridRayCast() from applying the moon light, and make it always set ProbeSamplePSingle
1:20:50Prevent GridRayCast() from applying the moon light, and make it always set ProbeSamplePSingle
1:20:50Prevent GridRayCast() from applying the moon light, and make it always set ProbeSamplePSingle
1:23:24See immediate full-bright light
🏃
1:23:24See immediate full-bright light
🏃
1:23:24See immediate full-bright light
🏃
1:25:01Edit our DebugRayIndex and note that our speed has reduced
🏃
1:25:01Edit our DebugRayIndex and note that our speed has reduced
🏃
1:25:01Edit our DebugRayIndex and note that our speed has reduced
🏃
1:25:51Rerun the game to see that our speed begins fine, but degrades
🏃
1:25:51Rerun the game to see that our speed begins fine, but degrades
🏃
1:25:51Rerun the game to see that our speed begins fine, but degrades
🏃
1:30:16Make GridRayCast() force the TransferPPS to 0
1:30:16Make GridRayCast() force the TransferPPS to 0
1:30:16Make GridRayCast() force the TransferPPS to 0
1:31:15Rerun the game to see that our speed begins and remains fine
🏃
1:31:15Rerun the game to see that our speed begins and remains fine
🏃
1:31:15Rerun the game to see that our speed begins and remains fine
🏃
1:33:05Let GridRayCast() compute the TransferPPS as normal
1:33:05Let GridRayCast() compute the TransferPPS as normal
1:33:05Let GridRayCast() compute the TransferPPS as normal
1:33:18Rerun the game to see that our speed begins fine, but degrades
🏃
1:33:18Rerun the game to see that our speed begins fine, but degrades
🏃
1:33:18Rerun the game to see that our speed begins fine, but degrades
🏃
1:33:59Make GridRayCast() add our SpecTexel DEBUG_VALUE to the debug system
1:33:59Make GridRayCast() add our SpecTexel DEBUG_VALUE to the debug system
1:33:59Make GridRayCast() add our SpecTexel DEBUG_VALUE to the debug system
1:35:45Do not see a SpecTexel in the profiler
🏃
1:35:45Do not see a SpecTexel in the profiler
🏃
1:35:45Do not see a SpecTexel in the profiler
🏃
1:36:29Make GridRayCast() add a SpecTexel DEBUG_VALUE before disabling Debugging
1:36:29Make GridRayCast() add a SpecTexel DEBUG_VALUE before disabling Debugging
1:36:29Make GridRayCast() add a SpecTexel DEBUG_VALUE before disabling Debugging
1:36:56See our SpecTexel begin large and descend to 0
🏃
1:36:56See our SpecTexel begin large and descend to 0
🏃
1:36:56See our SpecTexel begin large and descend to 0
🏃
1:37:57Make GridRayCast() add each SpecTexel DEBUG_VALUE to the debug system
1:37:57Make GridRayCast() add each SpecTexel DEBUG_VALUE to the debug system
1:37:57Make GridRayCast() add each SpecTexel DEBUG_VALUE to the debug system
1:38:06Our SpecTexel values begin the same but progress differently
🏃
1:38:06Our SpecTexel values begin the same but progress differently
🏃
1:38:06Our SpecTexel values begin the same but progress differently
🏃
1:38:55Make GridRayCast() zero-initialise TransferPPS
1:38:55Make GridRayCast() zero-initialise TransferPPS
1:38:55Make GridRayCast() zero-initialise TransferPPS
1:39:42Our SpecTexel values remain the same
🏃
1:39:42Our SpecTexel values remain the same
🏃
1:39:42Our SpecTexel values remain the same
🏃
1:39:49Revert the zero-initialisation
1:39:49Revert the zero-initialisation
1:39:49Revert the zero-initialisation
1:40:06Step through GridRayCast() and inspect the TransferPPS values
🏃
1:40:06Step through GridRayCast() and inspect the TransferPPS values
🏃
1:40:06Step through GridRayCast() and inspect the TransferPPS values
🏃
1:41:12Determine to disable multithreading of the lighting
🗩
1:41:12Determine to disable multithreading of the lighting
🗩
1:41:12Determine to disable multithreading of the lighting
🗩
1:41:28RemedyBG feature request: Stepping through the current thread
🗹
1:41:28RemedyBG feature request: Stepping through the current thread
🗹
1:41:28RemedyBG feature request: Stepping through the current thread
🗹
1:42:26Disable multithreading of the lighting
1:42:26Disable multithreading of the lighting
1:42:26Disable multithreading of the lighting
1:42:52Step through GridRayCast() and inspect the TransferPPS and SpecTexel values
🏃
1:42:52Step through GridRayCast() and inspect the TransferPPS and SpecTexel values
🏃
1:42:52Step through GridRayCast() and inspect the TransferPPS and SpecTexel values
🏃
1:44:55Assert in GridRayCast() that the SpecTexel doesn't look fishy
1:44:55Assert in GridRayCast() that the SpecTexel doesn't look fishy
1:44:55Assert in GridRayCast() that the SpecTexel doesn't look fishy
1:45:58See that the first few frames look good, until we hit our assertion
🏃
1:45:58See that the first few frames look good, until we hit our assertion
🏃
1:45:58See that the first few frames look good, until we hit our assertion
🏃
1:47:46Try decreasing the W modification from ×0.75 to ×0.01 in BuildDiffuseLightMaps()
1:47:46Try decreasing the W modification from ×0.75 to ×0.01 in BuildDiffuseLightMaps()
1:47:46Try decreasing the W modification from ×0.75 to ×0.01 in BuildDiffuseLightMaps()
1:48:33Consider the TransferPPS to perhaps be feeding back
🏃
1:48:33Consider the TransferPPS to perhaps be feeding back
🏃
1:48:33Consider the TransferPPS to perhaps be feeding back
🏃
1:49:24Note the slowness of a -O2 build
🏃
1:49:24Note the slowness of a -O2 build
🏃
1:49:24Note the slowness of a -O2 build
🏃
1:49:56Try increasing the W modification from ×0.01 to ×0.1 in BuildDiffuseLightMaps()
1:49:56Try increasing the W modification from ×0.01 to ×0.1 in BuildDiffuseLightMaps()
1:49:56Try increasing the W modification from ×0.01 to ×0.1 in BuildDiffuseLightMaps()
1:50:14See that the TransferPPS is fascinatingly unstable
🏃
1:50:14See that the TransferPPS is fascinatingly unstable
🏃
1:50:14See that the TransferPPS is fascinatingly unstable
🏃
1:51:54Consult the Intel Developer Zone,1,2 Intrinsics Guide3 and JUCE Forum4 for denormal prevention information
📖
1:51:54Consult the Intel Developer Zone,1,2 Intrinsics Guide3 and JUCE Forum4 for denormal prevention information
📖
1:51:54Consult the Intel Developer Zone,1,2 Intrinsics Guide3 and JUCE Forum4 for denormal prevention information
📖
1:56:40Make WinMainCRTStartup() set the DAZ and FZ bits, for denormal prevention
1:56:40Make WinMainCRTStartup() set the DAZ and FZ bits, for denormal prevention
1:56:40Make WinMainCRTStartup() set the DAZ and FZ bits, for denormal prevention
1:58:13The lighting transfer still happens slowly
🏃
1:58:13The lighting transfer still happens slowly
🏃
1:58:13The lighting transfer still happens slowly
🏃
1:58:22Read 10.2.3 MXCSR Control and Status Register in the Intel 64 and IA-32 Architectures Software Developer Manuals5,6
📖
1:58:22Read 10.2.3 MXCSR Control and Status Register in the Intel 64 and IA-32 Architectures Software Developer Manuals5,6
📖
1:58:22Read 10.2.3 MXCSR Control and Status Register in the Intel 64 and IA-32 Architectures Software Developer Manuals5,6
📖
2:01:16Fully define and set our desired MXCSR Control and Status Register7
2:01:16Fully define and set our desired MXCSR Control and Status Register7
2:01:16Fully define and set our desired MXCSR Control and Status Register7
2:07:27Hit a "Floating-point Inexact Result" exception
🏃
2:07:27Hit a "Floating-point Inexact Result" exception
🏃
2:07:27Hit a "Floating-point Inexact Result" exception
🏃
2:08:14Set our DesiredBits to be the ControlMask
2:08:14Set our DesiredBits to be the ControlMask
2:08:14Set our DesiredBits to be the ControlMask
2:08:35Run successfully, but still with slow lighting transfer
🏃
2:08:35Run successfully, but still with slow lighting transfer
🏃
2:08:35Run successfully, but still with slow lighting transfer
🏃
2:08:59Compile in -Od
2:08:59Compile in -Od
2:08:59Compile in -Od
2:09:15Step through WinMainCRTStartup() to see the CSR bits being set
🏃
2:09:15Step through WinMainCRTStartup() to see the CSR bits being set
🏃
2:09:15Step through WinMainCRTStartup() to see the CSR bits being set
🏃
2:10:10Move the CSR setting mode into UpdateLighting()
2:10:10Move the CSR setting mode into UpdateLighting()
2:10:10Move the CSR setting mode into UpdateLighting()
2:10:56Step through UpdateLighting() to see the CSR bits being set
🏃
2:10:56Step through UpdateLighting() to see the CSR bits being set
🏃
2:10:56Step through UpdateLighting() to see the CSR bits being set
🏃
2:11:08Compile in -O2
2:11:08Compile in -O2
2:11:08Compile in -O2
2:11:22The lighting transfer still happens slowly
🏃
2:11:22The lighting transfer still happens slowly
🏃
2:11:22The lighting transfer still happens slowly
🏃
2:11:47Introduce SetDefaultFPBehavior() for WinMainCRTStartup() to call
2:11:47Introduce SetDefaultFPBehavior() for WinMainCRTStartup() to call
2:11:47Introduce SetDefaultFPBehavior() for WinMainCRTStartup() to call
2:12:29The lighting transfer still happens slowly
🏃
2:12:29The lighting transfer still happens slowly
🏃
2:12:29The lighting transfer still happens slowly
🏃
2:12:52Enable multithreading of the lighting
2:12:52Enable multithreading of the lighting
2:12:52Enable multithreading of the lighting
2:13:09Our lighting transfer is quicker, but still feeds back
🏃
2:13:09Our lighting transfer is quicker, but still feeds back
🏃
2:13:09Our lighting transfer is quicker, but still feeds back
🏃
2:13:29Remove the LooksFishy() assertions from GridRayCast()
2:13:29Remove the LooksFishy() assertions from GridRayCast()
2:13:29Remove the LooksFishy() assertions from GridRayCast()
2:13:42Try increasing the W modification from ×0.1 to ×0.75 in BuildDiffuseLightMaps()
2:13:42Try increasing the W modification from ×0.1 to ×0.75 in BuildDiffuseLightMaps()
2:13:42Try increasing the W modification from ×0.1 to ×0.75 in BuildDiffuseLightMaps()
2:14:20Our speed begins fine, but degrades slightly
🏃
2:14:20Our speed begins fine, but degrades slightly
🏃
2:14:20Our speed begins fine, but degrades slightly
🏃
2:15:27Make UpdateLighting() call SetDefaultFPBehavior() every frame
2:15:27Make UpdateLighting() call SetDefaultFPBehavior() every frame
2:15:27Make UpdateLighting() call SetDefaultFPBehavior() every frame
2:15:59Our speed begins fine, but still degrades slightly
🏃
2:15:59Our speed begins fine, but still degrades slightly
🏃
2:15:59Our speed begins fine, but still degrades slightly
🏃
2:17:05xxthebigfoxx handmade_hero The control register is per thread, right? Are you setting it for the worker threads?
🗪
2:17:05xxthebigfoxx handmade_hero The control register is per thread, right? Are you setting it for the worker threads?
🗪
2:17:05xxthebigfoxx handmade_hero The control register is per thread, right? Are you setting it for the worker threads?
🗪
2:17:23Make ComputeLightPropagationWork() call SetDefaultFPBehavior() for each thread
2:17:23Make ComputeLightPropagationWork() call SetDefaultFPBehavior() for each thread
2:17:23Make ComputeLightPropagationWork() call SetDefaultFPBehavior() for each thread
2:17:55Excellent catch, xxthebigfoxx
🗩
2:17:55Excellent catch, xxthebigfoxx
🗩
2:17:55Excellent catch, xxthebigfoxx
🗩
2:18:05Our speed begins and remains fine, confirming that our problem was due to denormals
🏃
2:18:05Our speed begins and remains fine, confirming that our problem was due to denormals
🏃
2:18:05Our speed begins and remains fine, confirming that our problem was due to denormals
🏃
2:19:37krrsplat Go crazy with the camera to see if it causes shenanigans
🗪
2:19:37krrsplat Go crazy with the camera to see if it causes shenanigans
🗪
2:19:37krrsplat Go crazy with the camera to see if it causes shenanigans
🗪
2:20:22Q&A
🗩
2:20:22Q&A
🗩
2:20:22Q&A
🗩
2:20:57imaginaryfreedom Q: I'm building my first BVH for my raytracer. Do the previous episodes where you work on a k-d tree go into how to traverse the tree using SIMD without slamming your face into the wall nose-first? I'm having a hard time understanding how to traverse the structure effectively without throwing all the performance benefits of SIMD out the window
🗪
2:20:57imaginaryfreedom Q: I'm building my first BVH for my raytracer. Do the previous episodes where you work on a k-d tree go into how to traverse the tree using SIMD without slamming your face into the wall nose-first? I'm having a hard time understanding how to traverse the structure effectively without throwing all the performance benefits of SIMD out the window
🗪
2:20:57imaginaryfreedom Q: I'm building my first BVH for my raytracer. Do the previous episodes where you work on a k-d tree go into how to traverse the tree using SIMD without slamming your face into the wall nose-first? I'm having a hard time understanding how to traverse the structure effectively without throwing all the performance benefits of SIMD out the window
🗪
2:23:53mindmark42 Q: Can you explain more why denormals could cause performance to degrade?
🗪
2:23:53mindmark42 Q: Can you explain more why denormals could cause performance to degrade?
🗪
2:23:53mindmark42 Q: Can you explain more why denormals could cause performance to degrade?
🗪
2:26:31tonewexperiences Q: "The volatile portion consists of the six status flags, in MXCSR[0:5], while the rest of the register, MXCSR[6:15], is considered nonvolatile." By the way, so much for flush to zero once per thread being enough
🗪
2:26:31tonewexperiences Q: "The volatile portion consists of the six status flags, in MXCSR[0:5], while the rest of the register, MXCSR[6:15], is considered nonvolatile." By the way, so much for flush to zero once per thread being enough
🗪
2:26:31tonewexperiences Q: "The volatile portion consists of the six status flags, in MXCSR[0:5], while the rest of the register, MXCSR[6:15], is considered nonvolatile." By the way, so much for flush to zero once per thread being enough
🗪
2:26:51sagian2005 Q: Could you put the code back up where you set the control register bits?
🗪
2:26:51sagian2005 Q: Could you put the code back up where you set the control register bits?
🗪
2:26:51sagian2005 Q: Could you put the code back up where you set the control register bits?
🗪
2:27:29relvet Q: Would it be worth special-casing the occurrences when a ray runs parallel to the grid of the walk table? Or would the special-casing cost as much as / more than the potential time save?
🗪
2:27:29relvet Q: Would it be worth special-casing the occurrences when a ray runs parallel to the grid of the walk table? Or would the special-casing cost as much as / more than the potential time save?
🗪
2:27:29relvet Q: Would it be worth special-casing the occurrences when a ray runs parallel to the grid of the walk table? Or would the special-casing cost as much as / more than the potential time save?
🗪
2:28:13mindmark42 Q: Do you think GPUs would have the denormalized issue?
🗪
2:28:13mindmark42 Q: Do you think GPUs would have the denormalized issue?
🗪
2:28:13mindmark42 Q: Do you think GPUs would have the denormalized issue?
🗪
2:31:12internationalizationist Q: Hi, I came from Day 523 (Introduction to Git), and that's just… The terminology that git uses in such commands like "git bless --by-gnome --assume-mutable-gnomes" and any other command piss me off and makes me feel like git was developed by some Star Wars fan or something and now it's Industrial Standard! Am I doing something wrong? Is it okay to name things in computer science like "gnomes"? Is there any tutorial that explains git in an accessible format? Or do I have to bite the bullet and live through that?
🗪
2:31:12internationalizationist Q: Hi, I came from Day 523 (Introduction to Git), and that's just… The terminology that git uses in such commands like "git bless --by-gnome --assume-mutable-gnomes" and any other command piss me off and makes me feel like git was developed by some Star Wars fan or something and now it's Industrial Standard! Am I doing something wrong? Is it okay to name things in computer science like "gnomes"? Is there any tutorial that explains git in an accessible format? Or do I have to bite the bullet and live through that?
🗪
2:31:12internationalizationist Q: Hi, I came from Day 523 (Introduction to Git), and that's just… The terminology that git uses in such commands like "git bless --by-gnome --assume-mutable-gnomes" and any other command piss me off and makes me feel like git was developed by some Star Wars fan or something and now it's Industrial Standard! Am I doing something wrong? Is it okay to name things in computer science like "gnomes"? Is there any tutorial that explains git in an accessible format? Or do I have to bite the bullet and live through that?
🗪
2:33:41jimdopango So Linus Torvalds is not a good programmer?
🗪
2:33:41jimdopango So Linus Torvalds is not a good programmer?
🗪
2:33:41jimdopango So Linus Torvalds is not a good programmer?
🗪
2:35:36igorovich Isn't Linus pronounced lainus?
🗪
2:35:36igorovich Isn't Linus pronounced lainus?
🗪
2:35:36igorovich Isn't Linus pronounced lainus?
🗪
2:36:52frozenzerker I guess it's more Swedish than Finnish?
🗪
2:36:52frozenzerker I guess it's more Swedish than Finnish?
🗪
2:36:52frozenzerker I guess it's more Swedish than Finnish?
🗪
2:38:05internationalizationist Q: So it was a joke‽
🗪
2:38:05internationalizationist Q: So it was a joke‽
🗪
2:38:05internationalizationist Q: So it was a joke‽
🗪
2:41:29jimdopango cmuratori Not wasteful if your job is to integrate patches from hundreds of branches from thousands of developers, day–in day–out. I'd guess 50% of a kernel maintainer's workload is dealing with source control and not programming
🗪
2:41:29jimdopango cmuratori Not wasteful if your job is to integrate patches from hundreds of branches from thousands of developers, day–in day–out. I'd guess 50% of a kernel maintainer's workload is dealing with source control and not programming
🗪
2:41:29jimdopango cmuratori Not wasteful if your job is to integrate patches from hundreds of branches from thousands of developers, day–in day–out. I'd guess 50% of a kernel maintainer's workload is dealing with source control and not programming
🗪
2:45:18lanquemar Which VCS do you use?
🗪
2:45:18lanquemar Which VCS do you use?
🗪
2:45:18lanquemar Which VCS do you use?
🗪
2:46:34Call it, with a glimpse into the future debugging the lighting transfer
🗩
2:46:34Call it, with a glimpse into the future debugging the lighting transfer
🗩
2:46:34Call it, with a glimpse into the future debugging the lighting transfer
🗩