diff options
Diffstat (limited to 'src/plugins/renderers/rhi/jobs/renderviewjobutils.cpp')
-rw-r--r-- | src/plugins/renderers/rhi/jobs/renderviewjobutils.cpp | 143 |
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 { |