Ticket Mutexes
?
?

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:23Recap and set the stage for the day
0:23Recap and set the stage for the day
0:23Recap and set the stage for the day
1:31Blackboard: Ticket Taking
1:31Blackboard: Ticket Taking
1:31Blackboard: Ticket Taking
4:11Blackboard: Singly-linked list
4:11Blackboard: Singly-linked list
4:11Blackboard: Singly-linked list
6:45Blackboard: A way to atomically add to a linked list
6:45Blackboard: A way to atomically add to a linked list
6:45Blackboard: A way to atomically add to a linked list
7:44Blackboard: Removing from a list
7:44Blackboard: Removing from a list
7:44Blackboard: Removing from a list
9:36Blackboard: Multithreaded addition to linked lists
9:36Blackboard: Multithreaded addition to linked lists
9:36Blackboard: Multithreaded addition to linked lists
11:46Blackboard: Multithreaded removal from linked lists
11:46Blackboard: Multithreaded removal from linked lists
11:46Blackboard: Multithreaded removal from linked lists
13:29Blackboard: Ticket Taking as a way to implement a fast, simple mutex for little chunks of code
13:29Blackboard: Ticket Taking as a way to implement a fast, simple mutex for little chunks of code
13:29Blackboard: Ticket Taking as a way to implement a fast, simple mutex for little chunks of code
14:37Blackboard: Atomic compare exchange1
14:37Blackboard: Atomic compare exchange1
14:37Blackboard: Atomic compare exchange1
17:41Blackboard: Atomic increment
17:41Blackboard: Atomic increment
17:41Blackboard: Atomic increment
19:02Blackboard: Ticket Taking and Mutex (mutual exclusion)
19:02Blackboard: Ticket Taking and Mutex (mutual exclusion)
19:02Blackboard: Ticket Taking and Mutex (mutual exclusion)
22:57Blackboard: volatile int mutexα
22:57Blackboard: volatile int mutexα
22:57Blackboard: volatile int mutexα
27:39Blackboard: Annoyingly, this implementation provides no guarantee that any thread will ever get a turn
27:39Blackboard: Annoyingly, this implementation provides no guarantee that any thread will ever get a turn
27:39Blackboard: Annoyingly, this implementation provides no guarantee that any thread will ever get a turn
30:04Blackboard: Ticket Taking as a way to ensure that threads get retired in order
30:04Blackboard: Ticket Taking as a way to ensure that threads get retired in order
30:04Blackboard: Ticket Taking as a way to ensure that threads get retired in order
35:12handmade_shared.h: Introduce struct ticket_mutex, BeginTicketMutex() and EndTicketMutex()
35:12handmade_shared.h: Introduce struct ticket_mutex, BeginTicketMutex() and EndTicketMutex()
35:12handmade_shared.h: Introduce struct ticket_mutex, BeginTicketMutex() and EndTicketMutex()
39:37handmade_asset.cpp: Implement AddOp()
39:37handmade_asset.cpp: Implement AddOp()
39:37handmade_asset.cpp: Implement AddOp()
42:49handmade_platform.h: Introduce and add a platform_texture_op_queue to the game_memory struct for AddOp() to use
42:49handmade_platform.h: Introduce and add a platform_texture_op_queue to the game_memory struct for AddOp() to use
42:49handmade_platform.h: Introduce and add a platform_texture_op_queue to the game_memory struct for AddOp() to use
45:48handmade_asset.cpp: Consider not setting Work->Asset->State in LoadAssetWorkDirectly()
45:48handmade_asset.cpp: Consider not setting Work->Asset->State in LoadAssetWorkDirectly()
45:48handmade_asset.cpp: Consider not setting Work->Asset->State in LoadAssetWorkDirectly()
47:21handmade_asset.cpp: Continue implementing AddOp()
47:21handmade_asset.cpp: Continue implementing AddOp()
47:21handmade_asset.cpp: Continue implementing AddOp()
49:56handmade_platform.h: Move the ticket mutex in from handmade_shared.h
49:56handmade_platform.h: Move the ticket mutex in from handmade_shared.h
49:56handmade_platform.h: Move the ticket mutex in from handmade_shared.h
51:23Consider building separate lists for each threads inside task_with_memory
51:23Consider building separate lists for each threads inside task_with_memory
51:23Consider building separate lists for each threads inside task_with_memory
52:25handmade_asset.cpp: Add platform_texture_op_queue to load_asset_work and pass it to the necessary functions
52:25handmade_asset.cpp: Add platform_texture_op_queue to load_asset_work and pass it to the necessary functions
52:25handmade_asset.cpp: Add platform_texture_op_queue to load_asset_work and pass it to the necessary functions
55:54Run the game and hit the assertion in AddOp()
55:54Run the game and hit the assertion in AddOp()
55:54Run the game and hit the assertion in AddOp()
56:12win32_handmade.cpp: Make WinMain() populate the TextureOps free list
56:12win32_handmade.cpp: Make WinMain() populate the TextureOps free list
56:12win32_handmade.cpp: Make WinMain() populate the TextureOps free list
58:53handmade_opengl.cpp: Make OpenGLManageTextures() return a texture_op
58:53handmade_opengl.cpp: Make OpenGLManageTextures() return a texture_op
58:53handmade_opengl.cpp: Make OpenGLManageTextures() return a texture_op
59:37win32_handmade.cpp: Make WinMain() call OpenGLManageTextures() inside a mutex
59:37win32_handmade.cpp: Make WinMain() call OpenGLManageTextures() inside a mutex
59:37win32_handmade.cpp: Make WinMain() call OpenGLManageTextures() inside a mutex
1:01:15"You ALMOST only live once"β
1:01:15"You ALMOST only live once"β
1:01:15"You ALMOST only live once"β
1:04:49Run the game and see that it almost worked
1:04:49Run the game and see that it almost worked
1:04:49Run the game and see that it almost worked
1:05:06Q&A
🗩
1:05:06Q&A
🗩
1:05:06Q&A
🗩
1:05:50handmade_asset.cpp: Note that we haven't dealt with Work->Asset->State
1:05:50handmade_asset.cpp: Note that we haven't dealt with Work->Asset->State
1:05:50handmade_asset.cpp: Note that we haven't dealt with Work->Asset->State
1:07:07dmitsuki Handmade Vulkan renderer when?
🗪
1:07:07dmitsuki Handmade Vulkan renderer when?
🗪
1:07:07dmitsuki Handmade Vulkan renderer when?
🗪
1:07:21ezysigh Do you need a safety write barrier before the current ticket increment (inside mutex_unlock)?
🗪
1:07:21ezysigh Do you need a safety write barrier before the current ticket increment (inside mutex_unlock)?
🗪
1:07:21ezysigh Do you need a safety write barrier before the current ticket increment (inside mutex_unlock)?
🗪
1:09:07phort99 Do you use an sRGB framebuffer and / or premultiplied alpha?
🗪
1:09:07phort99 Do you use an sRGB framebuffer and / or premultiplied alpha?
🗪
1:09:07phort99 Do you use an sRGB framebuffer and / or premultiplied alpha?
🗪
1:10:20win32_handmade.cpp: Remove Win32GetThreadStartupForGL()
1:10:20win32_handmade.cpp: Remove Win32GetThreadStartupForGL()
1:10:20win32_handmade.cpp: Remove Win32GetThreadStartupForGL()
1:11:24Run the game and note that our texture loading bug is 100% reproducible
1:11:24Run the game and note that our texture loading bug is 100% reproducible
1:11:24Run the game and note that our texture loading bug is 100% reproducible
1:12:01phort99 Can you explain about the secondary framebuffer not being premultiplied? What's the secondary framebuffer for?
🗪
1:12:01phort99 Can you explain about the secondary framebuffer not being premultiplied? What's the secondary framebuffer for?
🗪
1:12:01phort99 Can you explain about the secondary framebuffer not being premultiplied? What's the secondary framebuffer for?
🗪
1:13:05caviar_liberta And it might be pointless to do but, since you are using C++, have you used any ASM calls inside your code?
🗪
1:13:05caviar_liberta And it might be pointless to do but, since you are using C++, have you used any ASM calls inside your code?
🗪
1:13:05caviar_liberta And it might be pointless to do but, since you are using C++, have you used any ASM calls inside your code?
🗪
1:14:23baramordax Is there a reason you're not using scoped mutex guards that handle unlocking whenever the guard goes out of scope?
🗪
1:14:23baramordax Is there a reason you're not using scoped mutex guards that handle unlocking whenever the guard goes out of scope?
🗪
1:14:23baramordax Is there a reason you're not using scoped mutex guards that handle unlocking whenever the guard goes out of scope?
🗪
1:14:38win32_handmade.cpp: Demo the difference between our mutex and a scoped mutax guard
1:14:38win32_handmade.cpp: Demo the difference between our mutex and a scoped mutax guard
1:14:38win32_handmade.cpp: Demo the difference between our mutex and a scoped mutax guard
1:17:48Wrap it up with a few words on what is likely going wrong with the texture loading
🗩
1:17:48Wrap it up with a few words on what is likely going wrong with the texture loading
🗩
1:17:48Wrap it up with a few words on what is likely going wrong with the texture loading
🗩