MCPcopy Create free account
hub / github.com/carbonengine/trinity / RenderDynamicExposure

Method RenderDynamicExposure

trinity/PostProcess/Tr2PostProcessRenderer.cpp:1182–1241  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1180
1181
1182Tr2GpuResourcePool::Buffer Tr2PostProcessRenderer::RenderDynamicExposure( const Tr2TextureAL& source, Tr2GpuResourcePool& gpuResourcePool, Tr2RenderContext& renderContext, Tr2PPDynamicExposureEffect* dynamicExposure )
1183{
1184 GPU_REGION( renderContext, "Exposure" );
1185
1186 uint32_t tilesX = source.GetWidth() / HISTOGRAM_TILE_SIZE_X + 1;
1187 uint32_t tilesY = source.GetHeight() / HISTOGRAM_TILE_SIZE_Y + 1;
1188
1189 uint32_t localHistogramCount = tilesX * tilesY * 16;
1190
1191 auto localHistograms = gpuResourcePool.GetTempBuffer(
1192 "LocalHistograms",
1193 Tr2BufferDescriptionAL( Tr2RenderContextEnum::PIXEL_FORMAT_R32G32B32A32_UINT, localHistogramCount, Tr2GpuUsage::SHADER_RESOURCE | Tr2GpuUsage::UNORDERED_ACCESS, Tr2CpuUsage::NONE ) );
1194
1195
1196 auto histogram = gpuResourcePool.GetTempBuffer(
1197 "Histogram",
1198 Tr2BufferDescriptionAL( Tr2RenderContextEnum::PIXEL_FORMAT_R32_UINT, 65, Tr2GpuUsage::SHADER_RESOURCE | Tr2GpuUsage::UNORDERED_ACCESS, Tr2CpuUsage::NONE ) );
1199
1200
1201 // we also need to update the tonemapping buffer
1202 m_dynamicExposureCreateHistogramShader->SetParameter( MEMOIZED_STRING( "ScreenTilesX" ), float( tilesX ) );
1203 TEMP_PARAM( m_dynamicExposureCreateHistogramShader, "BlitOriginal", source );
1204 TEMP_PARAM( m_dynamicExposureCreateHistogramShader, "LocalHistograms", localHistograms );
1205 m_dynamicExposureMergeHistogramShader->SetParameter( MEMOIZED_STRING( "ScreenTilesX" ), float( tilesX ) );
1206 m_dynamicExposureMergeHistogramShader->SetParameter( MEMOIZED_STRING( "ScreenTilesY" ), float( tilesY ) );
1207 TEMP_PARAM( m_dynamicExposureMergeHistogramShader, "LocalHistograms", localHistograms );
1208 TEMP_PARAM( m_dynamicExposureMergeHistogramShader, "Histogram", histogram );
1209
1210 uint32_t m_uintValue[4] = { 0, 0, 0, 0 };
1211 // Clear local histograms
1212 renderContext.ClearUav( localHistograms, m_uintValue );
1213
1214 // Clear histograms
1215 renderContext.ClearUav( histogram, m_uintValue );
1216
1217 // Create histograms
1218 m_dynamicExposureCreateHistogramShader->SetParameter( MEMOIZED_STRING( "MinLuminance" ), log( dynamicExposure->m_minLuminance ) );
1219 m_dynamicExposureCreateHistogramShader->SetParameter( MEMOIZED_STRING( "MaxLuminance" ), log( dynamicExposure->m_maxLuminance ) );
1220 m_dynamicExposureCreateHistogramShader->SetParameter( MEMOIZED_STRING( "MinBrightness" ), dynamicExposure->m_minBrightness );
1221 m_dynamicExposureCreateHistogramShader->SetParameter( MEMOIZED_STRING( "MaxBrightness" ), dynamicExposure->m_maxBrightness );
1222 Tr2Renderer::RunComputeShader( m_dynamicExposureCreateHistogramShader, tilesX, tilesY, 1, renderContext );
1223
1224 // Merge histogram
1225 uint32_t mergeHistogramXDim = tilesX * tilesY / NUM_TILES_PER_THREAD_GROUP + 1;
1226 Tr2Renderer::RunComputeShader( m_dynamicExposureMergeHistogramShader, mergeHistogramXDim, 1, 1, renderContext );
1227
1228 // Measure histogram
1229 m_dynamicExposureMeasureExposureShader->SetParameter( MEMOIZED_STRING( "MinLuminance" ), log( dynamicExposure->m_minLuminance ) );
1230 m_dynamicExposureMeasureExposureShader->SetParameter( MEMOIZED_STRING( "MaxLuminance" ), log( dynamicExposure->m_maxLuminance ) );
1231 m_dynamicExposureMeasureExposureShader->SetParameter( MEMOIZED_STRING( "MinBrightness" ), dynamicExposure->m_minBrightness );
1232 m_dynamicExposureMeasureExposureShader->SetParameter( MEMOIZED_STRING( "MaxBrightness" ), dynamicExposure->m_maxBrightness );
1233 m_dynamicExposureMeasureExposureShader->SetParameter( MEMOIZED_STRING( "IncreaseSpeed" ), dynamicExposure->m_increaseSpeed );
1234 m_dynamicExposureMeasureExposureShader->SetParameter( MEMOIZED_STRING( "DecreaseSpeed" ), dynamicExposure->m_decreaseSpeed );
1235 m_dynamicExposureMeasureExposureShader->SetParameter( MEMOIZED_STRING( "MinExposure" ), dynamicExposure->m_minExposure );
1236 m_dynamicExposureMeasureExposureShader->SetParameter( MEMOIZED_STRING( "MaxExposure" ), dynamicExposure->m_maxExposure );
1237 TEMP_PARAM( m_dynamicExposureMeasureExposureShader, "Histogram", histogram );
1238 TEMP_PARAM( m_dynamicExposureMeasureExposureShader, "Exposure", GetExposureBuffer( gpuResourcePool ) );
1239 Tr2Renderer::RunComputeShader( m_dynamicExposureMeasureExposureShader, 1, 1, 1, renderContext );

Callers

nothing calls this directly

Calls 6

GetTempBufferMethod · 0.80
GetWidthMethod · 0.45
GetHeightMethod · 0.45
SetParameterMethod · 0.45
ClearUavMethod · 0.45

Tested by

no test coverage detected