diff --git a/libraries/render-utils/src/RenderDeferredTask.cpp b/libraries/render-utils/src/RenderDeferredTask.cpp index bb5ad82a03..731ab38467 100644 --- a/libraries/render-utils/src/RenderDeferredTask.cpp +++ b/libraries/render-utils/src/RenderDeferredTask.cpp @@ -71,6 +71,33 @@ namespace gr { using graphics::slot::buffer::Buffer; } + +/* +class RenderDeferredTaskDebugConfig : public render::Task::Config { + +public: + + signals : + void dirty(); +};*/ + +class RenderDeferredTaskDebug { +public: + using Input = render::VaryingSet8; + // using Config = RenderDeferredTaskConfig; + using JobModel = render::Task::ModelI; + + RenderDeferredTaskDebug(); + + // void configure(const Config& config); + void build(JobModel& task, const render::Varying& inputs, render::Varying& outputs); + +private: +}; + + RenderDeferredTask::RenderDeferredTask() { } @@ -99,7 +126,10 @@ const render::Varying RenderDeferredTask::addSelectItemJobs(JobModel& task, cons void RenderDeferredTask::build(JobModel& task, const render::Varying& input, render::Varying& output, bool renderShadows) { const auto& inputs = input.get(); - const auto& items = inputs.get0(); + const auto& fetchedItems = inputs.get0(); + // const auto& fetchedItems = inputs[0]; + // const auto& items = fetchedItems[0]; + const auto& items = fetchedItems.get0(); auto fadeEffect = DependencyManager::get(); @@ -108,14 +138,22 @@ void RenderDeferredTask::build(JobModel& task, const render::Varying& input, ren initDeferredPipelines(*shapePlumber, fadeEffect->getBatchSetter(), fadeEffect->getItemUniformSetter()); // Extract opaques / transparents / lights / metas / overlays / background - const auto& opaques = items.get0()[RenderFetchCullSortTask::OPAQUE_SHAPE]; + /* const auto& opaques = items.get0()[RenderFetchCullSortTask::OPAQUE_SHAPE]; const auto& transparents = items.get0()[RenderFetchCullSortTask::TRANSPARENT_SHAPE]; const auto& lights = items.get0()[RenderFetchCullSortTask::LIGHT]; const auto& metas = items.get0()[RenderFetchCullSortTask::META]; const auto& overlayOpaques = items.get0()[RenderFetchCullSortTask::OVERLAY_OPAQUE_SHAPE]; const auto& overlayTransparents = items.get0()[RenderFetchCullSortTask::OVERLAY_TRANSPARENT_SHAPE]; - //const auto& background = items.get0()[RenderFetchCullSortTask::BACKGROUND]; - const auto& spatialSelection = items[1]; +*/ + const auto& opaques = items[RenderFetchCullSortTask::OPAQUE_SHAPE]; + const auto& transparents = items[RenderFetchCullSortTask::TRANSPARENT_SHAPE]; + const auto& lights = items[RenderFetchCullSortTask::LIGHT]; + const auto& metas = items[RenderFetchCullSortTask::META]; + const auto& overlayOpaques = items[RenderFetchCullSortTask::OVERLAY_OPAQUE_SHAPE]; + const auto& overlayTransparents = items[RenderFetchCullSortTask::OVERLAY_TRANSPARENT_SHAPE]; + +//const auto& background = items.get0()[RenderFetchCullSortTask::BACKGROUND]; + const auto& spatialSelection = fetchedItems[1]; fadeEffect->build(task, opaques); @@ -180,11 +218,11 @@ void RenderDeferredTask::build(JobModel& task, const render::Varying& input, ren task.addJob("DrawLight", lights); // Fetch the current frame stacks from all the stages - const auto currentFrames = task.addJob("FetchCurrentFrames"); - const auto lightFrame = currentFrames.getN(0); - const auto backgroundFrame = currentFrames.getN(1); - const auto hazeFrame = currentFrames.getN(2); - const auto bloomFrame = currentFrames.getN(3); + const auto currentStageFrames = task.addJob("FetchCurrentFrames"); + const auto lightFrame = currentStageFrames.getN(0); + const auto backgroundFrame = currentStageFrames.getN(1); + const auto hazeFrame = currentStageFrames.getN(2); + const auto bloomFrame = currentStageFrames.getN(3); // Light Clustering // Create the cluster grid of lights, cpu job for now @@ -218,7 +256,7 @@ void RenderDeferredTask::build(JobModel& task, const render::Varying& input, ren const auto selectionBaseName = "contextOverlayHighlightList"; const auto selectedItems = addSelectItemJobs(task, selectionBaseName, metas, opaques, transparents); - const auto outlineInputs = DrawHighlightTask::Inputs(items.get0(), deferredFramebuffer, lightingFramebuffer, deferredFrameTransform, jitter).asVarying(); + const auto outlineInputs = DrawHighlightTask::Inputs(items, deferredFramebuffer, lightingFramebuffer, deferredFrameTransform, jitter).asVarying(); task.addJob("DrawHighlight", outlineInputs); task.addJob("HighlightRangeTimer", outlineRangeTimer); @@ -256,9 +294,9 @@ void RenderDeferredTask::build(JobModel& task, const render::Varying& input, ren task.addJob("ToneMapping", toneMappingInputs); { // Debug the bounds of the rendered items, still look at the zbuffer - const auto debugInputs = RenderDeferredTaskDebug::Inputs(items.get0(), items.get1(), zones, selectedItems, lightFrame, deferredFramebuffer, lightingFramebuffer, deferredFrameTransform, jitter).asVarying(); - task.addJob("DebugRenderDeferred", input); - task.addJob("DrawMetaBounds", metas); + const auto debugInputs = RenderDeferredTaskDebug::Input(items, inputs[1], zones, selectedItems, currentStageFrames, prepareDeferredOutputs, deferredFrameTransform, jitter).asVarying(); + task.addJob("DebugRenderDeferredTask", input); + /*task.addJob("DrawMetaBounds", metas); task.addJob("DrawOpaqueBounds", opaques); task.addJob("DrawTransparentBounds", transparents); @@ -282,7 +320,7 @@ void RenderDeferredTask::build(JobModel& task, const render::Varying& input, ren } // Render.getConfig("RenderMainView.DrawSelectionBounds").enabled = true - task.addJob("DrawSelectionBounds", selectedItems); + task.addJob("DrawSelectionBounds", selectedItems);*/ } { // Debug the bounds of the rendered Overlay items that are marked drawInFront, still look at the zbuffer @@ -302,7 +340,7 @@ void RenderDeferredTask::build(JobModel& task, const render::Varying& input, ren const auto debugAmbientOcclusionInputs = DebugAmbientOcclusion::Inputs(deferredFrameTransform, deferredFramebuffer, linearDepthTarget, ambientOcclusionUniforms).asVarying(); task.addJob("DebugAmbientOcclusion", debugAmbientOcclusionInputs); - +/* // Scene Octree Debugging job { task.addJob("DrawSceneOctree", spatialSelection); @@ -319,7 +357,7 @@ void RenderDeferredTask::build(JobModel& task, const render::Varying& input, ren } const auto debugZoneInputs = DebugZoneLighting::Inputs(deferredFrameTransform, lightFrame, backgroundFrame).asVarying(); - task.addJob("DrawZoneStack", debugZoneInputs); + task.addJob("DrawZoneStack", debugZoneInputs);*/ } // Upscale to finale resolution @@ -351,22 +389,56 @@ void RenderDeferredTask::build(JobModel& task, const render::Varying& input, ren RenderDeferredTaskDebug::RenderDeferredTaskDebug() { } - +/* void RenderDeferredTaskDebug::configure(const Config& config) { -} +}*/ + +void RenderDeferredTaskDebug::build(JobModel& task, const render::Varying& input, render::Varying& outputs) { +// RenderFetchCullSortTask::Output, RenderShadowTask::Output, +// ZoneRendererTask::Outputs, SelectItems::Outputs, FetchCurrentFrames::Outputs, +// PrepareDeferred::Outputs, GenerateDeferredFrameTransform::Output, JitterSample::Output -void RenderDeferredTaskDebug::build(JobModel& task, const render::Varying& inputs, render::Varying& outputs) { const auto& inputs = input.get(); - const auto& items = inputs.get0(); - // Extract opaques / transparents / lights / metas / overlays / background - const auto& opaques = items.get0()[RenderFetchCullSortTask::OPAQUE_SHAPE]; - const auto& transparents = items.get0()[RenderFetchCullSortTask::TRANSPARENT_SHAPE]; - const auto& lights = items.get0()[RenderFetchCullSortTask::LIGHT]; - const auto& metas = items.get0()[RenderFetchCullSortTask::META]; - const auto& overlayOpaques = items.get0()[RenderFetchCullSortTask::OVERLAY_OPAQUE_SHAPE]; - const auto& overlayTransparents = items.get0()[RenderFetchCullSortTask::OVERLAY_TRANSPARENT_SHAPE]; + // RenderFetchCullSortTask out + const auto& fetchCullSortTaskOut = inputs.get0(); + const auto& items = fetchCullSortTaskOut.get0(); + const auto& spatialSelection = fetchCullSortTaskOut[1]; + + // Extract opaques / transparents / lights / metas / overlays / background + const auto& opaques = items[RenderFetchCullSortTask::OPAQUE_SHAPE]; + const auto& transparents = items[RenderFetchCullSortTask::TRANSPARENT_SHAPE]; + const auto& lights = items[RenderFetchCullSortTask::LIGHT]; + const auto& metas = items[RenderFetchCullSortTask::META]; + const auto& overlayOpaques = items[RenderFetchCullSortTask::OVERLAY_OPAQUE_SHAPE]; + const auto& overlayTransparents = items[RenderFetchCullSortTask::OVERLAY_TRANSPARENT_SHAPE]; + + // RenderShadowTask out + const auto& renderShadowTaskOut = inputs[1]; + + // Zones + const auto& zones = inputs[2]; + + // Selected objects + const auto& selectedItems = inputs[3]; + + // Stage current frames + const auto& stageCurrentFrames = inputs.get4();//[4]; + const auto lightFrame = stageCurrentFrames[0]; + const auto backgroundFrame = stageCurrentFrames[1]; + const auto hazeFrame = stageCurrentFrames[2]; + const auto bloomFrame = stageCurrentFrames[3]; + + // PrepareDeferred out + const auto& deferredFramebuffer = inputs[5]; + + // GenerateDeferredFrameTransform out + const auto& deferredFrameTransform = inputs[6]; + + // Jitter out + const auto& jitter = inputs[7]; + { // Debug the bounds of the rendered items, still look at the zbuffer task.addJob("DrawMetaBounds", metas); @@ -384,8 +456,8 @@ void RenderDeferredTaskDebug::build(JobModel& task, const render::Varying& input char jobName[64]; sprintf(jobName, "DrawShadowFrustum%d", i); task.addJob(jobName, shadowFrustum, glm::vec3(0.0f, tint, 1.0f)); - if (!inputs[1].isNull()) { - const auto& shadowCascadeSceneBBoxes = inputs.get1(); + if (!renderShadowTaskOut.isNull()) { + const auto& shadowCascadeSceneBBoxes = renderShadowTaskOut; const auto shadowBBox = shadowCascadeSceneBBoxes[ExtractFrustums::SHADOW_CASCADE0_FRUSTUM + i]; sprintf(jobName, "DrawShadowBBox%d", i); task.addJob(jobName, shadowBBox, glm::vec3(1.0f, tint, 0.0f)); @@ -397,14 +469,14 @@ void RenderDeferredTaskDebug::build(JobModel& task, const render::Varying& input } { // Debug the bounds of the rendered Overlay items that are marked drawInFront, still look at the zbuffer - task.addJob("DrawOverlayInFrontOpaqueBounds", overlaysInFrontOpaque); + /* task.addJob("DrawOverlayInFrontOpaqueBounds", overlaysInFrontOpaque); task.addJob("DrawOverlayInFrontTransparentBounds", overlaysInFrontTransparent); - } + */ } // Debugging stages { // Debugging Deferred buffer job - const auto debugFramebuffers = render::Varying(DebugDeferredBuffer::Inputs(deferredFramebuffer, linearDepthTarget, surfaceGeometryFramebuffer, ambientOcclusionFramebuffer, velocityBuffer, deferredFrameTransform, lightFrame)); + /* const auto debugFramebuffers = render::Varying(DebugDeferredBuffer::Inputs(deferredFramebuffer, linearDepthTarget, surfaceGeometryFramebuffer, ambientOcclusionFramebuffer, velocityBuffer, deferredFrameTransform, lightFrame)); task.addJob("DebugDeferredBuffer", debugFramebuffers); const auto debugSubsurfaceScatteringInputs = DebugSubsurfaceScattering::Inputs(deferredFrameTransform, deferredFramebuffer, lightingModel, @@ -413,7 +485,7 @@ void RenderDeferredTaskDebug::build(JobModel& task, const render::Varying& input const auto debugAmbientOcclusionInputs = DebugAmbientOcclusion::Inputs(deferredFrameTransform, deferredFramebuffer, linearDepthTarget, ambientOcclusionUniforms).asVarying(); task.addJob("DebugAmbientOcclusion", debugAmbientOcclusionInputs); - +*/ // Scene Octree Debugging job { task.addJob("DrawSceneOctree", spatialSelection); @@ -422,7 +494,7 @@ void RenderDeferredTaskDebug::build(JobModel& task, const render::Varying& input // Status icon rendering job { - // Grab a texture map representing the different status icons and assign that to the drawStatsuJob + // Grab a texture map representing the different status icons and assign that to the drawStatusJob auto iconMapPath = PathUtils::resourcesPath() + "icons/statusIconAtlas.svg"; auto statusIconMap = DependencyManager::get()->getImageTexture(iconMapPath, image::TextureUsage::STRICT_TEXTURE); const auto drawStatusInputs = DrawStatus::Input(opaques, jitter).asVarying(); diff --git a/libraries/render-utils/src/RenderDeferredTask.h b/libraries/render-utils/src/RenderDeferredTask.h index a72cf94b68..c18daa6d3d 100644 --- a/libraries/render-utils/src/RenderDeferredTask.h +++ b/libraries/render-utils/src/RenderDeferredTask.h @@ -154,26 +154,4 @@ private: const render::Varying& transparents); }; - -class RenderDeferredTaskDebugConfig : public render::Task::Config { - Q_OBJECT -public: - -signals: - void dirty(); -}; - -class RenderDeferredTaskDebug { -public: - using Input = render::VaryingSet2; - using Config = RenderDeferredTaskConfig; - using JobModel = render::Task::ModelI; - - RenderDeferredTaskDebug(); - - void configure(const Config& config); - void build(JobModel& task, const render::Varying& inputs, render::Varying& outputs); - -private: -}; #endif // hifi_RenderDeferredTask_h diff --git a/libraries/render-utils/src/ZoneRenderer.h b/libraries/render-utils/src/ZoneRenderer.h index 1646c5977d..36d63a98d1 100644 --- a/libraries/render-utils/src/ZoneRenderer.h +++ b/libraries/render-utils/src/ZoneRenderer.h @@ -52,8 +52,9 @@ public: using Inputs = render::ItemBounds; + using Outputs = render::ItemBounds; using Config = ZoneRendererConfig; - using JobModel = render::Task::ModelI; + using JobModel = render::Task::ModelIO; ZoneRendererTask() {} diff --git a/libraries/render/src/render/FilterTask.h b/libraries/render/src/render/FilterTask.h index 9b40728b00..c2244e5f57 100644 --- a/libraries/render/src/render/FilterTask.h +++ b/libraries/render/src/render/FilterTask.h @@ -114,7 +114,8 @@ namespace render { class SelectItems { public: using Inputs = VaryingSet3; - using JobModel = Job::ModelIO; + using Outputs = ItemBounds; + using JobModel = Job::ModelIO; std::string _name; SelectItems() {} diff --git a/libraries/task/src/task/Varying.h b/libraries/task/src/task/Varying.h index 9536db2799..f7dbdfba29 100644 --- a/libraries/task/src/task/Varying.h +++ b/libraries/task/src/task/Varying.h @@ -289,6 +289,26 @@ public: const T6& get6() const { return std::get<6>((*this)).template get(); } T6& edit6() { return std::get<6>((*this)).template edit(); } + virtual Varying operator[] (uint8_t index) const { + switch (index) { + default: + return std::get<0>((*this)); + case 1: + return std::get<1>((*this)); + case 2: + return std::get<2>((*this)); + case 3: + return std::get<3>((*this)); + case 4: + return std::get<4>((*this)); + case 5: + return std::get<5>((*this)); + case 6: + return std::get<6>((*this)); + }; + } + virtual uint8_t length() const { return 7; } + Varying asVarying() const { return Varying((*this)); } }; @@ -325,6 +345,28 @@ public: const T7& get7() const { return std::get<7>((*this)).template get(); } T7& edit7() { return std::get<7>((*this)).template edit(); } + virtual Varying operator[] (uint8_t index) const { + switch (index) { + default: + return std::get<0>((*this)); + case 1: + return std::get<1>((*this)); + case 2: + return std::get<2>((*this)); + case 3: + return std::get<3>((*this)); + case 4: + return std::get<4>((*this)); + case 5: + return std::get<5>((*this)); + case 6: + return std::get<6>((*this)); + case 7: + return std::get<7>((*this)); + }; + } + virtual uint8_t length() const { return 8; } + Varying asVarying() const { return Varying((*this)); } }; diff --git a/scripts/developer/utilities/lib/jet/qml/TaskListView.qml b/scripts/developer/utilities/lib/jet/qml/TaskListView.qml index 0f083aa72c..92488e7333 100644 --- a/scripts/developer/utilities/lib/jet/qml/TaskListView.qml +++ b/scripts/developer/utilities/lib/jet/qml/TaskListView.qml @@ -27,7 +27,7 @@ Rectangle { Component.onCompleted: { var message = "" - var maxDepth = 3; + var maxDepth = 5; var jobTreePath = [] var jobsRoot;