Handmade Hero»Episode Guide
Convenient SIMD for Particles
?
?

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:09Recap and set the stage for the day
0:09Recap and set the stage for the day
0:09Recap and set the stage for the day
2:13Run the game and note that entities may now have a particle system attached to them
2:13Run the game and note that entities may now have a particle system attached to them
2:13Run the game and note that entities may now have a particle system attached to them
3:36Look in the art pack for some particle art
3:36Look in the art pack for some particle art
3:36Look in the art pack for some particle art
5:07handmade_particles.cpp: Move in the existing particle system code from handmade_world_mode.cpp
5:07handmade_particles.cpp: Move in the existing particle system code from handmade_world_mode.cpp
5:07handmade_particles.cpp: Move in the existing particle system code from handmade_world_mode.cpp
7:31Blackboard: Particle Efficiency
7:31Blackboard: Particle Efficiency
7:31Blackboard: Particle Efficiency
12:25Blackboard: Texture Atlases
12:25Blackboard: Texture Atlases
12:25Blackboard: Texture Atlases
13:22Blackboard: Texture Arrays
13:22Blackboard: Texture Arrays
13:22Blackboard: Texture Arrays
16:24Determine to use a texture atlas for the particle system
16:24Determine to use a texture atlas for the particle system
16:24Determine to use a texture atlas for the particle system
18:13handmade_particles.h: Change the data in the particle_system struct to use SIMD registers, with a few words on vectorising
18:13handmade_particles.h: Change the data in the particle_system struct to use SIMD registers, with a few words on vectorising
18:13handmade_particles.h: Change the data in the particle_system struct to use SIMD registers, with a few words on vectorising
22:28handmade_particles.cpp: Introduce PlayAround() and rework it to operate on our SIMD data
22:28handmade_particles.cpp: Introduce PlayAround() and rework it to operate on our SIMD data
22:28handmade_particles.cpp: Introduce PlayAround() and rework it to operate on our SIMD data
29:03handmade_particles.cpp: Introduce MMSetExpr() and continue implementing PlayAround()
29:03handmade_particles.cpp: Introduce MMSetExpr() and continue implementing PlayAround()
29:03handmade_particles.cpp: Introduce MMSetExpr() and continue implementing PlayAround()
32:22Note that we can't do the Lagrangian grid four-wide without upping the minimum system requirements to AVX-512
32:22Note that we can't do the Lagrangian grid four-wide without upping the minimum system requirements to AVX-512
32:22Note that we can't do the Lagrangian grid four-wide without upping the minimum system requirements to AVX-512
34:51handmade_particles.cpp: Forego the grid for now and continue implementing PlayAround()
34:51handmade_particles.cpp: Forego the grid for now and continue implementing PlayAround()
34:51handmade_particles.cpp: Forego the grid for now and continue implementing PlayAround()
36:55handmade_particles.cpp: Introduce operator+() and operator*() to operate on __m128 registers for PlayAround() to use
36:55handmade_particles.cpp: Introduce operator+() and operator*() to operate on __m128 registers for PlayAround() to use
36:55handmade_particles.cpp: Introduce operator+() and operator*() to operate on __m128 registers for PlayAround() to use
44:05handmade_particles.h: Introduce particle_v3 struct in order to simplify the operations in PlayAround()
44:05handmade_particles.h: Introduce particle_v3 struct in order to simplify the operations in PlayAround()
44:05handmade_particles.h: Introduce particle_v3 struct in order to simplify the operations in PlayAround()
49:49handmade_particles.h: Introduce particle_v4 struct
49:49handmade_particles.h: Introduce particle_v4 struct
49:49handmade_particles.h: Introduce particle_v4 struct
51:48handmade_particles.h and *.cpp: Introduce particle struct and GetParticle() for PlayAround() to use
51:48handmade_particles.h and *.cpp: Introduce particle struct and GetParticle() for PlayAround() to use
51:48handmade_particles.h and *.cpp: Introduce particle struct and GetParticle() for PlayAround() to use
57:48handmade_particles.h: Introduce v3_4x and versions of operator+=(), operator*() and operator+() to operate on and return those
57:48handmade_particles.h: Introduce v3_4x and versions of operator+=(), operator*() and operator+() to operate on and return those
57:48handmade_particles.h: Introduce v3_4x and versions of operator+=(), operator*() and operator+() to operate on and return those
1:05:10Q&A
🗩
1:05:10Q&A
🗩
1:05:10Q&A
🗩
1:05:52mmozeiko On MSVC it is possible to create non-member inline operator += for __m128. It is done in same way as you did for v2/v3/v4 types. But for gcc / clang you cannot do += for __m128, because they already have it builtin operator
🗪
1:05:52mmozeiko On MSVC it is possible to create non-member inline operator += for __m128. It is done in same way as you did for v2/v3/v4 types. But for gcc / clang you cannot do += for __m128, because they already have it builtin operator
🗪
1:05:52mmozeiko On MSVC it is possible to create non-member inline operator += for __m128. It is done in same way as you did for v2/v3/v4 types. But for gcc / clang you cannot do += for __m128, because they already have it builtin operator
🗪
1:06:33handmade_particles.h: Tweak &operator+=()
1:06:33handmade_particles.h: Tweak &operator+=()
1:06:33handmade_particles.h: Tweak &operator+=()
1:07:30soysaucethekid Instead of doing the particle_v3 struct, could you accomplish the same thing with macros and some pointer math?
🗪
1:07:30soysaucethekid Instead of doing the particle_v3 struct, could you accomplish the same thing with macros and some pointer math?
🗪
1:07:30soysaucethekid Instead of doing the particle_v3 struct, could you accomplish the same thing with macros and some pointer math?
🗪
1:08:26phort99 How much of your time would you say you spend refactoring as compared to writing new code?
🗪
1:08:26phort99 How much of your time would you say you spend refactoring as compared to writing new code?
🗪
1:08:26phort99 How much of your time would you say you spend refactoring as compared to writing new code?
🗪
1:11:38a_pulsing_mage Have you changed the way the particles look? If so, please show them
🗪
1:11:38a_pulsing_mage Have you changed the way the particles look? If so, please show them
🗪
1:11:38a_pulsing_mage Have you changed the way the particles look? If so, please show them
🗪
1:12:53macielda Do you often write code using SIMD without a non-SIMD implementation of the same operation?
🗪
1:12:53macielda Do you often write code using SIMD without a non-SIMD implementation of the same operation?
🗪
1:12:53macielda Do you often write code using SIMD without a non-SIMD implementation of the same operation?
🗪
1:14:10phort99 If JAI releases before the end of this project and is good enough, would you ever consider rewriting the project in JAI, or is the project too big and the gains too small?
🗪
1:14:10phort99 If JAI releases before the end of this project and is good enough, would you ever consider rewriting the project in JAI, or is the project too big and the gains too small?
🗪
1:14:10phort99 If JAI releases before the end of this project and is good enough, would you ever consider rewriting the project in JAI, or is the project too big and the gains too small?
🗪
1:15:48macielda Is it hard to debug SIMD in Linux? Have you tried it?
🗪
1:15:48macielda Is it hard to debug SIMD in Linux? Have you tried it?
🗪
1:15:48macielda Is it hard to debug SIMD in Linux? Have you tried it?
🗪
1:17:04longboolean It would be cool to see a stream or two of a good programmer (you) going through the motions of learning JAI
🗪
1:17:04longboolean It would be cool to see a stream or two of a good programmer (you) going through the motions of learning JAI
🗪
1:17:04longboolean It would be cool to see a stream or two of a good programmer (you) going through the motions of learning JAI
🗪
1:18:34Closing gambit
🗩
1:18:34Closing gambit
🗩
1:18:34Closing gambit
🗩