Adding Locks to the Asset Operations
?
?

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:38Recap and plan for the day
0:38Recap and plan for the day
0:38Recap and plan for the day
1:23We'll finish the generationID work we started on the previous episode
1:23We'll finish the generationID work we started on the previous episode
1:23We'll finish the generationID work we started on the previous episode
2:00We need to access the linked list through locks
2:00We need to access the linked list through locks
2:00We need to access the linked list through locks
4:06We also want to avoid simultaneous AcquireAssetMemory calls
4:06We also want to avoid simultaneous AcquireAssetMemory calls
4:06We also want to avoid simultaneous AcquireAssetMemory calls
5:37BeginTaskWithMemory is not protected against concurrent calls either
5:37BeginTaskWithMemory is not protected against concurrent calls either
5:37BeginTaskWithMemory is not protected against concurrent calls either
6:45Background tasks should not spawn other background tasks
6:45Background tasks should not spawn other background tasks
6:45Background tasks should not spawn other background tasks
8:13We don't want every LoadBitmap call to have it's own thread; only those associated to the main thread render_group should
8:13We don't want every LoadBitmap call to have it's own thread; only those associated to the main thread render_group should
8:13We don't want every LoadBitmap call to have it's own thread; only those associated to the main thread render_group should
11:12Parameterizing LoadBitmap to exhibit immediate and deferred behaviors
11:12Parameterizing LoadBitmap to exhibit immediate and deferred behaviors
11:12Parameterizing LoadBitmap to exhibit immediate and deferred behaviors
12:42Dividing LoadAssetWork into immediate and deferred portions
12:42Dividing LoadAssetWork into immediate and deferred portions
12:42Dividing LoadAssetWork into immediate and deferred portions
18:18Deciding on how to lock access to AcquireAssetMemory and AddAssetHeaderToList. Do we want one or two locks?
18:18Deciding on how to lock access to AcquireAssetMemory and AddAssetHeaderToList. Do we want one or two locks?
18:18Deciding on how to lock access to AcquireAssetMemory and AddAssetHeaderToList. Do we want one or two locks?
25:24Let's try with just one lock
25:24Let's try with just one lock
25:24Let's try with just one lock
29:59Review of GetAsset and AcquireAssetMemory locks
29:59Review of GetAsset and AcquireAssetMemory locks
29:59Review of GetAsset and AcquireAssetMemory locks
32:06Implementing BeginAssetLock and EndAssetLock
32:06Implementing BeginAssetLock and EndAssetLock
32:06Implementing BeginAssetLock and EndAssetLock
37:28Testing the locking of linked lists
37:28Testing the locking of linked lists
37:28Testing the locking of linked lists
38:29Finishing the GenerationID in-flight asset tracking from the past episode
38:29Finishing the GenerationID in-flight asset tracking from the past episode
38:29Finishing the GenerationID in-flight asset tracking from the past episode
42:34Implementing NewGenerationID: Using AtomicIncrement to avoid returning the same GenerationID to two threads
42:34Implementing NewGenerationID: Using AtomicIncrement to avoid returning the same GenerationID to two threads
42:34Implementing NewGenerationID: Using AtomicIncrement to avoid returning the same GenerationID to two threads
43:13Star Trek: The Next Generation IDα
43:13Star Trek: The Next Generation IDα
43:13Star Trek: The Next Generation IDα
45:29Correctly use __sync_fetch_and_add for those of us on "Lunix"β
45:29Correctly use __sync_fetch_and_add for those of us on "Lunix"β
45:29Correctly use __sync_fetch_and_add for those of us on "Lunix"β
50:30Testing it
50:30Testing it
50:30Testing it
51:07Making sure we don't evict assets with in-flight GenerationIDs by keeping a list
51:07Making sure we don't evict assets with in-flight GenerationIDs by keeping a list
51:07Making sure we don't evict assets with in-flight GenerationIDs by keeping a list
54:12AssetLock instead of AtomicIncrement inside NewGenerationID to protect both the GenerationID and the InFlightGenerations list
54:12AssetLock instead of AtomicIncrement inside NewGenerationID to protect both the GenerationID and the InFlightGenerations list
54:12AssetLock instead of AtomicIncrement inside NewGenerationID to protect both the GenerationID and the InFlightGenerations list
55:44Implementing GenerationHasCompleted
55:44Implementing GenerationHasCompleted
55:44Implementing GenerationHasCompleted
59:02What gets rid of the render_groups?
59:02What gets rid of the render_groups?
59:02What gets rid of the render_groups?
1:01:59Implementing FinishRenderGroup
1:01:59Implementing FinishRenderGroup
1:01:59Implementing FinishRenderGroup
1:03:40We still need to thoroughly test today's code
1:03:40We still need to thoroughly test today's code
1:03:40We still need to thoroughly test today's code
1:03:41NOTE: (There are ten more minutes of programming in the answer to Q:1:21:19)
1:03:41NOTE: (There are ten more minutes of programming in the answer to Q:1:21:19)
1:03:41NOTE: (There are ten more minutes of programming in the answer to Q:1:21:19)
1:04:51Q&A
🗩
1:04:51Q&A
🗩
1:04:51Q&A
🗩
1:05:30TheSizik __sync_add_and_fetch returns the new value
🗪
1:05:30TheSizik __sync_add_and_fetch returns the new value
🗪
1:05:30TheSizik __sync_add_and_fetch returns the new value
🗪
1:05:43mmozeiko Please don't cast Value to (long*) for __sync_fetch_and_add, it will generate wrong code on 64-bit Linux/OSX
🗪
1:05:43mmozeiko Please don't cast Value to (long*) for __sync_fetch_and_add, it will generate wrong code on 64-bit Linux/OSX
🗪
1:05:43mmozeiko Please don't cast Value to (long*) for __sync_fetch_and_add, it will generate wrong code on 64-bit Linux/OSX
🗪
1:06:17RobotChocolateDino What's the advantage of calling load bitmaps from other threads? Wouldn't it be better to just have PushBitmap fail when called from other threads so that there are no assets missing from the ground chunks and so that all the bitmap memory could be acquired on the main thread? The ground chunks could probably wait one frame to have their assets loaded if they are prefetched ahead of time
🗪
1:06:17RobotChocolateDino What's the advantage of calling load bitmaps from other threads? Wouldn't it be better to just have PushBitmap fail when called from other threads so that there are no assets missing from the ground chunks and so that all the bitmap memory could be acquired on the main thread? The ground chunks could probably wait one frame to have their assets loaded if they are prefetched ahead of time
🗪
1:06:17RobotChocolateDino What's the advantage of calling load bitmaps from other threads? Wouldn't it be better to just have PushBitmap fail when called from other threads so that there are no assets missing from the ground chunks and so that all the bitmap memory could be acquired on the main thread? The ground chunks could probably wait one frame to have their assets loaded if they are prefetched ahead of time
🗪
1:07:23powerc9k Is the Github repo online and if so how does one gain access?
🗪
1:07:23powerc9k Is the Github repo online and if so how does one gain access?
🗪
1:07:23powerc9k Is the Github repo online and if so how does one gain access?
🗪
1:07:55OsmanTheBlack Will you get rid of stdint ever?
🗪
1:07:55OsmanTheBlack Will you get rid of stdint ever?
🗪
1:07:55OsmanTheBlack Will you get rid of stdint ever?
🗪
1:08:42Brotorias Is "volatile" actually needed in your compare-and-exchange?
🗪
1:08:42Brotorias Is "volatile" actually needed in your compare-and-exchange?
🗪
1:08:42Brotorias Is "volatile" actually needed in your compare-and-exchange?
🗪
1:09:36jessem3y3r How difficult would it be to have the letter particles fall independently of the hero?
🗪
1:09:36jessem3y3r How difficult would it be to have the letter particles fall independently of the hero?
🗪
1:09:36jessem3y3r How difficult would it be to have the letter particles fall independently of the hero?
🗪
1:17:20Stephenlast Don't you need to move all ground chunk work into the separate thread? ATM it looks like it's only actually doing render to output in the task
🗪
1:17:20Stephenlast Don't you need to move all ground chunk work into the separate thread? ATM it looks like it's only actually doing render to output in the task
🗪
1:17:20Stephenlast Don't you need to move all ground chunk work into the separate thread? ATM it looks like it's only actually doing render to output in the task
🗪
1:18:23OsmanTheBlack Why are you using u64 instead of size_t for buffer sizes?
🗪
1:18:23OsmanTheBlack Why are you using u64 instead of size_t for buffer sizes?
🗪
1:18:23OsmanTheBlack Why are you using u64 instead of size_t for buffer sizes?
🗪
1:19:21AlejRad Why are you using windows?
🗪
1:19:21AlejRad Why are you using windows?
🗪
1:19:21AlejRad Why are you using windows?
🗪
1:21:19Stephenlast I only ask because for now it seems like you will be stalling for that LoadBitmap on the main thread
🗪
1:21:19Stephenlast I only ask because for now it seems like you will be stalling for that LoadBitmap on the main thread
🗪
1:21:19Stephenlast I only ask because for now it seems like you will be stalling for that LoadBitmap on the main thread
🗪
1:34:59mvargasmoran How difficult would be to make this boot alone in a Raspberry Pi or something like that?
🗪
1:34:59mvargasmoran How difficult would be to make this boot alone in a Raspberry Pi or something like that?
🗪
1:34:59mvargasmoran How difficult would be to make this boot alone in a Raspberry Pi or something like that?
🗪
1:35:11OsmanTheBlack load_asset_work for u64 !size_t
🗪
1:35:11OsmanTheBlack load_asset_work for u64 !size_t
🗪
1:35:11OsmanTheBlack load_asset_work for u64 !size_t
🗪
1:36:08RobotChocolateDino Would dedicating one thread to asset loaded which has an atomic queue be a bad idea?
🗪
1:36:08RobotChocolateDino Would dedicating one thread to asset loaded which has an atomic queue be a bad idea?
🗪
1:36:08RobotChocolateDino Would dedicating one thread to asset loaded which has an atomic queue be a bad idea?
🗪
1:37:39Wind it down
🗩
1:37:39Wind it down
🗩
1:37:39Wind it down
🗩