@@ -517,19 +517,6 @@ pl_renderer_initialize(plRendererSettings tSettings)
517
517
gptData -> ptStagingUnCachedBuddyAllocator = gptGpuAllocators -> get_staging_uncached_buddy_allocator (gptData -> ptDevice );
518
518
gptData -> ptStagingCachedAllocator = gptGpuAllocators -> get_staging_cached_allocator (gptData -> ptDevice );
519
519
520
- // create staging buffers
521
- // const plBufferDesc tStagingBufferDesc = {
522
- // .tUsage = PL_BUFFER_USAGE_STAGING,
523
- // .szByteSize = 268435456,
524
- // .pcDebugName = "Renderer Staging Buffer"
525
- // };
526
- // for(uint32_t i = 0; i < gptGfx->get_frames_in_flight(); i++)
527
- // {
528
- // gptData->atStagingBufferHandle[i].tStagingBufferHandle = pl__renderer_create_staging_buffer(&tStagingBufferDesc, "staging", i);
529
- // gptData->atStagingBufferHandle[i].szOffset = 0;
530
- // gptData->atStagingBufferHandle[i].szSize = tStagingBufferDesc.szByteSize;
531
- // }
532
-
533
520
// create dummy textures
534
521
const plTextureDesc tDummyTextureDesc = {
535
522
.tDimensions = {2 , 2 , 1 },
@@ -984,16 +971,17 @@ pl_renderer_create_scene(plSceneInit tInit)
984
971
// create global bindgroup
985
972
ptScene -> uTextureIndexCount = 0 ;
986
973
987
-
988
974
for (uint32_t i = 0 ; i < gptGfx -> get_frames_in_flight (); i ++ )
989
975
{
976
+ // create global bindgroup
990
977
const plBindGroupDesc tGlobalBindGroupDesc = {
991
978
.ptPool = gptData -> ptBindGroupPool ,
992
979
.tLayout = gptData -> tGlobalSceneBindGroupLayout ,
993
980
.pcDebugName = "global bind group"
994
981
};
995
982
ptScene -> atGlobalBindGroup [i ] = gptGfx -> create_bind_group (gptData -> ptDevice , & tGlobalBindGroupDesc );
996
983
984
+ // partially update global bindgroup (just samplers)
997
985
plBindGroupUpdateSamplerData tGlobalSamplerData [] = {
998
986
{
999
987
.tSampler = gptData -> tDefaultSampler ,
@@ -1006,16 +994,15 @@ pl_renderer_create_scene(plSceneInit tInit)
1006
994
};
1007
995
1008
996
plBindGroupUpdateData tGlobalBindGroupData = {
1009
- .uSamplerCount = 2 ,
997
+ .uSamplerCount = 2 ,
1010
998
.atSamplerBindings = tGlobalSamplerData ,
1011
999
};
1012
-
1013
1000
gptGfx -> update_bind_group (gptData -> ptDevice , ptScene -> atGlobalBindGroup [i ], & tGlobalBindGroupData );
1014
1001
}
1015
1002
1003
+ // pre-create some global buffers, later we should defer this
1016
1004
const plBufferDesc atLightShadowDataBufferDesc = {
1017
1005
.tUsage = PL_BUFFER_USAGE_STORAGE | PL_BUFFER_USAGE_STAGING ,
1018
- // .szByteSize = 134217728,
1019
1006
.szByteSize = PL_MAX_LIGHTS * sizeof (plGPULightShadowData ),
1020
1007
.pcDebugName = "shadow data buffer"
1021
1008
};
@@ -1034,14 +1021,12 @@ pl_renderer_create_scene(plSceneInit tInit)
1034
1021
1035
1022
for (uint32_t i = 0 ; i < gptGfx -> get_frames_in_flight (); i ++ )
1036
1023
{
1037
-
1038
1024
ptScene -> atLightShadowDataBuffer [i ] = pl__renderer_create_staging_buffer (& atLightShadowDataBufferDesc , "shadow buffer" , i );
1039
- ptScene -> atShadowCameraBuffers [i ] = pl__renderer_create_staging_buffer (& atCameraBuffersDesc , "shadow camera buffer" , i );
1040
-
1041
- ptScene -> atGPUProbeDataBuffers [i ] = pl__renderer_create_staging_buffer (& atProbeDataBufferDesc , "probe buffer" , i );
1042
-
1025
+ ptScene -> atShadowCameraBuffers [i ] = pl__renderer_create_staging_buffer (& atCameraBuffersDesc , "shadow camera buffer" , i );
1026
+ ptScene -> atGPUProbeDataBuffers [i ] = pl__renderer_create_staging_buffer (& atProbeDataBufferDesc , "probe buffer" , i );
1043
1027
}
1044
1028
1029
+ // pre-create working buffers for environment filtering, later we should defer this
1045
1030
for (uint32_t i = 0 ; i < 7 ; i ++ )
1046
1031
{
1047
1032
const size_t uMaxFaceSize = ((size_t )1024 * (size_t )1024 ) * 4 * sizeof (float );
@@ -1054,6 +1039,7 @@ pl_renderer_create_scene(plSceneInit tInit)
1054
1039
ptScene -> atFilterWorkingBuffers [i ] = pl__renderer_create_local_buffer (& tInputBufferDesc , "filter buffer" , i , NULL , 0 );
1055
1040
}
1056
1041
1042
+ // create probe material & mesh
1057
1043
plMaterialComponent * ptMaterial = NULL ;
1058
1044
plEntity tMaterial = pl_renderer_create_material (ptScene -> ptComponentLibrary , "environment probe material" , & ptMaterial );
1059
1045
ptMaterial -> tBlendMode = PL_BLEND_MODE_OPAQUE ;
@@ -1067,8 +1053,8 @@ pl_renderer_create_scene(plSceneInit tInit)
1067
1053
ptScene -> tProbeMesh = gptMesh -> create_sphere_mesh (ptScene -> ptComponentLibrary , "environment probe mesh" , 0.25f , 32 , 32 , & ptMesh );
1068
1054
ptMesh -> tMaterial = tMaterial ;
1069
1055
1056
+ // create shadow atlas
1070
1057
ptScene -> uShadowAtlasResolution = 1024 * 8 ;
1071
-
1072
1058
const plTextureDesc tShadowDepthTextureDesc = {
1073
1059
.tDimensions = {(float )ptScene -> uShadowAtlasResolution , (float )ptScene -> uShadowAtlasResolution , 1 },
1074
1060
.tFormat = PL_FORMAT_D16_UNORM ,
@@ -1078,7 +1064,9 @@ pl_renderer_create_scene(plSceneInit tInit)
1078
1064
.tUsage = PL_TEXTURE_USAGE_DEPTH_STENCIL_ATTACHMENT | PL_TEXTURE_USAGE_SAMPLED ,
1079
1065
.pcDebugName = "shadow map"
1080
1066
};
1067
+ ptScene -> tShadowTexture = pl__renderer_create_local_texture (& tShadowDepthTextureDesc , "shadow map" , 0 , PL_TEXTURE_USAGE_SAMPLED );
1081
1068
1069
+ // create shadow map render passes
1082
1070
const plRenderPassDesc tDepthRenderPassDesc = {
1083
1071
.tLayout = gptData -> tDepthRenderPassLayout ,
1084
1072
.tDepthTarget = {
@@ -1108,16 +1096,15 @@ pl_renderer_create_scene(plSceneInit tInit)
1108
1096
};
1109
1097
1110
1098
plRenderPassAttachments atShadowAttachmentSets [PL_MAX_FRAMES_IN_FLIGHT ] = {0 };
1111
- ptScene -> tShadowTexture = pl__renderer_create_local_texture (& tShadowDepthTextureDesc , "shadow map" , 0 , PL_TEXTURE_USAGE_SAMPLED );
1112
1099
ptScene -> atShadowTextureBindlessIndices = pl__renderer_get_bindless_texture_index (ptScene , ptScene -> tShadowTexture );
1113
1100
for (uint32_t i = 0 ; i < gptGfx -> get_frames_in_flight (); i ++ )
1114
1101
{
1115
1102
atShadowAttachmentSets [i ].atViewAttachments [0 ] = ptScene -> tShadowTexture ;
1116
1103
}
1117
-
1118
1104
ptScene -> tShadowRenderPass = gptGfx -> create_render_pass (gptData -> ptDevice , & tDepthRenderPassDesc , atShadowAttachmentSets );
1119
1105
ptScene -> tFirstShadowRenderPass = gptGfx -> create_render_pass (gptData -> ptDevice , & tFirstDepthRenderPassDesc , atShadowAttachmentSets );
1120
1106
1107
+ // create tonemap shader
1121
1108
const plShaderDesc tTonemapShaderDesc = {
1122
1109
.tPixelShader = gptShader -> load_glsl ("tonemap.frag" , "main" , NULL , NULL ),
1123
1110
.tVertexShader = gptShader -> load_glsl ("full_quad.vert" , "main" , NULL , NULL ),
@@ -2158,56 +2145,6 @@ pl_renderer_outline_entities(plScene* ptScene, uint32_t uCount, plEntity* atEnti
2158
2145
{
2159
2146
plEntity tEntity = ptScene -> sbtOutlinedEntities [i ];
2160
2147
2161
- plObjectComponent * ptObject = gptECS -> get_component (ptScene -> ptComponentLibrary , gptData -> tObjectComponentType , tEntity );
2162
- plMeshComponent * ptMesh = gptECS -> get_component (ptScene -> ptComponentLibrary , tMeshComponentType , ptObject -> tMesh );
2163
- plMaterialComponent * ptMaterial = gptECS -> get_component (ptScene -> ptComponentLibrary , gptData -> tMaterialComponentType , ptMesh -> tMaterial );
2164
-
2165
- int iDataStride = 0 ;
2166
- int iFlagCopy0 = (int )ptMesh -> ulVertexStreamMask ;
2167
- while (iFlagCopy0 )
2168
- {
2169
- iDataStride += iFlagCopy0 & 1 ;
2170
- iFlagCopy0 >>= 1 ;
2171
- }
2172
-
2173
- int iTextureMappingFlags = 0 ;
2174
- for (uint32_t j = 0 ; j < PL_TEXTURE_SLOT_COUNT ; j ++ )
2175
- {
2176
- if ((ptMaterial -> atTextureMaps [j ].acName [0 ] != 0 ))
2177
- iTextureMappingFlags |= 1 << j ;
2178
- }
2179
-
2180
- int iObjectRenderingFlags = iSceneWideRenderingFlags ;
2181
-
2182
- if (ptMaterial -> tFlags & PL_MATERIAL_FLAG_CAST_RECEIVE_SHADOW )
2183
- {
2184
- iObjectRenderingFlags |= PL_RENDERING_FLAG_SHADOWS ;
2185
- }
2186
-
2187
- // choose shader variant
2188
- int aiConstantData0 [5 ] = {
2189
- (int )ptMesh -> ulVertexStreamMask ,
2190
- iDataStride ,
2191
- iTextureMappingFlags ,
2192
- PL_INFO_MATERIAL_METALLICROUGHNESS ,
2193
- iObjectRenderingFlags
2194
- };
2195
-
2196
- // use stencil buffer
2197
- const plGraphicsState tOutlineVariantTemp = {
2198
- .ulDepthWriteEnabled = 0 ,
2199
- .ulDepthMode = PL_COMPARE_MODE_ALWAYS ,
2200
- .ulCullMode = PL_CULL_MODE_CULL_FRONT ,
2201
- .ulWireframe = 0 ,
2202
- .ulStencilTestEnabled = 1 ,
2203
- .ulStencilMode = PL_COMPARE_MODE_LESS ,
2204
- .ulStencilRef = 128 ,
2205
- .ulStencilMask = 0xff ,
2206
- .ulStencilOpFail = PL_STENCIL_OP_KEEP ,
2207
- .ulStencilOpDepthFail = PL_STENCIL_OP_KEEP ,
2208
- .ulStencilOpPass = PL_STENCIL_OP_KEEP
2209
- };
2210
-
2211
2148
uint64_t ulIndex = 0 ;
2212
2149
if (pl_hm_has_key_ex (& ptScene -> tDrawableHashmap , tEntity .uData , & ulIndex ))
2213
2150
{
@@ -2232,8 +2169,6 @@ pl_renderer_outline_entities(plScene* ptScene, uint32_t uCount, plEntity* atEnti
2232
2169
}
2233
2170
}
2234
2171
}
2235
-
2236
- // gptGfx->queue_shader_for_deletion(ptDevice, ptScene->sbtOutlinedEntities[i].tShader);
2237
2172
}
2238
2173
pl_sb_reset (ptScene -> sbtOutlinedEntities );
2239
2174
pl_sb_reset (ptScene -> sbtOutlineDrawablesOldShaders );
@@ -2300,21 +2235,6 @@ pl_renderer_outline_entities(plScene* ptScene, uint32_t uCount, plEntity* atEnti
2300
2235
tVariantTemp .ulStencilOpDepthFail = PL_STENCIL_OP_REPLACE ;
2301
2236
tVariantTemp .ulStencilOpPass = PL_STENCIL_OP_REPLACE ;
2302
2237
2303
- // use stencil buffer
2304
- const plGraphicsState tOutlineVariantTemp = {
2305
- .ulDepthWriteEnabled = 0 ,
2306
- .ulDepthMode = PL_COMPARE_MODE_ALWAYS ,
2307
- .ulCullMode = PL_CULL_MODE_CULL_FRONT ,
2308
- .ulWireframe = 0 ,
2309
- .ulStencilTestEnabled = 1 ,
2310
- .ulStencilMode = PL_COMPARE_MODE_LESS ,
2311
- .ulStencilRef = 128 ,
2312
- .ulStencilMask = 0xff ,
2313
- .ulStencilOpFail = PL_STENCIL_OP_KEEP ,
2314
- .ulStencilOpDepthFail = PL_STENCIL_OP_KEEP ,
2315
- .ulStencilOpPass = PL_STENCIL_OP_KEEP
2316
- };
2317
-
2318
2238
pl_sb_push (ptScene -> sbtOutlinedEntities , ptDrawable -> tEntity );
2319
2239
pl_sb_push (ptScene -> sbtOutlineDrawablesOldShaders , ptDrawable -> tShader );
2320
2240
pl_sb_push (ptScene -> sbtOutlineDrawablesOldEnvShaders , ptDrawable -> tEnvShader );
@@ -2956,7 +2876,6 @@ pl_renderer_prepare_scene(plScene* ptScene)
2956
2876
plBuffer * ptShadowDataBuffer = gptGfx -> get_buffer (ptDevice , ptScene -> atLightShadowDataBuffer [uFrameIdx ]);
2957
2877
memcpy (ptShadowDataBuffer -> tMemoryAllocation .pHostMapped , ptScene -> sbtLightShadowData , sizeof (plGPULightShadowData ) * pl_sb_size (ptScene -> sbtLightShadowData ));
2958
2878
2959
-
2960
2879
const uint32_t uProbeCount = pl_sb_size (ptScene -> sbtProbeData );
2961
2880
for (uint32_t uProbeIndex = 0 ; uProbeIndex < uProbeCount ; uProbeIndex ++ )
2962
2881
{
@@ -3672,26 +3591,6 @@ pl_renderer_render_view(plView* ptView, plCamera* ptCamera, plCamera* ptCullCame
3672
3591
gptGfx -> submit_command_buffer (ptSceneCmdBuffer , & tSceneSubmitInfo );
3673
3592
gptGfx -> return_command_buffer (ptSceneCmdBuffer );
3674
3593
3675
-
3676
- plCommandBuffer * ptPickingDecodeCmdBuffer = gptGfx -> request_command_buffer (ptCmdPool );
3677
-
3678
- const plBeginCommandInfo tPickingDecodeBeginInfo = {
3679
- .uWaitSemaphoreCount = 1 ,
3680
- .atWaitSempahores = {gptData -> aptSemaphores [uFrameIdx ]},
3681
- .auWaitSemaphoreValues = {gptData -> aulNextTimelineValue [uFrameIdx ]},
3682
- };
3683
- gptGfx -> begin_command_recording (ptPickingDecodeCmdBuffer , & tPickingDecodeBeginInfo );
3684
-
3685
- gptGfx -> end_command_recording (ptPickingDecodeCmdBuffer );
3686
-
3687
- const plSubmitInfo tPickingDecodeSubmitInfo = {
3688
- .uSignalSemaphoreCount = 1 ,
3689
- .atSignalSempahores = {gptData -> aptSemaphores [uFrameIdx ]},
3690
- .auSignalSemaphoreValues = {++ gptData -> aulNextTimelineValue [uFrameIdx ]}
3691
- };
3692
- gptGfx -> submit_command_buffer (ptPickingDecodeCmdBuffer , & tPickingDecodeSubmitInfo );
3693
- gptGfx -> return_command_buffer (ptPickingDecodeCmdBuffer );
3694
-
3695
3594
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~uv map pass for JFA~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3696
3595
3697
3596
const plBeginCommandInfo tUVBeginInfo = {
0 commit comments