Handmade Hero»Episode Guide
Simplifying Debug Values
?
?

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:09Welcome. Details about the texture transfer saga.
0:09Welcome. Details about the texture transfer saga.
0:09Welcome. Details about the texture transfer saga.
1:26nvidia didn't respond yet about _how_ to properly transfer textures overlapped.
1:26nvidia didn't respond yet about _how_ to properly transfer textures overlapped.
1:26nvidia didn't respond yet about _how_ to properly transfer textures overlapped.
1:54Overlapping CPU work and GPU work are not the same thing. There are 2 required copies that have to happen in order for the textures to get to the GPU: one off of the disk into memory that GPU can _see_, and then from the memory that the GPU can see into the actual memory resident on the GPU.
1:54Overlapping CPU work and GPU work are not the same thing. There are 2 required copies that have to happen in order for the textures to get to the GPU: one off of the disk into memory that GPU can _see_, and then from the memory that the GPU can see into the actual memory resident on the GPU.
1:54Overlapping CPU work and GPU work are not the same thing. There are 2 required copies that have to happen in order for the textures to get to the GPU: one off of the disk into memory that GPU can _see_, and then from the memory that the GPU can see into the actual memory resident on the GPU.
2:51Direct GPU Mapping process description
2:51Direct GPU Mapping process description
2:51Direct GPU Mapping process description
4:13How do we tell the driver to start transferring textures using the asynchronous memory transfer capabilities that the card has
4:13How do we tell the driver to start transferring textures using the asynchronous memory transfer capabilities that the card has
4:13How do we tell the driver to start transferring textures using the asynchronous memory transfer capabilities that the card has
5:25Decision to wait for nvidia's response about what they think the best way to transfer textures would be
5:25Decision to wait for nvidia's response about what they think the best way to transfer textures would be
5:25Decision to wait for nvidia's response about what they think the best way to transfer textures would be
5:52Reminder that we don't fence the download on either side and doubt about whether that creates problems
5:52Reminder that we don't fence the download on either side and doubt about whether that creates problems
5:52Reminder that we don't fence the download on either side and doubt about whether that creates problems
6:39Alternative approach - we could just continue to download textures on a single thread
6:39Alternative approach - we could just continue to download textures on a single thread
6:39Alternative approach - we could just continue to download textures on a single thread
8:38Decide to fix the debug code
8:38Decide to fix the debug code
8:38Decide to fix the debug code
9:29Reminder that on the AMD machine that Casey uses, the texture download problems don't seem to happen
9:29Reminder that on the AMD machine that Casey uses, the texture download problems don't seem to happen
9:29Reminder that on the AMD machine that Casey uses, the texture download problems don't seem to happen
9:54glFlush() seems to force the download to happen on a separate thread
9:54glFlush() seems to force the download to happen on a separate thread
9:54glFlush() seems to force the download to happen on a separate thread
10:35Reminder about the original debug code purposes
10:35Reminder about the original debug code purposes
10:35Reminder about the original debug code purposes
11:43Focus on the debug interface
11:43Focus on the debug interface
11:43Focus on the debug interface
13:56win32_handmade.cpp GlobalPause and GlobalUseSoftwareRendering would be nice to be included in the interface
13:56win32_handmade.cpp GlobalPause and GlobalUseSoftwareRendering would be nice to be included in the interface
13:56win32_handmade.cpp GlobalPause and GlobalUseSoftwareRendering would be nice to be included in the interface
17:05win32_handmade.cpp - DEBUG_EDIT() as a means to include GlobalPause and GlobalUseSoftwareRendering
17:05win32_handmade.cpp - DEBUG_EDIT() as a means to include GlobalPause and GlobalUseSoftwareRendering
17:05win32_handmade.cpp - DEBUG_EDIT() as a means to include GlobalPause and GlobalUseSoftwareRendering
19:17Doubts on the usage of handmade_config.h as a means to specify debug variables
19:17Doubts on the usage of handmade_config.h as a means to specify debug variables
19:17Doubts on the usage of handmade_config.h as a means to specify debug variables
21:54win32_handmade.cpp - replacing DEBUG_EDIT() with DEBUG_VALUE() and checking if it works
21:54win32_handmade.cpp - replacing DEBUG_EDIT() with DEBUG_VALUE() and checking if it works
21:54win32_handmade.cpp - replacing DEBUG_EDIT() with DEBUG_VALUE() and checking if it works
24:35Unhandled End Data Block
24:35Unhandled End Data Block
24:35Unhandled End Data Block
25:33Debug interface is not visible in in-game mode
25:33Debug interface is not visible in in-game mode
25:33Debug interface is not visible in in-game mode
27:40Check if debug components are drawn by not rendering the world
27:40Check if debug components are drawn by not rendering the world
27:40Check if debug components are drawn by not rendering the world
29:11Add a clear before drawing
29:11Add a clear before drawing
29:11Add a clear before drawing
29:34Confirmation that the debug interface doesn't show up in-game because of a sorting problem
29:34Confirmation that the debug interface doesn't show up in-game because of a sorting problem
29:34Confirmation that the debug interface doesn't show up in-game because of a sorting problem
31:07handmade_render_group.cpp - Add a SortBias to PushBitmap -> Dim.Basis.SortKey
31:07handmade_render_group.cpp - Add a SortBias to PushBitmap -> Dim.Basis.SortKey
31:07handmade_render_group.cpp - Add a SortBias to PushBitmap -> Dim.Basis.SortKey
32:27handmade_render_group.cpp - Investigate where and why is CAlign still used. [just for debug drawing]
32:27handmade_render_group.cpp - Investigate where and why is CAlign still used. [just for debug drawing]
32:27handmade_render_group.cpp - Investigate where and why is CAlign still used. [just for debug drawing]
35:28handmade_debug.cpp - add a FLT_MAX sort bias to the PushBitmap call so that we get the debug interface closest to us (on Z)
35:28handmade_debug.cpp - add a FLT_MAX sort bias to the PushBitmap call so that we get the debug interface closest to us (on Z)
35:28handmade_debug.cpp - add a FLT_MAX sort bias to the PushBitmap call so that we get the debug interface closest to us (on Z)
36:35handmade_debug.cpp - add a drop shadow to the text by duplicating the PushBitmap call, slightly displacing the position and changing the color
36:35handmade_debug.cpp - add a drop shadow to the text by duplicating the PushBitmap call, slightly displacing the position and changing the color
36:35handmade_debug.cpp - add a drop shadow to the text by duplicating the PushBitmap call, slightly displacing the position and changing the color
38:36Getting back to what we were doing - check if if interactive selection works and confirming that End Data Block UNHANDLED is not a bug introduced by the addition of GlobalPause and GlobalUseSoftwareRendering
38:36Getting back to what we were doing - check if if interactive selection works and confirming that End Data Block UNHANDLED is not a bug introduced by the addition of GlobalPause and GlobalUseSoftwareRendering
38:36Getting back to what we were doing - check if if interactive selection works and confirming that End Data Block UNHANDLED is not a bug introduced by the addition of GlobalPause and GlobalUseSoftwareRendering
39:34Checking the debug printout hierarchy
39:34Checking the debug printout hierarchy
39:34Checking the debug printout hierarchy
40:03win32_handmade.cpp - Checking how "Platform" should work in DEBUG_BEGIN_DATA_BLOCK()
40:03win32_handmade.cpp - Checking how "Platform" should work in DEBUG_BEGIN_DATA_BLOCK()
40:03win32_handmade.cpp - Checking how "Platform" should work in DEBUG_BEGIN_DATA_BLOCK()
40:11handmade_world_mode.cpp - Simulation_Entity | Confirm that printing block names is not yet implemented properly
40:11handmade_world_mode.cpp - Simulation_Entity | Confirm that printing block names is not yet implemented properly
40:11handmade_world_mode.cpp - Simulation_Entity | Confirm that printing block names is not yet implemented properly
41:41handmade_debug_interface.h - Minimize complexity by removing DEBUG_IF and DEBUG_VARIABLE
41:41handmade_debug_interface.h - Minimize complexity by removing DEBUG_IF and DEBUG_VARIABLE
41:41handmade_debug_interface.h - Minimize complexity by removing DEBUG_IF and DEBUG_VARIABLE
42:52Pulling out calls to DEBUG_VARIABLE and DEBUG_IF into globals ourselves
42:52Pulling out calls to DEBUG_VARIABLE and DEBUG_IF into globals ourselves
42:52Pulling out calls to DEBUG_VARIABLE and DEBUG_IF into globals ourselves
44:15handmade_config.h - Change #defines to global_variable
44:15handmade_config.h - Change #defines to global_variable
44:15handmade_config.h - Change #defines to global_variable
45:42handmade_render_group.cpp - Check we don't have code that writes to handmade_config.h
45:42handmade_render_group.cpp - Check we don't have code that writes to handmade_config.h
45:42handmade_render_group.cpp - Check we don't have code that writes to handmade_config.h
46:05Checking where handmade_config.h is included [in handmade_platform.h] and moving the inclusion to handmade.h
46:05Checking where handmade_config.h is included [in handmade_platform.h] and moving the inclusion to handmade.h
46:05Checking where handmade_config.h is included [in handmade_platform.h] and moving the inclusion to handmade.h
47:03Correcting types and initializers for globals in handmade_config.h and changing DEBUG_IF and DEBUG_VARIABLE calls in the rest of the code, removing compile errors one by one until...
47:03Correcting types and initializers for globals in handmade_config.h and changing DEBUG_IF and DEBUG_VARIABLE calls in the rest of the code, removing compile errors one by one until...
47:03Correcting types and initializers for globals in handmade_config.h and changing DEBUG_IF and DEBUG_VARIABLE calls in the rest of the code, removing compile errors one by one until...
49:45...reaching Global_Renderer_ShowLightingSamples, which is moved directly to handmade_render.cpp
49:45...reaching Global_Renderer_ShowLightingSamples, which is moved directly to handmade_render.cpp
49:45...reaching Global_Renderer_ShowLightingSamples, which is moved directly to handmade_render.cpp
51:18win32_handmade.cpp - Moving (and afterwards eliminating) Global_Renderer_UseSoftware from handmade_config.h and creating an enum with the rendering type, which allows to manage the Win32DisplayBufferInWindow cases better.
51:18win32_handmade.cpp - Moving (and afterwards eliminating) Global_Renderer_UseSoftware from handmade_config.h and creating an enum with the rendering type, which allows to manage the Win32DisplayBufferInWindow cases better.
51:18win32_handmade.cpp - Moving (and afterwards eliminating) Global_Renderer_UseSoftware from handmade_config.h and creating an enum with the rendering type, which allows to manage the Win32DisplayBufferInWindow cases better.
57:13win32_handmade.cpp - The reason for ordering the enum components is for having the 0 value being the default
57:13win32_handmade.cpp - The reason for ordering the enum components is for having the 0 value being the default
57:13win32_handmade.cpp - The reason for ordering the enum components is for having the 0 value being the default
58:18Plans for next day: hooking up debug printout for editing and maybe cleanup
58:18Plans for next day: hooking up debug printout for editing and maybe cleanup
58:18Plans for next day: hooking up debug printout for editing and maybe cleanup
58:57Q&A
🗩
58:57Q&A
🗩
58:57Q&A
🗩
1:00:30dino27_1988 Casey, at what point is it _bad_ to separate everything into multiple files, and when is it _good_?
🗪
1:00:30dino27_1988 Casey, at what point is it _bad_ to separate everything into multiple files, and when is it _good_?
🗪
1:00:30dino27_1988 Casey, at what point is it _bad_ to separate everything into multiple files, and when is it _good_?
🗪
1:07:36dino27_1988 Okay, so basically personal preference, compile time, and external impositions. Thank you very much for your answer :)
🗪
1:07:36dino27_1988 Okay, so basically personal preference, compile time, and external impositions. Thank you very much for your answer :)
🗪
1:07:36dino27_1988 Okay, so basically personal preference, compile time, and external impositions. Thank you very much for your answer :)
🗪
1:07:46rohit_n Does "texture download" on this stream mean "glTexImage2D"?
🗪
1:07:46rohit_n Does "texture download" on this stream mean "glTexImage2D"?
🗪
1:07:46rohit_n Does "texture download" on this stream mean "glTexImage2D"?
🗪
1:10:23dudeinbasement1 Have you ever used #pragma section(...) and grouped memory into sections, and read the map file, or have you always used this style of meta programming?
🗪
1:10:23dudeinbasement1 Have you ever used #pragma section(...) and grouped memory into sections, and read the map file, or have you always used this style of meta programming?
🗪
1:10:23dudeinbasement1 Have you ever used #pragma section(...) and grouped memory into sections, and read the map file, or have you always used this style of meta programming?
🗪
1:10:51Cubercaleb Off-topic: If you wanted to extend the hot-code reloading to work with structure changes wouldn't you have to store meta data about each struct along with information about every allocation, so that you could walk the data, adjust the data, move things around and fix pointers?
🗪
1:10:51Cubercaleb Off-topic: If you wanted to extend the hot-code reloading to work with structure changes wouldn't you have to store meta data about each struct along with information about every allocation, so that you could walk the data, adjust the data, move things around and fix pointers?
🗪
1:10:51Cubercaleb Off-topic: If you wanted to extend the hot-code reloading to work with structure changes wouldn't you have to store meta data about each struct along with information about every allocation, so that you could walk the data, adjust the data, move things around and fix pointers?
🗪
1:12:14guitarm87 Do you specifically have to say inline for functions to be inlined or does the compiler do that automagically if it finds one/several to fit?
🗪
1:12:14guitarm87 Do you specifically have to say inline for functions to be inlined or does the compiler do that automagically if it finds one/several to fit?
🗪
1:12:14guitarm87 Do you specifically have to say inline for functions to be inlined or does the compiler do that automagically if it finds one/several to fit?
🗪
1:15:07Cubercaleb Would you try to fix the memory in-place or would you copy it to a new memory arena?
🗪
1:15:07Cubercaleb Would you try to fix the memory in-place or would you copy it to a new memory arena?
🗪
1:15:07Cubercaleb Would you try to fix the memory in-place or would you copy it to a new memory arena?
🗪
1:15:47dudeinbasement1 Programming style - why do you have the function return on the preceeding line? Is it just so that the function name is in the first column?
🗪
1:15:47dudeinbasement1 Programming style - why do you have the function return on the preceeding line? Is it just so that the function name is in the first column?
🗪
1:15:47dudeinbasement1 Programming style - why do you have the function return on the preceeding line? Is it just so that the function name is in the first column?
🗪
1:17:02StrangeZak Yeah I don't know what the deal was, when I asked about inlining last night it blew up everywhere.
🗪
1:17:02StrangeZak Yeah I don't know what the deal was, when I asked about inlining last night it blew up everywhere.
🗪
1:17:02StrangeZak Yeah I don't know what the deal was, when I asked about inlining last night it blew up everywhere.
🗪
1:18:53Garryjohanson I was messing around with loop unrolling by hand and got massive speedups, any idea why would that be?
🗪
1:18:53Garryjohanson I was messing around with loop unrolling by hand and got massive speedups, any idea why would that be?
🗪
1:18:53Garryjohanson I was messing around with loop unrolling by hand and got massive speedups, any idea why would that be?
🗪
1:19:55Wind things down
🗩
1:19:55Wind things down
🗩
1:19:55Wind things down
🗩