diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2015-12-04 14:49:45 +0100 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2016-01-13 14:02:46 +0000 |
commit | 84ca67b504b6d8a4825988681dd4d49031805c96 (patch) | |
tree | b3cfb45cbf22dc86a85d388993c0071c42562b1c /src | |
parent | 8a8746f7011ce6a831df715120cbd54a3938e2a4 (diff) |
RenderView Compute handling
Change-Id: Ifbe93173010bf058f198990c62d5e93fea967a74
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/render/backend/renderview.cpp | 4 | ||||
-rw-r--r-- | src/render/backend/renderview_p.h | 37 | ||||
-rw-r--r-- | src/render/framegraph/dispatchcompute_p.h | 3 | ||||
-rw-r--r-- | src/render/jobs/renderviewjobutils.cpp | 10 |
4 files changed, 39 insertions, 15 deletions
diff --git a/src/render/backend/renderview.cpp b/src/render/backend/renderview.cpp index 7d9434a01..523cc9248 100644 --- a/src/render/backend/renderview.cpp +++ b/src/render/backend/renderview.cpp @@ -274,8 +274,12 @@ RenderView::RenderView() , m_clearBuffer(QClearBuffer::None) , m_stateSet(Q_NULLPTR) , m_noDraw(false) + , m_compute(false) , m_frustumCulling(false) { + m_workGroups[0] = 1; + m_workGroups[1] = 1; + m_workGroups[2] = 1; } RenderView::~RenderView() diff --git a/src/render/backend/renderview_p.h b/src/render/backend/renderview_p.h index 9819b0b5e..59da14b60 100644 --- a/src/render/backend/renderview_p.h +++ b/src/render/backend/renderview_p.h @@ -115,9 +115,9 @@ public: void sort(); void setRenderer(Renderer *renderer); - inline void setSurfaceSize(const QSize &size) { m_surfaceSize = size; } - inline Renderer *renderer() const { return m_renderer; } - inline NodeManagers *nodeManagers() const { return m_manager; } + inline void setSurfaceSize(const QSize &size) Q_DECL_NOEXCEPT { m_surfaceSize = size; } + inline Renderer *renderer() const Q_DECL_NOEXCEPT { return m_renderer; } + inline NodeManagers *nodeManagers() const Q_DECL_NOEXCEPT { return m_manager; } inline void setAllocator(Qt3DCore::QFrameAllocator *allocator) { @@ -155,14 +155,19 @@ public: inline void setTechniqueFilter(const TechniqueFilter *filter) { m_data->m_techniqueFilter = filter; } inline const TechniqueFilter *techniqueFilter() const { return m_data->m_techniqueFilter; } - inline RenderStateSet *stateSet() const { return m_stateSet; } - void setStateSet(RenderStateSet *stateSet) { m_stateSet = stateSet; } + inline RenderStateSet *stateSet() const Q_DECL_NOEXCEPT { return m_stateSet; } + void setStateSet(RenderStateSet *stateSet) Q_DECL_NOEXCEPT { m_stateSet = stateSet; } - inline bool noDraw() const { return m_noDraw; } - void setNoDraw(bool noDraw) { m_noDraw = noDraw; } + inline bool noDraw() const Q_DECL_NOEXCEPT { return m_noDraw; } + void setNoDraw(bool noDraw) Q_DECL_NOEXCEPT { m_noDraw = noDraw; } - inline bool frustumCulling() const { return m_frustumCulling; } - void setFrustumCulling(bool frustumCulling) { m_frustumCulling = frustumCulling; } + inline bool isCompute() const Q_DECL_NOEXCEPT { return m_compute; } + void setCompute(bool compute) Q_DECL_NOEXCEPT { m_compute = compute; } + + void setComputeWorkgroups(int x, int y, int z) Q_DECL_NOEXCEPT { m_workGroups[0] = x; m_workGroups[1] = y; m_workGroups[2] = z; } + + inline bool frustumCulling() const Q_DECL_NOEXCEPT { return m_frustumCulling; } + void setFrustumCulling(bool frustumCulling) Q_DECL_NOEXCEPT { m_frustumCulling = frustumCulling; } // TODO: Get rid of this overly complex memory management by splitting out the // InnerData as a RenderViewConfig struct. This can be created by setRenderViewConfigFromFrameGraphLeafNode @@ -205,8 +210,8 @@ public: return *m_clearColor; } - inline void setClearBuffer(QClearBuffer::BufferType clearBuffer) { m_clearBuffer = clearBuffer; } - inline QClearBuffer::BufferType clearBuffer() const { return m_clearBuffer; } + inline void setClearBuffer(QClearBuffer::BufferType clearBuffer) Q_DECL_NOEXCEPT { m_clearBuffer = clearBuffer; } + inline QClearBuffer::BufferType clearBuffer() const Q_DECL_NOEXCEPT { return m_clearBuffer; } void buildRenderCommands(Entity *preprocessedTreeRoot, const Plane *planes); QVector<RenderCommand *> commands() const { return m_commands; } @@ -216,8 +221,8 @@ public: void setDrawBuffers(const QList<QRenderAttachment::RenderAttachmentType> &drawBuffers) { m_attachmentPack.setDrawBuffers(drawBuffers); } const AttachmentPack &attachmentPack() const; - void setRenderTargetHandle(HTarget renderTargetHandle) { m_renderTarget = renderTargetHandle; } - HTarget renderTargetHandle() const { return m_renderTarget; } + void setRenderTargetHandle(HTarget renderTargetHandle) Q_DECL_NOEXCEPT { m_renderTarget = renderTargetHandle; } + HTarget renderTargetHandle() const Q_DECL_NOEXCEPT { return m_renderTarget; } void addSortCriteria(const QList<Qt3DCore::QNodeId> &sortMethodUid) { m_data->m_sortingCriteria.append(sortMethodUid); } @@ -268,8 +273,10 @@ private: AttachmentPack m_attachmentPack; QClearBuffer::BufferType m_clearBuffer; RenderStateSet *m_stateSet; - bool m_noDraw; - bool m_frustumCulling; + bool m_noDraw:1; + bool m_compute:1; + bool m_frustumCulling:1; + int m_workGroups[3]; // We do not use pointers to RenderNodes or Drawable's here so that the // render aspect is free to change the drawables on the next frame whilst diff --git a/src/render/framegraph/dispatchcompute_p.h b/src/render/framegraph/dispatchcompute_p.h index 7a90f980a..3e11e4e31 100644 --- a/src/render/framegraph/dispatchcompute_p.h +++ b/src/render/framegraph/dispatchcompute_p.h @@ -67,6 +67,9 @@ public: void updateFromPeer(Qt3DCore::QNode *peer) Q_DECL_OVERRIDE; void sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) Q_DECL_OVERRIDE; + inline int x() const Q_DECL_NOEXCEPT { return m_workGroups[0]; } + inline int y() const Q_DECL_NOEXCEPT { return m_workGroups[1]; } + inline int z() const Q_DECL_NOEXCEPT { return m_workGroups[2]; } private: int m_workGroups[3]; diff --git a/src/render/jobs/renderviewjobutils.cpp b/src/render/jobs/renderviewjobutils.cpp index 65728e649..e1c2c7469 100644 --- a/src/render/jobs/renderviewjobutils.cpp +++ b/src/render/jobs/renderviewjobutils.cpp @@ -57,6 +57,7 @@ #include <Qt3DRender/private/managers_p.h> #include <Qt3DRender/private/shaderdata_p.h> #include <Qt3DRender/private/statesetnode_p.h> +#include <Qt3DRender/private/dispatchcompute_p.h> QT_BEGIN_NAMESPACE @@ -207,6 +208,15 @@ void setRenderViewConfigFromFrameGraphLeafNode(RenderView *rv, const FrameGraphN break; } + case FrameGraphNode::ComputeDispatch: { + const Render::DispatchCompute *dispatchCompute = static_cast<const Render::DispatchCompute *>(node); + rv->setCompute(true); + rv->setComputeWorkgroups(dispatchCompute->x(), + dispatchCompute->y(), + dispatchCompute->z()); + break; + } + case FrameGraphNode::Lighting: { // TODO break; |