@@ -325,20 +325,6 @@ pl_renderer_initialize(plRendererSettings tSettings)
325325 };
326326 gptData -> tPickViewBindGroupLayout = gptGfx -> create_bind_group_layout (gptData -> ptDevice , & tPickBindGroupLayout );
327327
328- plBindGroupLayoutDesc tComputeBindGroupLayout = {
329- .atBufferBindings = {
330- { .tType = PL_BUFFER_BINDING_TYPE_STORAGE , .uSlot = 0 , .tStages = PL_SHADER_STAGE_COMPUTE },
331- { .tType = PL_BUFFER_BINDING_TYPE_STORAGE , .uSlot = 1 , .tStages = PL_SHADER_STAGE_COMPUTE },
332- { .tType = PL_BUFFER_BINDING_TYPE_STORAGE , .uSlot = 2 , .tStages = PL_SHADER_STAGE_COMPUTE },
333- { .tType = PL_BUFFER_BINDING_TYPE_STORAGE , .uSlot = 3 , .tStages = PL_SHADER_STAGE_COMPUTE },
334- { .tType = PL_BUFFER_BINDING_TYPE_STORAGE , .uSlot = 4 , .tStages = PL_SHADER_STAGE_COMPUTE },
335- { .tType = PL_BUFFER_BINDING_TYPE_STORAGE , .uSlot = 5 , .tStages = PL_SHADER_STAGE_COMPUTE },
336- { .tType = PL_BUFFER_BINDING_TYPE_STORAGE , .uSlot = 6 , .tStages = PL_SHADER_STAGE_COMPUTE },
337- },
338- };
339- gptData -> tSkyboxComputeBindGroupLayout = gptGfx -> create_bind_group_layout (gptData -> ptDevice , & tComputeBindGroupLayout );
340-
341-
342328 plBindGroupLayoutDesc tSkyboxBindGroupLayout = {
343329 .atTextureBindings = { {.uSlot = 0 , .tStages = PL_SHADER_STAGE_FRAGMENT | PL_SHADER_STAGE_VERTEX , .tType = PL_TEXTURE_BINDING_TYPE_SAMPLED }}
344330 };
@@ -409,27 +395,6 @@ pl_renderer_initialize(plRendererSettings tSettings)
409395 };
410396 gptData -> tPickBG0Layout = gptGfx -> create_bind_group_layout (gptData -> ptDevice , & tPickBG0Layout );
411397
412- const plBindGroupLayoutDesc tJFABindGroupLayout = {
413- .atTextureBindings = {
414- {.uSlot = 0 , .tStages = PL_SHADER_STAGE_COMPUTE , .tType = PL_TEXTURE_BINDING_TYPE_STORAGE },
415- {.uSlot = 1 , .tStages = PL_SHADER_STAGE_COMPUTE , .tType = PL_TEXTURE_BINDING_TYPE_STORAGE }
416- }
417- };
418- gptData -> tJFABGLayout = gptGfx -> create_bind_group_layout (gptData -> ptDevice , & tJFABindGroupLayout );
419-
420- const plBindGroupLayoutDesc tSkinBindGroupLayout0 = {
421- .atSamplerBindings = {
422- {.uSlot = 3 , .tStages = PL_SHADER_STAGE_COMPUTE }
423- },
424- .atBufferBindings = {
425- { .uSlot = 0 , .tType = PL_BUFFER_BINDING_TYPE_STORAGE , .tStages = PL_SHADER_STAGE_COMPUTE },
426- { .uSlot = 1 , .tType = PL_BUFFER_BINDING_TYPE_STORAGE , .tStages = PL_SHADER_STAGE_COMPUTE },
427- { .uSlot = 2 , .tType = PL_BUFFER_BINDING_TYPE_STORAGE , .tStages = PL_SHADER_STAGE_COMPUTE },
428- }
429- };
430- gptData -> tSkin2BGLayout = gptGfx -> create_bind_group_layout (gptData -> ptDevice , & tSkinBindGroupLayout0 );
431-
432-
433398 plBindGroupLayoutDesc tBindGroupLayout0 = {
434399 .atBufferBindings = {
435400 {
@@ -446,42 +411,6 @@ pl_renderer_initialize(plRendererSettings tSettings)
446411 };
447412 gptData -> tShadowGlobalBGLayout = gptGfx -> create_bind_group_layout (gptData -> ptDevice , & tBindGroupLayout0 );
448413
449- const plBindGroupLayoutDesc tOutlineBindGroupLayout = {
450- .atSamplerBindings = {
451- { .uSlot = 0 , .tStages = PL_SHADER_STAGE_FRAGMENT }
452- },
453- .atTextureBindings = {
454- {.uSlot = 1 , .tStages = PL_SHADER_STAGE_FRAGMENT , .tType = PL_TEXTURE_BINDING_TYPE_SAMPLED },
455- {.uSlot = 2 , .tStages = PL_SHADER_STAGE_FRAGMENT , .tType = PL_TEXTURE_BINDING_TYPE_SAMPLED }
456- }
457- };
458- gptData -> tOutlineBGLayout = gptGfx -> create_bind_group_layout (gptData -> ptDevice , & tOutlineBindGroupLayout );
459-
460- plBindGroupLayoutDesc tSkinBindGroupLayout = {
461- .atBufferBindings = {
462- {.uSlot = 0 , .tStages = PL_SHADER_STAGE_COMPUTE , .tType = PL_BUFFER_BINDING_TYPE_STORAGE }
463- }
464- };
465- gptData -> tSkinBGLayout = gptGfx -> create_bind_group_layout (gptData -> ptDevice , & tSkinBindGroupLayout );
466-
467- plBindGroupLayoutDesc tEnvBindgroupLayout = {
468- .atTextureBindings = {
469- {.uSlot = 1 , .tStages = PL_SHADER_STAGE_COMPUTE , .tType = PL_TEXTURE_BINDING_TYPE_SAMPLED }
470- },
471- .atBufferBindings = {
472- { .tType = PL_BUFFER_BINDING_TYPE_STORAGE , .uSlot = 2 , .tStages = PL_SHADER_STAGE_COMPUTE },
473- { .tType = PL_BUFFER_BINDING_TYPE_STORAGE , .uSlot = 3 , .tStages = PL_SHADER_STAGE_COMPUTE },
474- { .tType = PL_BUFFER_BINDING_TYPE_STORAGE , .uSlot = 4 , .tStages = PL_SHADER_STAGE_COMPUTE },
475- { .tType = PL_BUFFER_BINDING_TYPE_STORAGE , .uSlot = 5 , .tStages = PL_SHADER_STAGE_COMPUTE },
476- { .tType = PL_BUFFER_BINDING_TYPE_STORAGE , .uSlot = 6 , .tStages = PL_SHADER_STAGE_COMPUTE },
477- { .tType = PL_BUFFER_BINDING_TYPE_STORAGE , .uSlot = 7 , .tStages = PL_SHADER_STAGE_COMPUTE },
478- { .tType = PL_BUFFER_BINDING_TYPE_STORAGE , .uSlot = 8 , .tStages = PL_SHADER_STAGE_COMPUTE },
479- },
480- .atSamplerBindings = { {.uSlot = 0 , .tStages = PL_SHADER_STAGE_COMPUTE }}
481- };
482- gptData -> tEnvBGLayout = gptGfx -> create_bind_group_layout (gptData -> ptDevice , & tEnvBindgroupLayout );
483-
484-
485414 // create pools
486415 for (uint32_t i = 0 ; i < gptGfx -> get_frames_in_flight (); i ++ )
487416 {
@@ -784,19 +713,7 @@ pl_renderer_initialize(plRendererSettings tSettings)
784713 // create template shaders
785714
786715 pl__renderer_create_global_shaders ();
787-
788- const plComputeShaderDesc tComputeShaderDesc = {
789- .tShader = gptShader -> load_glsl ("jumpfloodalgo.comp" , "main" , NULL , NULL ),
790- .atBindGroupLayouts = {
791- {
792- .atTextureBindings = {
793- {.uSlot = 0 , .tStages = PL_SHADER_STAGE_COMPUTE , .tType = PL_TEXTURE_BINDING_TYPE_STORAGE },
794- {.uSlot = 1 , .tStages = PL_SHADER_STAGE_COMPUTE , .tType = PL_TEXTURE_BINDING_TYPE_STORAGE }
795- }
796- }
797- }
798- };
799- gptData -> tJFAShader = gptGfx -> create_compute_shader (gptData -> ptDevice , & tComputeShaderDesc );
716+ gptData -> tJFAShader = gptShaderTools -> load_compute_shader ("/shaders/shaders.pls" , "jumpfloodalgo" , NULL );
800717 pl_temp_allocator_reset (& gptData -> tTempAllocator );
801718
802719 // create full quad
@@ -823,28 +740,10 @@ pl_renderer_initialize(plRendererSettings tSettings)
823740
824741 // create semaphores
825742 gptData -> ptClickSemaphore = gptGfx -> create_semaphore (gptData -> ptDevice , false);
743+ gptData -> tEnvFilterShader = gptShaderTools -> load_compute_shader ("/shaders/shaders.pls" , "filter_environment" , NULL );
826744
827- plComputeShaderDesc tFilterComputeShaderDesc = {
828- .tShader = gptShader -> load_glsl ("filter_environment.comp" , "main" , NULL , NULL ),
829- .atBindGroupLayouts = {
830- {
831- .atTextureBindings = {
832- {.uSlot = 1 , .tStages = PL_SHADER_STAGE_COMPUTE , .tType = PL_TEXTURE_BINDING_TYPE_SAMPLED }
833- },
834- .atBufferBindings = {
835- { .tType = PL_BUFFER_BINDING_TYPE_STORAGE , .uSlot = 2 , .tStages = PL_SHADER_STAGE_COMPUTE },
836- { .tType = PL_BUFFER_BINDING_TYPE_STORAGE , .uSlot = 3 , .tStages = PL_SHADER_STAGE_COMPUTE },
837- { .tType = PL_BUFFER_BINDING_TYPE_STORAGE , .uSlot = 4 , .tStages = PL_SHADER_STAGE_COMPUTE },
838- { .tType = PL_BUFFER_BINDING_TYPE_STORAGE , .uSlot = 5 , .tStages = PL_SHADER_STAGE_COMPUTE },
839- { .tType = PL_BUFFER_BINDING_TYPE_STORAGE , .uSlot = 6 , .tStages = PL_SHADER_STAGE_COMPUTE },
840- { .tType = PL_BUFFER_BINDING_TYPE_STORAGE , .uSlot = 7 , .tStages = PL_SHADER_STAGE_COMPUTE },
841- { .tType = PL_BUFFER_BINDING_TYPE_STORAGE , .uSlot = 8 , .tStages = PL_SHADER_STAGE_COMPUTE },
842- },
843- .atSamplerBindings = { {.uSlot = 0 , .tStages = PL_SHADER_STAGE_COMPUTE }}
844- }
845- }
846- };
847- gptData -> tEnvFilterShader = gptGfx -> create_compute_shader (gptData -> ptDevice , & tFilterComputeShaderDesc );
745+ int aiSpecData [4 ] = {0 };
746+ gptData -> tSkinShader = gptShaderTools -> load_compute_shader ("/shaders/shaders.pls" , "skinning" , aiSpecData );
848747};
849748
850749plScene *
@@ -1001,46 +900,7 @@ pl_renderer_create_scene(plSceneInit tInit)
1001900 ptScene -> tFirstShadowRenderPass = gptGfx -> create_render_pass (gptData -> ptDevice , & tFirstDepthRenderPassDesc , atShadowAttachmentSets );
1002901
1003902 // create tonemap shader
1004- const plShaderDesc tTonemapShaderDesc = {
1005- .tPixelShader = gptShader -> load_glsl ("tonemap.frag" , "main" , NULL , NULL ),
1006- .tVertexShader = gptShader -> load_glsl ("full_quad.vert" , "main" , NULL , NULL ),
1007- .tGraphicsState = {
1008- .ulDepthWriteEnabled = 0 ,
1009- .ulDepthMode = PL_COMPARE_MODE_ALWAYS ,
1010- .ulCullMode = PL_CULL_MODE_NONE ,
1011- .ulStencilMode = PL_COMPARE_MODE_ALWAYS ,
1012- .ulStencilRef = 0xff ,
1013- .ulStencilMask = 0xff ,
1014- .ulStencilOpFail = PL_STENCIL_OP_KEEP ,
1015- .ulStencilOpDepthFail = PL_STENCIL_OP_KEEP ,
1016- .ulStencilOpPass = PL_STENCIL_OP_KEEP
1017- },
1018- .atVertexBufferLayouts = {
1019- {
1020- .uByteStride = sizeof (float ) * 4 ,
1021- .atAttributes = {
1022- {.uByteOffset = 0 , .tFormat = PL_VERTEX_FORMAT_FLOAT2 },
1023- {.uByteOffset = sizeof (float ) * 2 , .tFormat = PL_VERTEX_FORMAT_FLOAT2 }
1024- }
1025- }
1026- },
1027- .atBlendStates = {
1028- pl__renderer_get_blend_state (PL_BLEND_MODE_OPAQUE )
1029- },
1030- .tRenderPassLayout = gptData -> tPostProcessRenderPassLayout ,
1031- .atBindGroupLayouts = {
1032- {
1033- .atSamplerBindings = {
1034- { .uSlot = 0 , .tStages = PL_SHADER_STAGE_FRAGMENT }
1035- },
1036- .atTextureBindings = {
1037- {.uSlot = 1 , .tStages = PL_SHADER_STAGE_FRAGMENT , .tType = PL_TEXTURE_BINDING_TYPE_SAMPLED },
1038- {.uSlot = 2 , .tStages = PL_SHADER_STAGE_FRAGMENT , .tType = PL_TEXTURE_BINDING_TYPE_SAMPLED }
1039- }
1040- }
1041- }
1042- };
1043- ptScene -> tTonemapShader = gptGfx -> create_shader (gptData -> ptDevice , & tTonemapShaderDesc );
903+ ptScene -> tTonemapShader = gptShaderTools -> load_shader ("/shaders/shaders.pls" , "tonemap" , (plGraphicsState ){0 }, gptData -> tPostProcessRenderPassLayout , NULL );
1044904
1045905 return ptScene ;
1046906}
@@ -1173,7 +1033,7 @@ pl_renderer_cleanup_scene(plScene* ptScene)
11731033 gptGfx -> queue_texture_for_deletion (gptData -> ptDevice , ptScene -> tShadowTexture );
11741034 gptGfx -> queue_render_pass_for_deletion (gptData -> ptDevice , ptScene -> tShadowRenderPass );
11751035 gptGfx -> queue_render_pass_for_deletion (gptData -> ptDevice , ptScene -> tFirstShadowRenderPass );
1176- gptGfx -> queue_shader_for_deletion ( gptData -> ptDevice , ptScene -> tTonemapShader );
1036+ gptShaderTools -> unload_shader ( ptScene -> tTonemapShader );
11771037 gptGfx -> queue_shader_for_deletion (gptData -> ptDevice , ptScene -> tLightingShader );
11781038 gptGfx -> queue_shader_for_deletion (gptData -> ptDevice , ptScene -> tEnvLightingShader );
11791039
@@ -1844,29 +1704,7 @@ pl_renderer_load_skybox_from_panorama(plScene* ptScene, const char* pcPath, int
18441704 const size_t uFaceSize = ((size_t )iResolution * (size_t )iResolution ) * 4 * sizeof (float );
18451705 {
18461706 int aiSkyboxSpecializationData [] = {iResolution , iPanoramaWidth , iPanoramaHeight };
1847- const plComputeShaderDesc tSkyboxComputeShaderDesc = {
1848- .tShader = gptShader -> load_glsl ("panorama_to_cubemap.comp" , "main" , NULL , NULL ),
1849- .pTempConstantData = aiSkyboxSpecializationData ,
1850- .atConstants = {
1851- { .uID = 0 , .uOffset = 0 , .tType = PL_DATA_TYPE_INT },
1852- { .uID = 1 , .uOffset = sizeof (int ), .tType = PL_DATA_TYPE_INT },
1853- { .uID = 2 , .uOffset = 2 * sizeof (int ), .tType = PL_DATA_TYPE_INT }
1854- },
1855- .atBindGroupLayouts = {
1856- {
1857- .atBufferBindings = {
1858- { .tType = PL_BUFFER_BINDING_TYPE_STORAGE , .uSlot = 0 , .tStages = PL_SHADER_STAGE_COMPUTE },
1859- { .tType = PL_BUFFER_BINDING_TYPE_STORAGE , .uSlot = 1 , .tStages = PL_SHADER_STAGE_COMPUTE },
1860- { .tType = PL_BUFFER_BINDING_TYPE_STORAGE , .uSlot = 2 , .tStages = PL_SHADER_STAGE_COMPUTE },
1861- { .tType = PL_BUFFER_BINDING_TYPE_STORAGE , .uSlot = 3 , .tStages = PL_SHADER_STAGE_COMPUTE },
1862- { .tType = PL_BUFFER_BINDING_TYPE_STORAGE , .uSlot = 4 , .tStages = PL_SHADER_STAGE_COMPUTE },
1863- { .tType = PL_BUFFER_BINDING_TYPE_STORAGE , .uSlot = 5 , .tStages = PL_SHADER_STAGE_COMPUTE },
1864- { .tType = PL_BUFFER_BINDING_TYPE_STORAGE , .uSlot = 6 , .tStages = PL_SHADER_STAGE_COMPUTE },
1865- }
1866- }
1867- }
1868- };
1869- plComputeShaderHandle tPanoramaShader = gptGfx -> create_compute_shader (ptDevice , & tSkyboxComputeShaderDesc );
1707+ plComputeShaderHandle tPanoramaShader = gptShaderTools -> load_compute_shader ("/shaders/shaders.pls" , "panorama_to_cubemap" , aiSkyboxSpecializationData );
18701708 pl_temp_allocator_reset (& gptData -> tTempAllocator );
18711709
18721710 plBufferHandle atComputeBuffers [7 ] = {0 };
@@ -1893,11 +1731,11 @@ pl_renderer_load_skybox_from_panorama(plScene* ptScene, const char* pcPath, int
18931731
18941732 const plBindGroupDesc tComputeBindGroupDesc = {
18951733 .ptPool = gptData -> aptTempGroupPools [gptGfx -> get_current_frame_index ()],
1896- .tLayout = gptData -> tSkyboxComputeBindGroupLayout ,
1734+ .tLayout = gptShaderTools -> get_compute_bind_group_layout ( tPanoramaShader , 0 ) ,
18971735 .pcDebugName = "compute bind group"
18981736 };
18991737 plBindGroupHandle tComputeBindGroup = gptGfx -> create_bind_group (ptDevice , & tComputeBindGroupDesc );
1900- const plBindGroupUpdateBufferData atBGBufferData [] = {
1738+ const plBindGroupUpdateBufferData atBGBufferData [] = {
19011739 { .uSlot = 0 , .tBuffer = atComputeBuffers [0 ], .szBufferRange = uPanoramaSize },
19021740 { .uSlot = 1 , .tBuffer = atComputeBuffers [1 ], .szBufferRange = uFaceSize },
19031741 { .uSlot = 2 , .tBuffer = atComputeBuffers [2 ], .szBufferRange = uFaceSize },
@@ -2181,7 +2019,7 @@ pl_renderer_reload_scene_shaders(plScene* ptScene)
21812019 gptGfx -> queue_shader_for_deletion (gptData -> ptDevice , gptData -> tPickShader );
21822020 gptGfx -> queue_shader_for_deletion (gptData -> ptDevice , gptData -> tUVShader );
21832021 gptGfx -> queue_shader_for_deletion (gptData -> ptDevice , gptData -> tSkyboxShader );
2184- gptGfx -> queue_compute_shader_for_deletion ( gptData -> ptDevice , gptData -> tEnvFilterShader );
2022+ gptShaderTools -> unload_compute_shader ( gptData -> tEnvFilterShader );
21852023
21862024 pl__renderer_create_global_shaders ();
21872025
@@ -2214,7 +2052,7 @@ pl_renderer_reload_scene_shaders(plScene* ptScene)
22142052 pl_sb_reset (ptScene -> sbtOutlineDrawablesOldEnvShaders );
22152053
22162054 gptGfx -> queue_shader_for_deletion (gptData -> ptDevice , ptScene -> tLightingShader );
2217- gptGfx -> queue_shader_for_deletion ( gptData -> ptDevice , ptScene -> tTonemapShader );
2055+ gptShaderTools -> unload_shader ( ptScene -> tTonemapShader );
22182056 gptGfx -> queue_shader_for_deletion (gptData -> ptDevice , ptScene -> tEnvLightingShader );
22192057
22202058 int iSceneWideRenderingFlags = PL_RENDERING_FLAG_SHADOWS ;
@@ -2319,46 +2157,7 @@ pl_renderer_reload_scene_shaders(plScene* ptScene)
23192157 ptScene -> tEnvLightingShader = gptGfx -> create_shader (gptData -> ptDevice , & tLightingShaderDesc );
23202158 }
23212159
2322- const plShaderDesc tTonemapShaderDesc = {
2323- .tPixelShader = gptShader -> load_glsl ("tonemap.frag" , "main" , NULL , NULL ),
2324- .tVertexShader = gptShader -> load_glsl ("full_quad.vert" , "main" , NULL , NULL ),
2325- .tGraphicsState = {
2326- .ulDepthWriteEnabled = 0 ,
2327- .ulDepthMode = PL_COMPARE_MODE_ALWAYS ,
2328- .ulCullMode = PL_CULL_MODE_NONE ,
2329- .ulStencilMode = PL_COMPARE_MODE_ALWAYS ,
2330- .ulStencilRef = 0xff ,
2331- .ulStencilMask = 0xff ,
2332- .ulStencilOpFail = PL_STENCIL_OP_KEEP ,
2333- .ulStencilOpDepthFail = PL_STENCIL_OP_KEEP ,
2334- .ulStencilOpPass = PL_STENCIL_OP_KEEP
2335- },
2336- .atVertexBufferLayouts = {
2337- {
2338- .uByteStride = sizeof (float ) * 4 ,
2339- .atAttributes = {
2340- {.uByteOffset = 0 , .tFormat = PL_VERTEX_FORMAT_FLOAT2 },
2341- {.uByteOffset = sizeof (float ) * 2 , .tFormat = PL_VERTEX_FORMAT_FLOAT2 }
2342- }
2343- }
2344- },
2345- .atBlendStates = {
2346- pl__renderer_get_blend_state (PL_BLEND_MODE_OPAQUE )
2347- },
2348- .tRenderPassLayout = gptData -> tPostProcessRenderPassLayout ,
2349- .atBindGroupLayouts = {
2350- {
2351- .atSamplerBindings = {
2352- { .uSlot = 0 , .tStages = PL_SHADER_STAGE_FRAGMENT }
2353- },
2354- .atTextureBindings = {
2355- {.uSlot = 1 , .tStages = PL_SHADER_STAGE_FRAGMENT , .tType = PL_TEXTURE_BINDING_TYPE_SAMPLED },
2356- {.uSlot = 2 , .tStages = PL_SHADER_STAGE_FRAGMENT , .tType = PL_TEXTURE_BINDING_TYPE_SAMPLED }
2357- }
2358- }
2359- }
2360- };
2361- ptScene -> tTonemapShader = gptGfx -> create_shader (gptData -> ptDevice , & tTonemapShaderDesc );
2160+ ptScene -> tTonemapShader = gptShaderTools -> load_shader ("/shaders/shaders.pls" , "tonemap" , (plGraphicsState ){0 }, gptData -> tPostProcessRenderPassLayout , NULL );
23622161
23632162 pl__renderer_set_drawable_shaders (ptScene );
23642163 pl__renderer_sort_drawables (ptScene );
@@ -3007,7 +2806,7 @@ pl_renderer_render_view(plView* ptView, plCamera* ptCamera, plCamera* ptCullCame
30072806
30082807 const plBindGroupDesc tJFABindGroupDesc = {
30092808 .ptPool = gptData -> aptTempGroupPools [uFrameIdx ],
3010- .tLayout = gptData -> tJFABGLayout ,
2809+ .tLayout = gptShaderTools -> get_compute_bind_group_layout ( gptData -> tJFAShader , 0 ) ,
30112810 .pcDebugName = "temp jfa bind group"
30122811 };
30132812
0 commit comments