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:
void setBlendConstant(const float4 &blendConstant);
protected:
const State update(const Context *context) const;
RoutineType routine(const State &state, vk::PipelineLayout const *pipelineLayout,
SpirvShader const *pixelShader, const vk::DescriptorSet::Bindings &descriptorSets);
......
......@@ -156,9 +156,9 @@ DrawCall::~DrawCall()
Renderer::Renderer(vk::Device *device)
: device(device)
{
VertexProcessor::setRoutineCacheSize(1024);
PixelProcessor::setRoutineCacheSize(1024);
SetupProcessor::setRoutineCacheSize(1024);
vertexProcessor.setRoutineCacheSize(1024);
pixelProcessor.setRoutineCacheSize(1024);
setupProcessor.setRoutineCacheSize(1024);
}
Renderer::~Renderer()
......@@ -204,13 +204,13 @@ void Renderer::draw(const sw::Context *context, VkIndexType indexType, unsigned
if(update)
{
MARL_SCOPED_EVENT("update");
vertexState = VertexProcessor::update(context);
setupState = SetupProcessor::update(context);
pixelState = PixelProcessor::update(context);
vertexState = vertexProcessor.update(context);
setupState = setupProcessor.update(context);
pixelState = pixelProcessor.update(context);
vertexRoutine = VertexProcessor::routine(vertexState, context->pipelineLayout, context->vertexShader, context->descriptorSets);
setupRoutine = SetupProcessor::routine(setupState);
pixelRoutine = PixelProcessor::routine(pixelState, context->pipelineLayout, context->pixelShader, context->descriptorSets);
vertexRoutine = vertexProcessor.routine(vertexState, context->pipelineLayout, context->vertexShader, context->descriptorSets);
setupRoutine = setupProcessor.routine(setupState);
pixelRoutine = pixelProcessor.routine(pixelState, context->pipelineLayout, context->pixelShader, context->descriptorSets);
}
DrawCall::SetupFunction setupPrimitives = nullptr;
......@@ -285,7 +285,7 @@ void Renderer::draw(const sw::Context *context, VkIndexType indexType, unsigned
data->lineWidth = context->lineWidth;
data->factor = factor;
data->factor = pixelProcessor.factor;
if(pixelState.alphaToCoverage)
{
......@@ -1184,4 +1184,9 @@ void Renderer::setScissor(const VkRect2D &scissor)
this->scissor = scissor;
}
void Renderer::setBlendConstant(const float4 &blendConstant)
{
pixelProcessor.setBlendConstant(blendConstant);
}
} // namespace sw
......@@ -189,7 +189,7 @@ struct DrawCall
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:
Renderer(vk::Device *device);
......@@ -209,6 +209,8 @@ public:
void setViewport(const VkViewport &viewport);
void setScissor(const VkRect2D &scissor);
void setBlendConstant(const float4 &blendConstant);
void addQuery(vk::Query *query);
void removeQuery(vk::Query *query);
......@@ -229,6 +231,10 @@ private:
marl::Ticket::Queue drawTickets;
marl::Ticket::Queue clusterQueues[MaxClusterCount];
VertexProcessor vertexProcessor;
PixelProcessor pixelProcessor;
SetupProcessor setupProcessor;
VertexProcessor::State vertexState;
SetupProcessor::State setupState;
PixelProcessor::State pixelState;
......
......@@ -73,7 +73,6 @@ public:
~SetupProcessor();
protected:
State update(const sw::Context *context) const;
RoutineType routine(const State &state);
......
......@@ -93,7 +93,6 @@ public:
virtual ~VertexProcessor();
protected:
const State update(const sw::Context *context);
RoutineType routine(const State &state, vk::PipelineLayout const *pipelineLayout,
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