Commit bc2af94f by Ben Clayton

Device: Don't inherit [Vertex,Setup,Pixel]Processor.

Prefer composition over inheritance. Makes it clear that the virtual destructors on these processors are unnecessary. Bug: b/126126820 Change-Id: I062c06191ec1cdfb81f2a2773a976bf5c596e658 Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/43817Tested-by: 's avatarBen Clayton <bclayton@google.com> Reviewed-by: 's avatarNicolas Capens <nicolascapens@google.com> Kokoro-Result: kokoro <noreply+kokoro@google.com>
parent e52e2dbc
...@@ -150,7 +150,6 @@ public: ...@@ -150,7 +150,6 @@ public:
void setBlendConstant(const float4 &blendConstant); void setBlendConstant(const float4 &blendConstant);
protected:
const State update(const Context *context) const; const State update(const Context *context) const;
RoutineType 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); SpirvShader const *pixelShader, const vk::DescriptorSet::Bindings &descriptorSets);
......
...@@ -156,9 +156,9 @@ DrawCall::~DrawCall() ...@@ -156,9 +156,9 @@ DrawCall::~DrawCall()
Renderer::Renderer(vk::Device *device) Renderer::Renderer(vk::Device *device)
: device(device) : device(device)
{ {
VertexProcessor::setRoutineCacheSize(1024); vertexProcessor.setRoutineCacheSize(1024);
PixelProcessor::setRoutineCacheSize(1024); pixelProcessor.setRoutineCacheSize(1024);
SetupProcessor::setRoutineCacheSize(1024); setupProcessor.setRoutineCacheSize(1024);
} }
Renderer::~Renderer() Renderer::~Renderer()
...@@ -204,13 +204,13 @@ void Renderer::draw(const sw::Context *context, VkIndexType indexType, unsigned ...@@ -204,13 +204,13 @@ void Renderer::draw(const sw::Context *context, VkIndexType indexType, unsigned
if(update) if(update)
{ {
MARL_SCOPED_EVENT("update"); MARL_SCOPED_EVENT("update");
vertexState = VertexProcessor::update(context); vertexState = vertexProcessor.update(context);
setupState = SetupProcessor::update(context); setupState = setupProcessor.update(context);
pixelState = PixelProcessor::update(context); pixelState = pixelProcessor.update(context);
vertexRoutine = VertexProcessor::routine(vertexState, context->pipelineLayout, context->vertexShader, context->descriptorSets); vertexRoutine = vertexProcessor.routine(vertexState, context->pipelineLayout, context->vertexShader, context->descriptorSets);
setupRoutine = SetupProcessor::routine(setupState); setupRoutine = setupProcessor.routine(setupState);
pixelRoutine = PixelProcessor::routine(pixelState, context->pipelineLayout, context->pixelShader, context->descriptorSets); pixelRoutine = pixelProcessor.routine(pixelState, context->pipelineLayout, context->pixelShader, context->descriptorSets);
} }
DrawCall::SetupFunction setupPrimitives = nullptr; DrawCall::SetupFunction setupPrimitives = nullptr;
...@@ -285,7 +285,7 @@ void Renderer::draw(const sw::Context *context, VkIndexType indexType, unsigned ...@@ -285,7 +285,7 @@ void Renderer::draw(const sw::Context *context, VkIndexType indexType, unsigned
data->lineWidth = context->lineWidth; data->lineWidth = context->lineWidth;
data->factor = factor; data->factor = pixelProcessor.factor;
if(pixelState.alphaToCoverage) if(pixelState.alphaToCoverage)
{ {
...@@ -1184,4 +1184,9 @@ void Renderer::setScissor(const VkRect2D &scissor) ...@@ -1184,4 +1184,9 @@ void Renderer::setScissor(const VkRect2D &scissor)
this->scissor = scissor; this->scissor = scissor;
} }
void Renderer::setBlendConstant(const float4 &blendConstant)
{
pixelProcessor.setBlendConstant(blendConstant);
}
} // namespace sw } // namespace sw
...@@ -189,7 +189,7 @@ struct DrawCall ...@@ -189,7 +189,7 @@ struct DrawCall
static bool setupPoint(Primitive &primitive, Triangle &triangle, const DrawCall &draw); static bool setupPoint(Primitive &primitive, Triangle &triangle, const DrawCall &draw);
}; };
class alignas(16) Renderer : public VertexProcessor, public PixelProcessor, public SetupProcessor class alignas(16) Renderer
{ {
public: public:
Renderer(vk::Device *device); Renderer(vk::Device *device);
...@@ -209,6 +209,8 @@ public: ...@@ -209,6 +209,8 @@ public:
void setViewport(const VkViewport &viewport); void setViewport(const VkViewport &viewport);
void setScissor(const VkRect2D &scissor); void setScissor(const VkRect2D &scissor);
void setBlendConstant(const float4 &blendConstant);
void addQuery(vk::Query *query); void addQuery(vk::Query *query);
void removeQuery(vk::Query *query); void removeQuery(vk::Query *query);
...@@ -229,6 +231,10 @@ private: ...@@ -229,6 +231,10 @@ private:
marl::Ticket::Queue drawTickets; marl::Ticket::Queue drawTickets;
marl::Ticket::Queue clusterQueues[MaxClusterCount]; marl::Ticket::Queue clusterQueues[MaxClusterCount];
VertexProcessor vertexProcessor;
PixelProcessor pixelProcessor;
SetupProcessor setupProcessor;
VertexProcessor::State vertexState; VertexProcessor::State vertexState;
SetupProcessor::State setupState; SetupProcessor::State setupState;
PixelProcessor::State pixelState; PixelProcessor::State pixelState;
......
...@@ -73,7 +73,6 @@ public: ...@@ -73,7 +73,6 @@ public:
~SetupProcessor(); ~SetupProcessor();
protected:
State update(const sw::Context *context) const; State update(const sw::Context *context) const;
RoutineType routine(const State &state); RoutineType routine(const State &state);
......
...@@ -93,7 +93,6 @@ public: ...@@ -93,7 +93,6 @@ public:
virtual ~VertexProcessor(); virtual ~VertexProcessor();
protected:
const State update(const sw::Context *context); const State update(const sw::Context *context);
RoutineType routine(const State &state, vk::PipelineLayout const *pipelineLayout, RoutineType routine(const State &state, vk::PipelineLayout const *pipelineLayout,
SpirvShader const *vertexShader, const vk::DescriptorSet::Bindings &descriptorSets); SpirvShader const *vertexShader, const vk::DescriptorSet::Bindings &descriptorSets);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment