Commit 587f3c35 by Jamie Madill

Refactor RendererD3D::applyShaders.

Reduce the argument count to make future refactorings easier. BUG=angleproject:754 Change-Id: Ia8acfc2bc8f922ad6a115e198ea51a62710a422c Reviewed-on: https://chromium-review.googlesource.com/307873Reviewed-by: 's avatarCorentin Wallez <cwallez@chromium.org> Tryjob-Request: Jamie Madill <jmadill@chromium.org> Tested-by: 's avatarJamie Madill <jmadill@chromium.org>
parent 334d615f
......@@ -442,9 +442,7 @@ gl::Error RendererD3D::applyShaders(const gl::Data &data)
ProgramD3D *programD3D = GetImplAs<ProgramD3D>(program);
programD3D->updateCachedInputLayout(*data.state);
const gl::Framebuffer *fbo = data.state->getDrawFramebuffer();
gl::Error error = applyShaders(program, fbo, data.state->getRasterizerState().rasterizerDiscard, data.state->isTransformFeedbackActiveUnpaused());
gl::Error error = applyShadersImpl(data);
if (error.isError())
{
return error;
......
......@@ -160,10 +160,6 @@ class RendererD3D : public Renderer, public BufferFactoryD3D
bool ignoreViewport) = 0;
virtual gl::Error applyRenderTarget(const gl::Framebuffer *frameBuffer) = 0;
virtual gl::Error applyShaders(gl::Program *program,
const gl::Framebuffer *framebuffer,
bool rasterizerDiscard,
bool transformFeedbackActive) = 0;
virtual gl::Error applyUniforms(const ProgramD3D &programD3D,
const std::vector<D3DUniform *> &uniformArray) = 0;
virtual bool applyPrimitiveType(GLenum primitiveType, GLsizei elementCount, bool usesPointSize) = 0;
......@@ -246,6 +242,7 @@ class RendererD3D : public Renderer, public BufferFactoryD3D
protected:
virtual bool getLUID(LUID *adapterLuid) const = 0;
virtual gl::Error applyShadersImpl(const gl::Data &data) = 0;
void cleanup();
......
......@@ -2045,12 +2045,9 @@ gl::Error Renderer11::drawTriangleFan(GLsizei count, GLenum type, const GLvoid *
return gl::Error(GL_NO_ERROR);
}
gl::Error Renderer11::applyShaders(gl::Program *program,
const gl::Framebuffer *framebuffer,
bool rasterizerDiscard,
bool transformFeedbackActive)
gl::Error Renderer11::applyShadersImpl(const gl::Data &data)
{
ProgramD3D *programD3D = GetImplAs<ProgramD3D>(program);
ProgramD3D *programD3D = GetImplAs<ProgramD3D>(data.state->getProgram());
const auto &inputLayout = programD3D->getCachedInputLayout();
ShaderExecutableD3D *vertexExe = NULL;
......@@ -2060,8 +2057,9 @@ gl::Error Renderer11::applyShaders(gl::Program *program,
return error;
}
const gl::Framebuffer *drawFramebuffer = data.state->getDrawFramebuffer();
ShaderExecutableD3D *pixelExe = NULL;
error = programD3D->getPixelExecutableForFramebuffer(framebuffer, &pixelExe);
error = programD3D->getPixelExecutableForFramebuffer(drawFramebuffer, &pixelExe);
if (error.isError())
{
return error;
......@@ -2073,12 +2071,14 @@ gl::Error Renderer11::applyShaders(gl::Program *program,
ID3D11PixelShader *pixelShader = NULL;
// Skip pixel shader if we're doing rasterizer discard.
bool rasterizerDiscard = data.state->getRasterizerState().rasterizerDiscard;
if (!rasterizerDiscard)
{
pixelShader = (pixelExe ? GetAs<ShaderExecutable11>(pixelExe)->getPixelShader() : NULL);
}
ID3D11GeometryShader *geometryShader = NULL;
bool transformFeedbackActive = data.state->isTransformFeedbackActiveUnpaused();
if (transformFeedbackActive)
{
geometryShader = (vertexExe ? GetAs<ShaderExecutable11>(vertexExe)->getStreamOutShader() : NULL);
......
......@@ -132,10 +132,6 @@ class Renderer11 : public RendererD3D
virtual bool applyPrimitiveType(GLenum mode, GLsizei count, bool usesPointSize);
gl::Error applyRenderTarget(const gl::Framebuffer *frameBuffer) override;
gl::Error applyShaders(gl::Program *program,
const gl::Framebuffer *framebuffer,
bool rasterizerDiscard,
bool transformFeedbackActive) override;
gl::Error applyUniforms(const ProgramD3D &programD3D,
const std::vector<D3DUniform *> &uniformArray) override;
......@@ -273,6 +269,7 @@ class Renderer11 : public RendererD3D
protected:
void createAnnotator() override;
gl::Error clearTextures(gl::SamplerType samplerType, size_t rangeStart, size_t rangeEnd) override;
gl::Error applyShadersImpl(const gl::Data &data) override;
private:
gl::Error drawArraysImpl(const gl::Data &data,
......
......@@ -1862,15 +1862,9 @@ gl::Error Renderer9::getCountingIB(size_t count, StaticIndexBufferInterface **ou
return gl::Error(GL_NO_ERROR);
}
gl::Error Renderer9::applyShaders(gl::Program *program,
const gl::Framebuffer *framebuffer,
bool rasterizerDiscard,
bool transformFeedbackActive)
gl::Error Renderer9::applyShadersImpl(const gl::Data &data)
{
ASSERT(!transformFeedbackActive);
ASSERT(!rasterizerDiscard);
ProgramD3D *programD3D = GetImplAs<ProgramD3D>(program);
ProgramD3D *programD3D = GetImplAs<ProgramD3D>(data.state->getProgram());
const auto &inputLayout = programD3D->getCachedInputLayout();
ShaderExecutableD3D *vertexExe = NULL;
......@@ -1880,8 +1874,9 @@ gl::Error Renderer9::applyShaders(gl::Program *program,
return error;
}
const gl::Framebuffer *drawFramebuffer = data.state->getDrawFramebuffer();
ShaderExecutableD3D *pixelExe = NULL;
error = programD3D->getPixelExecutableForFramebuffer(framebuffer, &pixelExe);
error = programD3D->getPixelExecutableForFramebuffer(drawFramebuffer, &pixelExe);
if (error.isError())
{
return error;
......
......@@ -109,10 +109,6 @@ class Renderer9 : public RendererD3D
gl::Error applyRenderTarget(const gl::Framebuffer *frameBuffer) override;
gl::Error applyRenderTarget(const gl::FramebufferAttachment *colorAttachment,
const gl::FramebufferAttachment *depthStencilAttachment);
gl::Error applyShaders(gl::Program *program,
const gl::Framebuffer *framebuffer,
bool rasterizerDiscard,
bool transformFeedbackActive) override;
gl::Error applyUniforms(const ProgramD3D &programD3D,
const std::vector<D3DUniform *> &uniformArray) override;
virtual bool applyPrimitiveType(GLenum primitiveType, GLsizei elementCount, bool usesPointSize);
......@@ -239,6 +235,7 @@ class Renderer9 : public RendererD3D
protected:
void createAnnotator() override;
gl::Error clearTextures(gl::SamplerType samplerType, size_t rangeStart, size_t rangeEnd) override;
gl::Error applyShadersImpl(const gl::Data &data) override;
private:
gl::Error drawArraysImpl(const gl::Data &data,
......
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