From bc82b836ddddb330fa6347f8aac9ca2ed08b36fe Mon Sep 17 00:00:00 2001 From: Matt Pharr Date: Wed, 18 Nov 2020 14:09:31 -0800 Subject: [PATCH] Use MapType to generate list of types for MaterialEvalQueue. --- src/pbrt/gpu/workitems.h | 9 ++------- src/pbrt/gpu/workqueue.h | 16 ++++++++-------- 2 files changed, 10 insertions(+), 15 deletions(-) diff --git a/src/pbrt/gpu/workitems.h b/src/pbrt/gpu/workitems.h index 4a963fa..bb0d071 100644 --- a/src/pbrt/gpu/workitems.h +++ b/src/pbrt/gpu/workitems.h @@ -13,6 +13,7 @@ #include #include #include +#include #include #include @@ -437,13 +438,7 @@ using MediumScatterQueue = WorkQueue; // MaterialEvalQueue Definition using MaterialEvalQueue = MultiWorkQueue< - MaterialEvalWorkItem, - MaterialEvalWorkItem, - MaterialEvalWorkItem, MaterialEvalWorkItem, - MaterialEvalWorkItem, - MaterialEvalWorkItem, MaterialEvalWorkItem, - MaterialEvalWorkItem, MaterialEvalWorkItem, - MaterialEvalWorkItem, MaterialEvalWorkItem>; + typename MapType::type>; } // namespace pbrt diff --git a/src/pbrt/gpu/workqueue.h b/src/pbrt/gpu/workqueue.h index 5535d6e..6255eac 100644 --- a/src/pbrt/gpu/workqueue.h +++ b/src/pbrt/gpu/workqueue.h @@ -99,21 +99,21 @@ void ForAllQueued(const char *desc, WorkQueue *q, int maxQueued, F fun } // MultiWorkQueue Definition -template +template class MultiWorkQueue; template <> -class MultiWorkQueue<> { +class MultiWorkQueue> { public: MultiWorkQueue(int n, Allocator alloc, pstd::span haveType) {} }; template -class MultiWorkQueue : public MultiWorkQueue { +class MultiWorkQueue> : public MultiWorkQueue> { public: // MultiWorkQueue Public Methods MultiWorkQueue(int n, Allocator alloc, pstd::span haveType) - : MultiWorkQueue(n, alloc, haveType.subspan(1, haveType.size())), + : MultiWorkQueue>(n, alloc, haveType.subspan(1, haveType.size())), q(haveType.front() ? n : 1, alloc) {} template @@ -121,14 +121,14 @@ class MultiWorkQueue : public MultiWorkQueue { if constexpr (std::is_same_v) return q.Size(); else - return MultiWorkQueue::template Size(); + return MultiWorkQueue>::template Size(); } PBRT_CPU_GPU void Reset() { q.Reset(); if constexpr (sizeof...(Ts) > 0) - MultiWorkQueue::Reset(); + MultiWorkQueue>::Reset(); } template @@ -136,7 +136,7 @@ class MultiWorkQueue : public MultiWorkQueue { if constexpr (std::is_same_v) return &q; else - return MultiWorkQueue::template Get(); + return MultiWorkQueue>::template Get(); } template @@ -144,7 +144,7 @@ class MultiWorkQueue : public MultiWorkQueue { if constexpr (std::is_same_v) return q.Push(item); else - return MultiWorkQueue::template Push(item); + return MultiWorkQueue>::template Push(item); } private: -- GitLab