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