cinera_handmade.network/cmuratori/hero/code/code625.hmml

150 lines
11 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

[video output=day625 member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="Fixing the \"Lighting\" Bug" vod_platform=youtube id=nIeqZzUPqp8 annotator=Miblo]
[0:00][Welcome to the stream][:speech]
[0:21][Look into our incorrect usage of _mm_blendv_ps() in the f32 version of SignOf()[ref
site=Intel
page="Intel Intrinsics Guide"
url=https://software.intel.com/sites/landingpage/IntrinsicsGuide/]][:research :simd]
[6:59][Fix the f32 SignOf() in :SIMD[ref
site=Intel
page="Intel Intrinsics Guide"
url=https://software.intel.com/sites/landingpage/IntrinsicsGuide/]]
[11:23][Hunt in vain for SignOrZero()][:research]
[14:18][Determine to look at octahedral code to see if we're using SignOf() as SignOrZero()]
[14:57][Fix compile errors in SignOf()]
[15:16][Double-check our SignOf()][:research]
[16:35][Update the f32_4x SignOf()][:simd]
[19:53][Traverse the orphanage, and successfully provoke our :lighting bug][:run]
[23:32][Exhibit our :lighting bug localised][:run]
[23:47][Consider a possible :lighting quality improvement][:run]
[25:16][Determine to investigate our :lighting bug][:run]
[25:53][Try to provoke our :lighting bug in -Od][:run]
[27:43][In -O2 our SpecValid and DiffuseValid values start at 0][:lighting :run]
[28:11][Introduce ValidateTexel() and make BlockCopyAtlas() assert with ValidateAtlas()][:lighting]
[31:17][Hit our top ValidateAtlas() assertion in BlockCopyAtlas()][:lighting :run]
[32:46][Make SetLightAtlasTexels() assert with ValidateAtlas()][:lighting]
[33:04][Never hit our assertion in SetLightAtlasTexels()][:lighting :run]
[33:31][Use LIGHT_ATLAS_ASSERT() for our assertions][:lighting]
[34:01][Hit none of our assertions][:lighting :run]
[34:15][Try replacing LIGHT_ATLAS_ASSERT() with Assert() in BlockCopyAtlas()][:lighting]
[34:49][Hit our ValidateAtlas() assertion in BlockCopyAtlas()][:lighting :run]
[34:55][Replace Assert() with LIGHT_ATLAS_ASSERT() in BlockCopyAtlas()][:lighting]
[35:06][Hit our ValidateAtlas() assertion in BlockCopyAtlas()][:lighting :run]
[35:30][Describe our method for zeroing in on a bug, lacking a theory as to its source][:speech]
[37:40][Plan our :lighting map validation][:research]
[40:08][Make ComputeLightPropagationWork() assert with ValidateAtlas()][:lighting]
[41:20][Hit our DiffuseAtlas assertion in ComputeLightPropagationWork() after FullCast()][:lighting :run]
[42:07][Remove our ValidateAtlas() calls][:lighting]
[42:34][Focus our :lighting map validation on FullCast()][:research]
[44:53][Consult the chat for Japanese speakers][:speech]
[45:12][@mas_ketta][Bikkuri shita!]
[45:31][@drspectra][I mean it's 5:30 am in Japan]
[45:55][@infinum][@handmade_hero How good is your Japanese?]
[46:07][Request a link to Mr Yabatan making a hotpot, with his Dad on the phone[ref
author="Mr Yabatan"
title="お父さんと鍋パーティーNabe Party with my Dad!"
publisher=YouTube
url=https://www.youtube.com/watch?v=ogd5iVr4_cM]]
[47:06][@thesandvichmaker][Foreigner meets Ramen 🍜 ラーメンで興奮する外国人![ref
author="Mr Yabatan"
title="Foreigner meets Ramen 🍜 ラーメンで興奮する外国人!"
publisher=YouTube
url=https://www.youtube.com/watch?v=k9EIo-J7WVY]]
[48:11][@nestedmadness][@handmade_hero Talking about this?[ref
author="Mr Yabatan"
title="お父さんと鍋パーティーNabe Party with my Dad!"
publisher=YouTube
url=https://www.youtube.com/watch?v=ogd5iVr4_cM]]
[48:42][Add ValidateAtlas() assertions in FullCast()][:lighting]
[49:53][Hit our bottom SpecAtlas ValidateAtlas() assertion in FullCast()][:lighting :run]
[50:16][Disable multithreading][:threading]
[51:54][Try and hit our assertion in FullCast()][:lighting :run]
[52:11][@mindmark42][I just checked the octrahedral paper.[ref
title="Survey of Efficient Representations for Independent Unit Vectors"
author="Zina H. Cigolle, Sam Donow, Daniel Evangelakos, Michael Mara, Morgan McGuire, Quirin Meyer"
url=http://jcgt.org/published/0003/02/01/] It uses signNotZero()]
[52:42][We hit our assertion in FullCast() single-threaded][:lighting :run :threading]
[52:49][Focus our :lighting map validation on GridRayCast()][:research]
[55:59][Request a reminder from chat to rerun the sphere generator][:speech]
[56:22][Make GridRayCast() assert with ValidateTexel()][:lighting]
[57:16][Hit our bottom 6th SpecAtlas ValidateTexel() assertion in GridRayCast()()][:lighting :run]
[58:04][Fail to hit our assertion in -Od][:lighting :run]
[58:44][Fail to hit our assertion in -O2, until hitting it on the bottom 7th SpecAtlas texel][:lighting :run]
[59:46][Wonder if TransferPPS never gets initialised, causing our negative :lighting values][:research]
[1:01:55][Make GridRayCast() initialise TransferPPS][:lighting]
[1:02:13][Hit our bottom 7th SpecAtlas ValidateTexel() assertion in GridRayCast()][:lighting :run]
[1:02:27][Scrutinise the TransferPPS values in GridRayCast()][:lighting :research]
[1:04:48][Make GridRayCast() assert TransferPPS with ValidateTexel()][:lighting]
[1:05:22][Hit our 1st TransferPPS ValidateTexel() assertion in GridRayCast()][:lighting :run]
[1:05:55][Make GridRayCast() assert TransferPPS with ValidateTexel() upon setting it][:lighting]
[1:06:35][Exhibit our :lighting bug without hitting an assertion, before hitting the TransferPPS one][:run]
[1:07:42][Scrutinise our TransferPPS computation in GridRayCast()][:lighting :research]
[1:10:01][Try to make GridRayCast() assert TransmissionLevel and HitRefColor with ValidateTexel()][:lighting]
[1:10:50][Scrutinise our TransmissionLevel and HitRefColor computations in GridRayCast()][:lighting :research]
[1:12:01][Introduce an f32_4x version of ValidateTexel()][:lighting]
[1:14:04][Hit our 0th HitRefColor ValidateTexel() assertion in GridRayCast()][:lighting :run]
[1:14:34][Scrutinise our HitRefColor computations in GridRayCast()][:lighting :research]
[1:16:21][Make GridRayCast() assert HitRefColor with ValidateTexel() upon initialisation][:lighting]
[1:16:32][Hit our TransferPPS ValidateTexel() assertion in GridRayCast() upon setting it][:lighting :run]
[1:16:59][Make GridRayCast() assert HitRefColor with ValidateTexel() upon setting TransferPPS][:lighting]
[1:17:10][Hit our 0th HitRefColor ValidateTexel() assertion in GridRayCast()][:lighting :run]
[1:17:24][Scrutinise our HitRefColor usage in GridRayCast()][:lighting :research]
[1:18:15][Make GridRayCast() assert Leaf.RefColor with ValidateTexel()][:lighting]
[1:18:41][Hit our 0th Leaf.RefColor ValidateTexel() assertion in GridRayCast()][:lighting :run]
[1:21:28][Focus our :lighting map validation on GridBuildSpatialPartition()][:research]
[1:23:51][Make GridBuildSpatialPartition() assert Leaf.RefColor with ValidateTexel()][:lighting]
[1:25:20][Hit our 0th Leaf.RefColor ValidateTexel() assertion in GridBuildSpatialPartition()][:lighting :run]
[1:25:23][Make GridBuildSpatialPartition() clear the SpatialGridLeaves][:lighting :memory]
[1:25:59][Hit our 0th Leaf.RefColor ValidateTexel() assertion in GridBuildSpatialPartition()][:lighting :run]
[1:26:06][Fix parentheses of ZeroArray()][:memory]
[1:26:37][Assert in GridBuildSpatialPartition() that we are in bounds][:lighting]
[1:27:38][Do not hit our bounds-checking assertion in GridBuildSpatialPartition()][:lighting :run]
[1:27:41][Make GridBuildSpatialPartition() assert Leaf.RefColor with ValidateTexel() upon initialisation][:lighting]
[1:28:28][Do not hit our Leaf.RefColor initialisation assertion in GridBuildSpatialPartition()][:lighting :run]
[1:28:32][Make GridBuildSpatialPartition() assert Leaf.RefColor with ValidateTexel() after fill-in][:lighting]
[1:28:44][Hit our 0th Leaf.RefColor ValidateTexel() assertion in GridBuildSpatialPartition() after fill-in][:lighting :run]
[1:28:48][Make GridBuildSpatialPartition() assert Leaf.RefColor with ValidateTexel() around their setting][:lighting]
[1:30:06][Hit our 0th Leaf.RefColor ValidateTexel() assertion in GridBuildSpatialPartition() after setting][:lighting :run]
[1:30:51][Make GridBuildSpatialPartition() assert Box->RefC with ValidateTexel()][:lighting]
[1:31:28][Hit our Box->RefC ValidateTexel() assertion in GridBuildSpatialPartition()][:lighting :run]
[1:32:20][Focus our validation on PushCube(), PushOccluder() and PushLight()][:lighting]
[1:35:57][Hit our Box->RefC ValidateTexel() assertion in GridBuildSpatialPartition(), but none of the ones upstream][:lighting :run]
[1:38:15][Scrutinise our upstream Box->RefC code][:lighting :research]
[1:41:42][@codeslasher][@handmade_hero You are missing an assert in PushOccluder()][:lighting]
[1:41:47][Make PushCube(), PushOccluder() and PushLight() assert Box->RefC with ValidateTexel()][:lighting]
[1:42:20][Hit our Hit our ValidateAtlas() assertion in BlockCopyAtlas()][:lighting :run]
[1:42:32][Hit our Box->RefC ValidateTexel() assertion in PushOccluder()][:lighting :run]
[1:46:09][#if 0 out the Tag_Ghost indexing into MatchVector.E in UpdateAndRenderEntities()][:"entity system"]
[1:48:10][Try to provoke our "lighting" bug][:lighting :run]
[1:49:56][#define ValidateTexel() as VALIDATE_TEXEL()][:lighting]
[1:53:17][:Run successfully][:lighting]
[1:53:29][Re-enable multithreading][:lighting :threading]
[1:53:44][:Run successfully][:lighting]
[1:56:17][Reflect on our indexing bug, and our pincering method for debugging][:speech]
[1:57:25][Make VALIDATE_TEXEL() self-assert, and #define ValidateAtlas() as VALIDATE_TEXEL_ATLAS()][:lighting]
[1:59:33][:Run successfully][:lighting]
[1:59:48][#define out LIGHT_ATLAS_ASSERT()][:lighting]
[1:59:53][:Run successfully][:lighting]
[2:00:18][Determine to improve the :lighting :filtering][:run]
[2:00:48][Compile and invoke hhsphere][:admin :lighting]
[2:03:05][Rebuild and :run the game][:lighting]
[2:04:05][Make UpdateLighting() decrease tUpdateBlend from 8/60 to 1/60][:lighting]
[2:04:48][Our :lighting is smoother but slower to update][:run]
[2:05:23][Make UpdateLighting() increase tUpdateBlend from 1/60 to 4/60][:lighting]
[2:05:37][Our :lighting is quicker to update, but doesn't propagate evenly][:run]
[2:06:22][Q&A][:speech]
[2:06:37][@mindmark42][Q: Is it only me or does the :lighting seem brighter with the blendv_ps fix?]
[2:07:34][@piggybankstudios][Q: Is there a way to test my GLSL shader compilation success / failure on other GPUs without actually having to buy a bunch of GPUs myself?][:hardware]
[2:08:25][@x13pixels][Whoa. Godbolt for shaders][:hardware]
[2:09:41][@mmozeiko][There is Shader Playground[ref
site="Shader Playground"
url=http://shader-playground.timjones.io/] but that's only for shader libraries (parser / validation / some codegen), not using actual drivers to compile][:hardware]
[2:10:09][@lederr][(Viewbot #420) MrDestructoid Hello Mr. Teapot, I am here to "view" your channel as was previously discussed]
[2:10:26][Consider :lighting improvements][:speech]
[2:11:46][@chepubelie][Q: Are you planning to release Star Code Galaxy[ref
site="Star Code Galaxy"
url=https://starcodegalaxy.com] this year? Will this project be like a [~hero Handmade Hero] where you make usage code first and everything from scratch?]
[2:12:25][@1diogosantana][Are you in a tent?]
[2:12:38][@tarriest_python][Q: Anyone know what browser [@cmuratori Casey] is using? I don't recognise it]
[2:12:54][Thank you for joining][:speech]
[/video]