/*
- * Copyright (c) 2023 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2024 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
mDefaultHalfFrameNanoseconds(0u),
mUpdateRequestCount(0u),
mRunning(FALSE),
+ mVsyncRender(TRUE),
mThreadId(0),
mThreadMode(threadMode),
mUpdateRenderRunCount(0),
currentSurface->SetThreadSynchronization(*this);
}
+ mVsyncRender = environmentOptions.VsyncRenderRequired();
+
mSleepTrigger = TriggerEventFactory::CreateTriggerEvent(MakeCallback(this, &CombinedUpdateRenderController::ProcessSleepRequest), TriggerEventInterface::KEEP_ALIVE_AFTER_TRIGGER);
}
auto numberOfPrecompiledShader = precompiledShader->shaderCount;
for(int i = 0; i < numberOfPrecompiledShader; ++i)
{
- auto vertexShader = graphics.GetController().GetGlAbstraction().GetVertexShaderPrefix() + std::string(precompiledShader->vertexPrefix[i].data()) + std::string(precompiledShader->vertexShader.data());
- auto fragmentShader = graphics.GetController().GetGlAbstraction().GetFragmentShaderPrefix() + std::string(precompiledShader->fragmentPrefix[i].data()) + std::string(precompiledShader->fragmentShader.data());
- PreCompileShader(std::move(vertexShader), std::move(fragmentShader));
+ auto vertexShader = graphics.GetController().GetGraphicsConfig().GetVertexShaderPrefix() + std::string(precompiledShader->vertexPrefix[i].data()) + std::string(precompiledShader->vertexShader.data());
+ auto fragmentShader = graphics.GetController().GetGraphicsConfig().GetFragmentShaderPrefix() + std::string(precompiledShader->fragmentPrefix[i].data()) + std::string(precompiledShader->fragmentShader.data());
+ PreCompileShader(std::move(vertexShader), std::move(fragmentShader), static_cast<uint32_t>(i) < precompiledShader->shaderName.size() ? std::string(precompiledShader->shaderName[i]) : "");
}
DALI_LOG_RELEASE_INFO("ShaderPreCompiler[ENABLE], shader count :%d \n", numberOfPrecompiledShader);
}
while(UpdateRenderReady(useElapsedTime, updateRequired, timeToSleepUntil))
{
LOG_UPDATE_RENDER_TRACE;
- TRACE_UPDATE_RENDER_SCOPE("DALI_UPDATE_RENDER");
+ TRACE_UPDATE_RENDER_BEGIN("DALI_UPDATE_RENDER");
// For thread safe
bool uploadOnly = mUploadWithoutRendering;
mNotificationTrigger.Trigger();
LOG_UPDATE_RENDER("Notification Triggered");
}
-
- if(uploadOnly && (keepUpdatingStatus & Dali::Integration::KeepUpdating::STAGE_KEEP_RENDERING))
- {
- // Render forcely if there exist some keep rendering required.
- uploadOnly = false;
- }
// Optional logging of update/render status
mUpdateStatusLogger.Log(keepUpdatingStatus);
}
}
}
- else
- {
- DALI_LOG_RELEASE_INFO("DALI Rendering skip (upload only)\n");
- }
TRACE_UPDATE_RENDER_BEGIN("DALI_POST_RENDER");
if(!uploadOnly)
}
}
+ TRACE_UPDATE_RENDER_END("DALI_UPDATE_RENDER");
+
// Render to FBO is intended to measure fps above 60 so sleep is not wanted.
- if(0u == renderToFboInterval)
+ if(mVsyncRender && 0u == renderToFboInterval)
{
TRACE_UPDATE_RENDER_SCOPE("DALI_UPDATE_RENDER_SLEEP");
// Sleep until at least the the default frame duration has elapsed. This will return immediately if the specified end-time has already passed.
}
}
-void CombinedUpdateRenderController::PreCompileShader(std::string vertexShader, std::string fragmentShader)
+void CombinedUpdateRenderController::PreCompileShader(std::string vertexShader, std::string fragmentShader, std::string shaderName)
{
GraphicsInterface& graphics = mAdaptorInterfaces.GetGraphicsInterface();
auto createInfo = Graphics::ProgramCreateInfo();
createInfo.SetShaderState(shaderStates);
+ createInfo.SetName(shaderName);
auto graphicsProgram = graphics.GetController().CreateProgram(createInfo, nullptr);
ShaderPreCompiler::Get().AddPreCompiledProgram(std::move(graphicsProgram));