From 97e68bcc45892a92e4cf65d48a34a8d5ba0a999d Mon Sep 17 00:00:00 2001 From: Matt Mascarenhas Date: Fri, 5 Mar 2021 16:27:54 +0000 Subject: [PATCH] Index hero/code625 --- cmuratori/hero/code/code625.hmml | 149 +++++++++++++++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100644 cmuratori/hero/code/code625.hmml diff --git a/cmuratori/hero/code/code625.hmml b/cmuratori/hero/code/code625.hmml new file mode 100644 index 0000000..6b67719 --- /dev/null +++ b/cmuratori/hero/code/code625.hmml @@ -0,0 +1,149 @@ +[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]