Commit 5c42266e by Jamie Madill

Make Program::usesPointSize D3D-only.

This test is only used in the D3D code, so we can remove this Impl method. If we need it in the future we can always support it more generally from the translator, or handle it differently on each Renderer. BUG=angleproject:1123 Change-Id: Ic4a22ad6cec93726195e68200fc25cc2956be44c Reviewed-on: https://chromium-review.googlesource.com/293822Reviewed-by: 's avatarCorentin Wallez <cwallez@chromium.org> Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org> Tested-by: 's avatarJamie Madill <jmadill@chromium.org>
parent 31c8c56a
......@@ -710,11 +710,6 @@ GLint Program::getUsedSamplerRange(SamplerType type)
return mProgram->getUsedSamplerRange(type);
}
bool Program::usesPointSize() const
{
return mProgram->usesPointSize();
}
GLint Program::getSamplerMapping(SamplerType type, unsigned int samplerIndex, const Caps &caps)
{
return mProgram->getSamplerMapping(type, samplerIndex, caps);
......
......@@ -226,7 +226,6 @@ class Program : angle::NonCopyable
GLint getSamplerMapping(SamplerType type, unsigned int samplerIndex, const Caps &caps);
GLenum getSamplerTextureType(SamplerType type, unsigned int samplerIndex);
GLint getUsedSamplerRange(SamplerType type);
bool usesPointSize() const;
GLint getFragDataLocation(const std::string &name) const;
......
......@@ -36,7 +36,6 @@ class ProgramImpl : angle::NonCopyable
ProgramImpl(const gl::Program::Data &data);
virtual ~ProgramImpl();
virtual bool usesPointSize() const = 0;
virtual int getShaderVersion() const = 0;
virtual GLenum getBinaryFormat() = 0;
......
......@@ -81,6 +81,8 @@ gl::Error RendererD3D::drawElements(const gl::Data &data,
gl::Program *program = data.state->getProgram();
ASSERT(program != NULL);
bool usesPointSize = GetImplAs<ProgramD3D>(program)->usesPointSize();
program->updateSamplerMapping();
gl::Error error = generateSwizzles(data);
......@@ -89,7 +91,7 @@ gl::Error RendererD3D::drawElements(const gl::Data &data,
return error;
}
if (!applyPrimitiveType(mode, count, program->usesPointSize()))
if (!applyPrimitiveType(mode, count, usesPointSize))
{
return gl::Error(GL_NO_ERROR);
}
......@@ -150,7 +152,8 @@ gl::Error RendererD3D::drawElements(const gl::Data &data,
if (!skipDraw(data, mode))
{
error = drawElements(mode, count, type, indices, vao->getElementArrayBuffer().get(), indexInfo, instances, program->usesPointSize());
error = drawElements(mode, count, type, indices, vao->getElementArrayBuffer().get(),
indexInfo, instances, usesPointSize);
if (error.isError())
{
return error;
......@@ -167,6 +170,8 @@ gl::Error RendererD3D::drawArrays(const gl::Data &data,
gl::Program *program = data.state->getProgram();
ASSERT(program != NULL);
bool usesPointSize = GetImplAs<ProgramD3D>(program)->usesPointSize();
program->updateSamplerMapping();
gl::Error error = generateSwizzles(data);
......@@ -175,7 +180,7 @@ gl::Error RendererD3D::drawArrays(const gl::Data &data,
return error;
}
if (!applyPrimitiveType(mode, count, program->usesPointSize()))
if (!applyPrimitiveType(mode, count, usesPointSize))
{
return gl::Error(GL_NO_ERROR);
}
......@@ -220,7 +225,7 @@ gl::Error RendererD3D::drawArrays(const gl::Data &data,
if (!skipDraw(data, mode))
{
error = drawArrays(data, mode, count, instances, program->usesPointSize());
error = drawArrays(data, mode, count, instances, usesPointSize);
if (error.isError())
{
return error;
......@@ -475,12 +480,16 @@ gl::Error RendererD3D::applyTextures(const gl::Data &data)
bool RendererD3D::skipDraw(const gl::Data &data, GLenum drawMode)
{
const gl::State &state = *data.state;
if (drawMode == GL_POINTS)
{
bool usesPointSize = GetImplAs<ProgramD3D>(state.getProgram())->usesPointSize();
// ProgramBinary assumes non-point rendering if gl_PointSize isn't written,
// which affects varying interpolation. Since the value of gl_PointSize is
// undefined when not written, just skip drawing to avoid unexpected results.
if (!data.state->getProgram()->usesPointSize() && !data.state->isTransformFeedbackActiveUnpaused())
if (!usesPointSize && !state.isTransformFeedbackActiveUnpaused())
{
// This is stictly speaking not an error, but developers should be
// notified of risking undefined behavior.
......@@ -491,7 +500,8 @@ bool RendererD3D::skipDraw(const gl::Data &data, GLenum drawMode)
}
else if (gl::IsTriangleMode(drawMode))
{
if (data.state->getRasterizerState().cullFace && data.state->getRasterizerState().cullMode == GL_FRONT_AND_BACK)
if (state.getRasterizerState().cullFace &&
state.getRasterizerState().cullMode == GL_FRONT_AND_BACK)
{
return true;
}
......
......@@ -34,12 +34,6 @@ ProgramGL::~ProgramGL()
mProgramID = 0;
}
bool ProgramGL::usesPointSize() const
{
UNIMPLEMENTED();
return bool();
}
int ProgramGL::getShaderVersion() const
{
UNIMPLEMENTED();
......
......@@ -31,7 +31,6 @@ class ProgramGL : public ProgramImpl
StateManagerGL *stateManager);
~ProgramGL() override;
bool usesPointSize() const override;
int getShaderVersion() const override;
GLenum getBinaryFormat() override;
......
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