summaryrefslogtreecommitdiffstats
path: root/src/plugins/renderers/rhi/jobs/renderviewjobutils.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/renderers/rhi/jobs/renderviewjobutils.cpp')
-rw-r--r--src/plugins/renderers/rhi/jobs/renderviewjobutils.cpp143
1 files changed, 75 insertions, 68 deletions
diff --git a/src/plugins/renderers/rhi/jobs/renderviewjobutils.cpp b/src/plugins/renderers/rhi/jobs/renderviewjobutils.cpp
index 8918225cd..c9a37c5e1 100644
--- a/src/plugins/renderers/rhi/jobs/renderviewjobutils.cpp
+++ b/src/plugins/renderers/rhi/jobs/renderviewjobutils.cpp
@@ -104,8 +104,10 @@ void setRenderViewConfigFromFrameGraphLeafNode(RenderView *rv, const FrameGraphN
case FrameGraphNode::CameraSelector:
// Can be set only once and we take camera nearest to the leaf node
if (!rv->renderCameraLens()) {
- const CameraSelector *cameraSelector = static_cast<const CameraSelector *>(node);
- Entity *camNode = manager->renderNodesManager()->lookupResource(cameraSelector->cameraUuid());
+ const CameraSelector *cameraSelector =
+ static_cast<const CameraSelector *>(node);
+ Entity *camNode = manager->renderNodesManager()->lookupResource(
+ cameraSelector->cameraUuid());
if (camNode) {
CameraLens *lens = camNode->renderComponent<CameraLens>();
rv->setRenderCameraEntity(camNode);
@@ -137,17 +139,22 @@ void setRenderViewConfigFromFrameGraphLeafNode(RenderView *rv, const FrameGraphN
case FrameGraphNode::RenderTarget: {
// Can be set once and we take render target nearest to the leaf node
- const RenderTargetSelector *targetSelector = static_cast<const RenderTargetSelector *>(node);
+ const RenderTargetSelector *targetSelector =
+ static_cast<const RenderTargetSelector *>(node);
QNodeId renderTargetUid = targetSelector->renderTargetUuid();
- HTarget renderTargetHandle = manager->renderTargetManager()->lookupHandle(renderTargetUid);
+ HTarget renderTargetHandle =
+ manager->renderTargetManager()->lookupHandle(renderTargetUid);
// Add renderTarget Handle and build renderCommand AttachmentPack
if (!rv->renderTargetId()) {
rv->setRenderTargetId(renderTargetUid);
- RenderTarget *renderTarget = manager->renderTargetManager()->data(renderTargetHandle);
+ RenderTarget *renderTarget =
+ manager->renderTargetManager()->data(renderTargetHandle);
if (renderTarget)
- rv->setAttachmentPack(AttachmentPack(renderTarget, manager->attachmentManager(), targetSelector->outputs()));
+ rv->setAttachmentPack(AttachmentPack(renderTarget,
+ manager->attachmentManager(),
+ targetSelector->outputs()));
}
break;
}
@@ -176,7 +183,8 @@ void setRenderViewConfigFromFrameGraphLeafNode(RenderView *rv, const FrameGraphN
}
case FrameGraphNode::SortMethod: {
- const Render::SortPolicy *sortPolicy = static_cast<const Render::SortPolicy *>(node);
+ const Render::SortPolicy *sortPolicy =
+ static_cast<const Render::SortPolicy *>(node);
rv->addSortType(sortPolicy->sortTypes());
break;
}
@@ -187,7 +195,8 @@ void setRenderViewConfigFromFrameGraphLeafNode(RenderView *rv, const FrameGraphN
break;
case FrameGraphNode::StateSet: {
- const Render::StateSetNode *rStateSet = static_cast<const Render::StateSetNode *>(node);
+ const Render::StateSetNode *rStateSet =
+ static_cast<const Render::StateSetNode *>(node);
// Create global RenderStateSet for renderView if no stateSet was set before
RenderStateSet *stateSet = rv->stateSet();
if (stateSet == nullptr && rStateSet->hasRenderStates()) {
@@ -198,7 +207,8 @@ void setRenderViewConfigFromFrameGraphLeafNode(RenderView *rv, const FrameGraphN
// Add states from new stateSet we might be missing
// but don' t override existing states (lower StateSetNode always has priority)
if (rStateSet->hasRenderStates())
- addStatesToRenderStateSet(stateSet, rStateSet->renderStates(), manager->renderStateManager());
+ addStatesToRenderStateSet(stateSet, rStateSet->renderStates(),
+ manager->renderStateManager());
break;
}
@@ -213,10 +223,10 @@ void setRenderViewConfigFromFrameGraphLeafNode(RenderView *rv, const FrameGraphN
}
case FrameGraphNode::ComputeDispatch: {
- const Render::DispatchCompute *dispatchCompute = static_cast<const Render::DispatchCompute *>(node);
+ const Render::DispatchCompute *dispatchCompute =
+ static_cast<const Render::DispatchCompute *>(node);
rv->setCompute(true);
- rv->setComputeWorkgroups(dispatchCompute->x(),
- dispatchCompute->y(),
+ rv->setComputeWorkgroups(dispatchCompute->x(), dispatchCompute->y(),
dispatchCompute->z());
break;
}
@@ -229,17 +239,18 @@ void setRenderViewConfigFromFrameGraphLeafNode(RenderView *rv, const FrameGraphN
case FrameGraphNode::Surface: {
// Use the surface closest to leaf node
if (rv->surface() == nullptr) {
- const Render::RenderSurfaceSelector *surfaceSelector
- = static_cast<const Render::RenderSurfaceSelector *>(node);
+ const Render::RenderSurfaceSelector *surfaceSelector =
+ static_cast<const Render::RenderSurfaceSelector *>(node);
rv->setSurface(surfaceSelector->surface());
- rv->setSurfaceSize(surfaceSelector->renderTargetSize() * surfaceSelector->devicePixelRatio());
+ rv->setSurfaceSize(surfaceSelector->renderTargetSize()
+ * surfaceSelector->devicePixelRatio());
rv->setDevicePixelRatio(surfaceSelector->devicePixelRatio());
}
break;
}
case FrameGraphNode::RenderCapture: {
auto *renderCapture = const_cast<Render::RenderCapture *>(
- static_cast<const Render::RenderCapture *>(node));
+ static_cast<const Render::RenderCapture *>(node));
if (rv->renderCaptureNodeId().isNull() && renderCapture->wasCaptureRequested()) {
rv->setRenderCaptureNodeId(renderCapture->peerId());
rv->setRenderCaptureRequest(renderCapture->takeCaptureRequest());
@@ -254,9 +265,9 @@ void setRenderViewConfigFromFrameGraphLeafNode(RenderView *rv, const FrameGraphN
case FrameGraphNode::BufferCapture: {
auto *bufferCapture = const_cast<Render::BufferCapture *>(
- static_cast<const Render::BufferCapture *>(node));
+ static_cast<const Render::BufferCapture *>(node));
if (bufferCapture != nullptr)
- rv->setIsDownloadBuffersEnable(bufferCapture->isEnabled());
+ rv->setIsDownloadBuffersEnable(bufferCapture->isEnabled());
break;
}
@@ -266,11 +277,13 @@ void setRenderViewConfigFromFrameGraphLeafNode(RenderView *rv, const FrameGraphN
rv->setHasBlitFramebufferInfo(true);
BlitFramebufferInfo bfbInfo;
bfbInfo.sourceRenderTargetId = blitFramebufferNode->sourceRenderTargetId();
- bfbInfo.destinationRenderTargetId = blitFramebufferNode->destinationRenderTargetId();
+ bfbInfo.destinationRenderTargetId =
+ blitFramebufferNode->destinationRenderTargetId();
bfbInfo.sourceRect = blitFramebufferNode->sourceRect();
bfbInfo.destinationRect = blitFramebufferNode->destinationRect();
bfbInfo.sourceAttachmentPoint = blitFramebufferNode->sourceAttachmentPoint();
- bfbInfo.destinationAttachmentPoint = blitFramebufferNode->destinationAttachmentPoint();
+ bfbInfo.destinationAttachmentPoint =
+ blitFramebufferNode->destinationAttachmentPoint();
bfbInfo.interpolationMethod = blitFramebufferNode->interpolationMethod();
rv->setBlitFrameBufferInfo(bfbInfo);
break;
@@ -303,15 +316,15 @@ void setRenderViewConfigFromFrameGraphLeafNode(RenderView *rv, const FrameGraphN
\internal
Searches the best matching Technique from \a effect specified.
*/
-Technique *findTechniqueForEffect(NodeManagers *manager,
- const TechniqueFilter *techniqueFilter,
+Technique *findTechniqueForEffect(NodeManagers *manager, const TechniqueFilter *techniqueFilter,
Effect *effect)
{
if (!effect)
return nullptr;
- QVector<Technique*> matchingTechniques;
- const bool hasInvalidTechniqueFilter = (techniqueFilter == nullptr || techniqueFilter->filters().isEmpty());
+ QVector<Technique *> matchingTechniques;
+ const bool hasInvalidTechniqueFilter =
+ (techniqueFilter == nullptr || techniqueFilter->filters().isEmpty());
// Iterate through the techniques in the effect
const auto techniqueIds = effect->techniques();
@@ -323,7 +336,9 @@ Technique *findTechniqueForEffect(NodeManagers *manager,
// Check if the technique is compatible with the rendering API
// If no techniqueFilter is present, we return the technique as it satisfies OpenGL version
- if (technique->isCompatibleWithRenderer() && (hasInvalidTechniqueFilter || technique->isCompatibleWithFilters(techniqueFilter->filters())))
+ if (technique->isCompatibleWithRenderer()
+ && (hasInvalidTechniqueFilter
+ || technique->isCompatibleWithFilters(techniqueFilter->filters())))
matchingTechniques.append(technique);
}
@@ -334,7 +349,7 @@ Technique *findTechniqueForEffect(NodeManagers *manager,
return matchingTechniques.first();
// Several compatible techniques, return technique with highest major and minor version
- Technique* highest = matchingTechniques.first();
+ Technique *highest = matchingTechniques.first();
GraphicsApiFilterData filter = *highest->graphicsApiFilter();
for (auto it = matchingTechniques.cbegin() + 1; it < matchingTechniques.cend(); ++it) {
if (filter < *(*it)->graphicsApiFilter()) {
@@ -345,7 +360,6 @@ Technique *findTechniqueForEffect(NodeManagers *manager,
return highest;
}
-
RenderPassList findRenderPassesForTechnique(NodeManagers *manager,
const RenderPassFilter *passFilter,
Technique *technique)
@@ -364,15 +378,18 @@ RenderPassList findRenderPassesForTechnique(NodeManagers *manager,
// A pass filter is present so we need to check for matching criteria
if (!foundMatch && renderPass->filterKeys().size() >= passFilter->filters().size()) {
- // Iterate through the filter criteria and look for render passes with criteria that satisfy them
+ // Iterate through the filter criteria and look for render passes with criteria that
+ // satisfy them
const auto filterKeyIds = passFilter->filters();
for (const QNodeId filterKeyId : filterKeyIds) {
foundMatch = false;
- FilterKey *filterFilterKey = manager->filterKeyManager()->lookupResource(filterKeyId);
+ FilterKey *filterFilterKey =
+ manager->filterKeyManager()->lookupResource(filterKeyId);
const auto passFilterKeyIds = renderPass->filterKeys();
for (const QNodeId passFilterKeyId : passFilterKeyIds) {
- FilterKey *passFilterKey = manager->filterKeyManager()->lookupResource(passFilterKeyId);
+ FilterKey *passFilterKey =
+ manager->filterKeyManager()->lookupResource(passFilterKeyId);
if ((foundMatch = (*passFilterKey == *filterFilterKey)))
break;
}
@@ -394,7 +411,6 @@ RenderPassList findRenderPassesForTechnique(NodeManagers *manager,
return passes;
}
-
ParameterInfoList::const_iterator findParamInfo(ParameterInfoList *params, const int nameId)
{
const ParameterInfoList::const_iterator end = params->cend();
@@ -410,17 +426,15 @@ void addParametersForIds(ParameterInfoList *params, ParameterManager *manager,
for (const QNodeId paramId : parameterIds) {
const HParameter parameterHandle = manager->lookupHandle(paramId);
const Parameter *param = manager->data(parameterHandle);
- ParameterInfoList::iterator it = std::lower_bound(params->begin(), params->end(), param->nameId());
+ ParameterInfoList::iterator it =
+ std::lower_bound(params->begin(), params->end(), param->nameId());
if (it == params->end() || it->nameId != param->nameId())
params->insert(it, ParameterInfo(param->nameId(), parameterHandle));
}
}
-void parametersFromMaterialEffectTechnique(ParameterInfoList *infoList,
- ParameterManager *manager,
- Material *material,
- Effect *effect,
- Technique *technique)
+void parametersFromMaterialEffectTechnique(ParameterInfoList *infoList, ParameterManager *manager,
+ Material *material, Effect *effect, Technique *technique)
{
// The parameters are taken in the following priority order:
//
@@ -436,8 +450,7 @@ void parametersFromMaterialEffectTechnique(ParameterInfoList *infoList,
}
// Only add states with types we don't already have
-void addStatesToRenderStateSet(RenderStateSet *stateSet,
- const QVector<Qt3DCore::QNodeId>& stateIds,
+void addStatesToRenderStateSet(RenderStateSet *stateSet, const QVector<Qt3DCore::QNodeId> &stateIds,
RenderStateManager *manager)
{
for (const Qt3DCore::QNodeId &stateId : stateIds) {
@@ -456,36 +469,32 @@ const int qNodeIdTypeId = qMetaTypeId<QNodeId>();
}
UniformBlockValueBuilder::UniformBlockValueBuilder()
- : updatedPropertiesOnly(false)
- , shaderDataManager(nullptr)
- , textureManager(nullptr)
+ : updatedPropertiesOnly(false), shaderDataManager(nullptr), textureManager(nullptr)
{
}
-UniformBlockValueBuilder::~UniformBlockValueBuilder()
-{
-}
+UniformBlockValueBuilder::~UniformBlockValueBuilder() { }
void UniformBlockValueBuilder::buildActiveUniformNameValueMapHelper(
- const ShaderData *currentShaderData,
- const QString &blockName,
- const QString &qmlPropertyName,
- const QVariant &value)
+ const ShaderData *currentShaderData, const QString &blockName,
+ const QString &qmlPropertyName, const QVariant &value)
{
// In the end, values are either scalar or a scalar array
// Composed elements (structs, structs array) are simplified into simple scalars
if (value.userType() == QMetaType::QVariantList) { // Array
QVariantList list = value.value<QVariantList>();
- if (list.at(0).userType() == qNodeIdTypeId) { // Array of struct qmlPropertyName[i].structMember
+ if (list.at(0).userType()
+ == qNodeIdTypeId) { // Array of struct qmlPropertyName[i].structMember
for (int i = 0; i < list.size(); ++i) {
- const QVariant& variantElement = list.at(i);
+ const QVariant &variantElement = list.at(i);
if (list.at(i).userType() == qNodeIdTypeId) {
const auto nodeId = variantElement.value<QNodeId>();
ShaderData *subShaderData = shaderDataManager->lookupResource(nodeId);
if (subShaderData) {
- buildActiveUniformNameValueMapStructHelper(subShaderData,
- blockName + QLatin1Char('.') + qmlPropertyName + blockArray.arg(i),
- QLatin1String(""));
+ buildActiveUniformNameValueMapStructHelper(
+ subShaderData,
+ blockName + QLatin1Char('.') + qmlPropertyName + blockArray.arg(i),
+ QLatin1String(""));
}
// Note: we only handle ShaderData as nested container nodes here
}
@@ -506,11 +515,10 @@ void UniformBlockValueBuilder::buildActiveUniformNameValueMapHelper(
const auto nodeId = value.value<QNodeId>();
ShaderData *rSubShaderData = shaderDataManager->lookupResource(nodeId);
if (rSubShaderData) {
- buildActiveUniformNameValueMapStructHelper(rSubShaderData,
- blockName,
- qmlPropertyName);
+ buildActiveUniformNameValueMapStructHelper(rSubShaderData, blockName, qmlPropertyName);
} else if (textureManager->contains(nodeId)) {
- const auto varId = StringToInt::lookupId(blockName + QLatin1Char('.') + qmlPropertyName);
+ const auto varId =
+ StringToInt::lookupId(blockName + QLatin1Char('.') + qmlPropertyName);
activeUniformNamesToValue.insert(varId, value);
}
} else { // Scalar / Vec
@@ -525,16 +533,15 @@ void UniformBlockValueBuilder::buildActiveUniformNameValueMapHelper(
// If the property needs to be transformed, we transform it here as
// the shaderdata cannot hold transformed properties for multiple
// thread contexts at once
- activeUniformNamesToValue.insert(StringToInt::lookupId(varName),
- currentShaderData->getTransformedProperty(qmlPropertyName, viewMatrix));
+ activeUniformNamesToValue.insert(
+ StringToInt::lookupId(varName),
+ currentShaderData->getTransformedProperty(qmlPropertyName, viewMatrix));
}
}
}
void UniformBlockValueBuilder::buildActiveUniformNameValueMapStructHelper(
- const ShaderData *rShaderData,
- const QString &blockName,
- const QString &qmlPropertyName)
+ const ShaderData *rShaderData, const QString &blockName, const QString &qmlPropertyName)
{
const QHash<QString, ShaderData::PropertyValue> &properties = rShaderData->properties();
auto it = properties.begin();
@@ -548,16 +555,16 @@ void UniformBlockValueBuilder::buildActiveUniformNameValueMapStructHelper(
fullBlockName.append(QLatin1String("."));
fullBlockName.append(qmlPropertyName);
}
- buildActiveUniformNameValueMapHelper(rShaderData, fullBlockName,
- it.key(), it.value().value);
+ buildActiveUniformNameValueMapHelper(rShaderData, fullBlockName, it.key(),
+ it.value().value);
++it;
}
}
ParameterInfo::ParameterInfo(const int nameId, const HParameter &handle)
- : nameId(nameId)
- , handle(handle)
-{}
+ : nameId(nameId), handle(handle)
+{
+}
bool ParameterInfo::operator<(const ParameterInfo &other) const Q_DECL_NOEXCEPT
{