Modify PixelRoutine to implement FunctionT
Bug: b/143479561
Change-Id: Iedd6b62b5b3dcc46a789f15112656cfe191cb4de
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/37708
Tested-by: Antonio Maiorano <amaiorano@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
diff --git a/src/Device/PixelProcessor.cpp b/src/Device/PixelProcessor.cpp
index e20cecd..196f004 100644
--- a/src/Device/PixelProcessor.cpp
+++ b/src/Device/PixelProcessor.cpp
@@ -147,7 +147,7 @@
void PixelProcessor::setRoutineCacheSize(int cacheSize)
{
delete routineCache;
- routineCache = new RoutineCache<State>(clamp(cacheSize, 1, 65536));
+ routineCache = new RoutineCacheType(clamp(cacheSize, 1, 65536));
}
const PixelProcessor::State PixelProcessor::update(const Context* context) const
@@ -206,7 +206,7 @@
return state;
}
- std::shared_ptr<Routine> PixelProcessor::routine(const State &state,
+ PixelProcessor::RoutineType PixelProcessor::routine(const State &state,
vk::PipelineLayout const *pipelineLayout,
SpirvShader const *pixelShader,
const vk::DescriptorSet::Bindings &descriptorSets)
diff --git a/src/Device/PixelProcessor.hpp b/src/Device/PixelProcessor.hpp
index da6d1a4..83e1654 100644
--- a/src/Device/PixelProcessor.hpp
+++ b/src/Device/PixelProcessor.hpp
@@ -28,6 +28,8 @@
struct DrawData;
struct Primitive;
+ using RasterizerFunction = FunctionT<void(const Primitive* primitive, int count, int cluster, int clusterCount, DrawData* draw)>;
+
class PixelProcessor
{
public:
@@ -136,7 +138,7 @@
};
public:
- typedef void (*RoutinePointer)(const Primitive *primitive, int count, int cluster, int clusterCount, DrawData *draw);
+ using RoutineType = RasterizerFunction::RoutineType;
PixelProcessor();
@@ -146,7 +148,7 @@
protected:
const State update(const Context* context) const;
- std::shared_ptr<Routine> routine(const State &state, vk::PipelineLayout const *pipelineLayout,
+ RoutineType routine(const State &state, vk::PipelineLayout const *pipelineLayout,
SpirvShader const *pixelShader, const vk::DescriptorSet::Bindings &descriptorSets);
void setRoutineCacheSize(int routineCacheSize);
@@ -154,7 +156,8 @@
Factor factor;
private:
- RoutineCache<State> *routineCache;
+ using RoutineCacheType = RoutineCacheT<State, RasterizerFunction::CFunctionType>;
+ RoutineCacheType *routineCache;
};
}
diff --git a/src/Device/Rasterizer.hpp b/src/Device/Rasterizer.hpp
index a206508..4e64e0e 100644
--- a/src/Device/Rasterizer.hpp
+++ b/src/Device/Rasterizer.hpp
@@ -21,7 +21,7 @@
namespace sw
{
- class Rasterizer : public Function<Void(Pointer<Byte>, Int, Int, Int, Pointer<Byte>)>
+ class Rasterizer : public RasterizerFunction
{
public:
Rasterizer() : primitive(Arg<0>()), count(Arg<1>()), cluster(Arg<2>()), clusterCount(Arg<3>()), data(Arg<4>()) {}
diff --git a/src/Device/Renderer.cpp b/src/Device/Renderer.cpp
index 1401eab..66428f1 100644
--- a/src/Device/Renderer.cpp
+++ b/src/Device/Renderer.cpp
@@ -270,7 +270,6 @@
draw->setupRoutine = setupRoutine;
draw->pixelRoutine = pixelRoutine;
draw->setupPointer = (SetupProcessor::RoutinePointer)setupRoutine->getEntry();
- draw->pixelPointer = (PixelProcessor::RoutinePointer)pixelRoutine->getEntry();
draw->setupPrimitives = setupPrimitives;
draw->setupState = setupState;
@@ -434,7 +433,7 @@
vertexRoutine = {};
setupRoutine.reset();
- pixelRoutine.reset();
+ pixelRoutine = {};
}
void DrawCall::run(const marl::Loan<DrawCall>& draw, marl::Ticket::Queue* tickets, marl::Ticket::Queue clusterQueues[MaxClusterCount])
@@ -543,7 +542,7 @@
auto& draw = data->draw;
auto& batch = data->batch;
MARL_SCOPED_EVENT("PIXEL draw %d, batch %d, cluster %d", draw->id, batch->id, cluster);
- draw->pixelPointer(&batch->primitives.front(), batch->numVisible, cluster, MaxClusterCount, draw->data);
+ draw->pixelRoutine(&batch->primitives.front(), batch->numVisible, cluster, MaxClusterCount, draw->data);
batch->clusterTickets[cluster].done();
});
}
diff --git a/src/Device/Renderer.hpp b/src/Device/Renderer.hpp
index 5efa221..71cf349 100644
--- a/src/Device/Renderer.hpp
+++ b/src/Device/Renderer.hpp
@@ -156,10 +156,9 @@
VertexProcessor::RoutineType vertexRoutine;
std::shared_ptr<Routine> setupRoutine;
- std::shared_ptr<Routine> pixelRoutine;
+ PixelProcessor::RoutineType pixelRoutine;
SetupProcessor::RoutinePointer setupPointer;
- PixelProcessor::RoutinePointer pixelPointer;
SetupFunction setupPrimitives;
SetupProcessor::State setupState;
@@ -238,7 +237,7 @@
VertexProcessor::RoutineType vertexRoutine;
std::shared_ptr<Routine> setupRoutine;
- std::shared_ptr<Routine> pixelRoutine;
+ PixelProcessor::RoutineType pixelRoutine;
vk::Device* device;
};