Commit ada9ecc3 by Jamie Madill

Make TF Feedback buffer mode a GL-level variable.

Don't query this as an Impl method, since it exists on the GL level. Also some related refactorings and cleanups. BUG=angleproject:1123 Change-Id: I3610bc0db2bcaa96408506e06a65a2f4dab93150 Reviewed-on: https://chromium-review.googlesource.com/293761Reviewed-by: 's avatarCorentin Wallez <cwallez@chromium.org> Tested-by: 's avatarJamie Madill <jmadill@chromium.org>
parent 5c6b7bfe
...@@ -290,11 +290,15 @@ Error Program::link(const gl::Data &data) ...@@ -290,11 +290,15 @@ Error Program::link(const gl::Data &data)
return Error(GL_NO_ERROR); return Error(GL_NO_ERROR);
} }
if (!linkVaryings(mInfoLog, mData.mAttachedVertexShader, mData.mAttachedFragmentShader))
{
return Error(GL_NO_ERROR);
}
int registers; int registers;
std::vector<LinkedVarying> linkedVaryings; std::vector<LinkedVarying> linkedVaryings;
rx::LinkResult result = rx::LinkResult result =
mProgram->link(data, mInfoLog, mData.mAttachedFragmentShader, mData.mAttachedVertexShader, mProgram->link(data, mInfoLog, mData.mAttachedFragmentShader, mData.mAttachedVertexShader,
mData.mTransformFeedbackVaryings, mData.mTransformFeedbackBufferMode,
&registers, &linkedVaryings, &mOutputVariables); &registers, &linkedVaryings, &mOutputVariables);
if (result.error.isError() || !result.linkSuccess) if (result.error.isError() || !result.linkSuccess)
{ {
...@@ -314,9 +318,7 @@ Error Program::link(const gl::Data &data) ...@@ -314,9 +318,7 @@ Error Program::link(const gl::Data &data)
} }
if (!gatherTransformFeedbackLinkedVaryings( if (!gatherTransformFeedbackLinkedVaryings(
mInfoLog, linkedVaryings, mData.mTransformFeedbackVaryings, mInfoLog, linkedVaryings, &mProgram->getTransformFeedbackLinkedVaryings(), *data.caps))
mData.mTransformFeedbackBufferMode, &mProgram->getTransformFeedbackLinkedVaryings(),
*data.caps))
{ {
return Error(GL_NO_ERROR); return Error(GL_NO_ERROR);
} }
...@@ -434,6 +436,8 @@ Error Program::loadBinary(GLenum binaryFormat, const void *binary, GLsizei lengt ...@@ -434,6 +436,8 @@ Error Program::loadBinary(GLenum binaryFormat, const void *binary, GLsizei lengt
mProgram->setShaderAttribute(attribIndex, type, precision, name, arraySize, location); mProgram->setShaderAttribute(attribIndex, type, precision, name, arraySize, location);
} }
stream.readInt(&mData.mTransformFeedbackBufferMode);
rx::LinkResult result = mProgram->load(mInfoLog, &stream); rx::LinkResult result = mProgram->load(mInfoLog, &stream);
if (result.error.isError() || !result.linkSuccess) if (result.error.isError() || !result.linkSuccess)
{ {
...@@ -478,6 +482,8 @@ Error Program::saveBinary(GLenum *binaryFormat, void *binary, GLsizei bufSize, G ...@@ -478,6 +482,8 @@ Error Program::saveBinary(GLenum *binaryFormat, void *binary, GLsizei bufSize, G
stream.writeInt(attrib.location); stream.writeInt(attrib.location);
} }
stream.writeInt(mData.mTransformFeedbackBufferMode);
gl::Error error = mProgram->save(&stream); gl::Error error = mProgram->save(&stream);
if (error.isError()) if (error.isError())
{ {
...@@ -1238,48 +1244,49 @@ GLenum Program::getTransformFeedbackBufferMode() const ...@@ -1238,48 +1244,49 @@ GLenum Program::getTransformFeedbackBufferMode() const
return mData.mTransformFeedbackBufferMode; return mData.mTransformFeedbackBufferMode;
} }
bool Program::linkVaryings(InfoLog &infoLog, Shader *fragmentShader, Shader *vertexShader) // static
bool Program::linkVaryings(InfoLog &infoLog,
const Shader *vertexShader,
const Shader *fragmentShader)
{ {
std::vector<PackedVarying> &fragmentVaryings = fragmentShader->getVaryings(); const std::vector<PackedVarying> &vertexVaryings = vertexShader->getVaryings();
std::vector<PackedVarying> &vertexVaryings = vertexShader->getVaryings(); const std::vector<PackedVarying> &fragmentVaryings = fragmentShader->getVaryings();
for (size_t fragVaryingIndex = 0; fragVaryingIndex < fragmentVaryings.size(); fragVaryingIndex++) for (const PackedVarying &output : fragmentVaryings)
{ {
PackedVarying *input = &fragmentVaryings[fragVaryingIndex];
bool matched = false; bool matched = false;
// Built-in varyings obey special rules // Built-in varyings obey special rules
if (input->isBuiltIn()) if (output.isBuiltIn())
{ {
continue; continue;
} }
for (size_t vertVaryingIndex = 0; vertVaryingIndex < vertexVaryings.size(); vertVaryingIndex++) for (const PackedVarying &input : vertexVaryings)
{ {
PackedVarying *output = &vertexVaryings[vertVaryingIndex]; if (output.name == input.name)
if (output->name == input->name)
{ {
if (!linkValidateVaryings(infoLog, output->name, *input, *output)) ASSERT(!input.isBuiltIn());
if (!linkValidateVaryings(infoLog, output.name, input, output))
{ {
return false; return false;
} }
output->registerIndex = input->registerIndex;
output->columnIndex = input->columnIndex;
matched = true; matched = true;
break; break;
} }
} }
// We permit unmatched, unreferenced varyings // We permit unmatched, unreferenced varyings
if (!matched && input->staticUse) if (!matched && output.staticUse)
{ {
infoLog << "Fragment varying " << input->name << " does not match any vertex varying"; infoLog << "Fragment varying " << output.name << " does not match any vertex varying";
return false; return false;
} }
} }
// TODO(jmadill): verify no unmatched vertex varyings?
return true; return true;
} }
...@@ -1583,8 +1590,6 @@ bool Program::linkValidateVaryings(InfoLog &infoLog, const std::string &varyingN ...@@ -1583,8 +1590,6 @@ bool Program::linkValidateVaryings(InfoLog &infoLog, const std::string &varyingN
} }
bool Program::gatherTransformFeedbackLinkedVaryings(InfoLog &infoLog, const std::vector<LinkedVarying> &linkedVaryings, bool Program::gatherTransformFeedbackLinkedVaryings(InfoLog &infoLog, const std::vector<LinkedVarying> &linkedVaryings,
const std::vector<std::string> &transformFeedbackVaryingNames,
GLenum transformFeedbackBufferMode,
std::vector<LinkedVarying> *outTransformFeedbackLinkedVaryings, std::vector<LinkedVarying> *outTransformFeedbackLinkedVaryings,
const Caps &caps) const const Caps &caps) const
{ {
...@@ -1592,12 +1597,12 @@ bool Program::gatherTransformFeedbackLinkedVaryings(InfoLog &infoLog, const std: ...@@ -1592,12 +1597,12 @@ bool Program::gatherTransformFeedbackLinkedVaryings(InfoLog &infoLog, const std:
// Gather the linked varyings that are used for transform feedback, they should all exist. // Gather the linked varyings that are used for transform feedback, they should all exist.
outTransformFeedbackLinkedVaryings->clear(); outTransformFeedbackLinkedVaryings->clear();
for (size_t i = 0; i < transformFeedbackVaryingNames.size(); i++) for (size_t i = 0; i < mData.mTransformFeedbackVaryings.size(); i++)
{ {
bool found = false; bool found = false;
for (size_t j = 0; j < linkedVaryings.size(); j++) for (size_t j = 0; j < linkedVaryings.size(); j++)
{ {
if (transformFeedbackVaryingNames[i] == linkedVaryings[j].name) if (mData.mTransformFeedbackVaryings[i] == linkedVaryings[j].name)
{ {
for (size_t k = 0; k < outTransformFeedbackLinkedVaryings->size(); k++) for (size_t k = 0; k < outTransformFeedbackLinkedVaryings->size(); k++)
{ {
...@@ -1610,7 +1615,7 @@ bool Program::gatherTransformFeedbackLinkedVaryings(InfoLog &infoLog, const std: ...@@ -1610,7 +1615,7 @@ bool Program::gatherTransformFeedbackLinkedVaryings(InfoLog &infoLog, const std:
} }
size_t componentCount = linkedVaryings[j].semanticIndexCount * 4; size_t componentCount = linkedVaryings[j].semanticIndexCount * 4;
if (transformFeedbackBufferMode == GL_SEPARATE_ATTRIBS && if (mData.mTransformFeedbackBufferMode == GL_SEPARATE_ATTRIBS &&
componentCount > caps.maxTransformFeedbackSeparateComponents) componentCount > caps.maxTransformFeedbackSeparateComponents)
{ {
infoLog << "Transform feedback varying's " << linkedVaryings[j].name infoLog << "Transform feedback varying's " << linkedVaryings[j].name
...@@ -1633,7 +1638,7 @@ bool Program::gatherTransformFeedbackLinkedVaryings(InfoLog &infoLog, const std: ...@@ -1633,7 +1638,7 @@ bool Program::gatherTransformFeedbackLinkedVaryings(InfoLog &infoLog, const std:
UNUSED_ASSERTION_VARIABLE(found); UNUSED_ASSERTION_VARIABLE(found);
} }
if (transformFeedbackBufferMode == GL_INTERLEAVED_ATTRIBS && if (mData.mTransformFeedbackBufferMode == GL_INTERLEAVED_ATTRIBS &&
totalComponents > caps.maxTransformFeedbackInterleavedComponents) totalComponents > caps.maxTransformFeedbackInterleavedComponents)
{ {
infoLog << "Transform feedback varying total components (" << totalComponents infoLog << "Transform feedback varying total components (" << totalComponents
......
...@@ -170,6 +170,11 @@ class Program : angle::NonCopyable ...@@ -170,6 +170,11 @@ class Program : angle::NonCopyable
const Shader *getAttachedVertexShader() const { return mAttachedVertexShader; } const Shader *getAttachedVertexShader() const { return mAttachedVertexShader; }
const Shader *getAttachedFragmentShader() const { return mAttachedFragmentShader; } const Shader *getAttachedFragmentShader() const { return mAttachedFragmentShader; }
const std::vector<std::string> &getTransformFeedbackVaryings() const
{
return mTransformFeedbackVaryings;
}
GLint getTransformFeedbackBufferMode() const { return mTransformFeedbackBufferMode; }
private: private:
friend class Program; friend class Program;
...@@ -281,7 +286,6 @@ class Program : angle::NonCopyable ...@@ -281,7 +286,6 @@ class Program : angle::NonCopyable
GLsizei getTransformFeedbackVaryingMaxLength() const; GLsizei getTransformFeedbackVaryingMaxLength() const;
GLenum getTransformFeedbackBufferMode() const; GLenum getTransformFeedbackBufferMode() const;
static bool linkVaryings(InfoLog &infoLog, Shader *fragmentShader, Shader *vertexShader);
static bool linkValidateUniforms(InfoLog &infoLog, const std::string &uniformName, const sh::Uniform &vertexUniform, const sh::Uniform &fragmentUniform); static bool linkValidateUniforms(InfoLog &infoLog, const std::string &uniformName, const sh::Uniform &vertexUniform, const sh::Uniform &fragmentUniform);
static bool linkValidateInterfaceBlockFields(InfoLog &infoLog, const std::string &uniformName, const sh::InterfaceBlockField &vertexUniform, const sh::InterfaceBlockField &fragmentUniform); static bool linkValidateInterfaceBlockFields(InfoLog &infoLog, const std::string &uniformName, const sh::InterfaceBlockField &vertexUniform, const sh::InterfaceBlockField &fragmentUniform);
...@@ -305,6 +309,9 @@ class Program : angle::NonCopyable ...@@ -305,6 +309,9 @@ class Program : angle::NonCopyable
const AttributeBindings &attributeBindings, const AttributeBindings &attributeBindings,
const Shader *vertexShader); const Shader *vertexShader);
bool linkUniformBlocks(InfoLog &infoLog, const Shader &vertexShader, const Shader &fragmentShader, const Caps &caps); bool linkUniformBlocks(InfoLog &infoLog, const Shader &vertexShader, const Shader &fragmentShader, const Caps &caps);
static bool linkVaryings(InfoLog &infoLog,
const Shader *vertexShader,
const Shader *fragmentShader);
bool areMatchingInterfaceBlocks(gl::InfoLog &infoLog, const sh::InterfaceBlock &vertexInterfaceBlock, bool areMatchingInterfaceBlocks(gl::InfoLog &infoLog, const sh::InterfaceBlock &vertexInterfaceBlock,
const sh::InterfaceBlock &fragmentInterfaceBlock); const sh::InterfaceBlock &fragmentInterfaceBlock);
...@@ -316,8 +323,6 @@ class Program : angle::NonCopyable ...@@ -316,8 +323,6 @@ class Program : angle::NonCopyable
static bool linkValidateVaryings(InfoLog &infoLog, const std::string &varyingName, const sh::Varying &vertexVarying, const sh::Varying &fragmentVarying); static bool linkValidateVaryings(InfoLog &infoLog, const std::string &varyingName, const sh::Varying &vertexVarying, const sh::Varying &fragmentVarying);
bool gatherTransformFeedbackLinkedVaryings(InfoLog &infoLog, const std::vector<LinkedVarying> &linkedVaryings, bool gatherTransformFeedbackLinkedVaryings(InfoLog &infoLog, const std::vector<LinkedVarying> &linkedVaryings,
const std::vector<std::string> &transformFeedbackVaryingNames,
GLenum transformFeedbackBufferMode,
std::vector<LinkedVarying> *outTransformFeedbackLinkedVaryings, std::vector<LinkedVarying> *outTransformFeedbackLinkedVaryings,
const Caps &caps) const; const Caps &caps) const;
bool assignUniformBlockRegister(InfoLog &infoLog, UniformBlock *uniformBlock, GLenum shader, unsigned int registerIndex, const Caps &caps); bool assignUniformBlockRegister(InfoLog &infoLog, UniformBlock *uniformBlock, GLenum shader, unsigned int registerIndex, const Caps &caps);
......
...@@ -35,6 +35,7 @@ struct Data; ...@@ -35,6 +35,7 @@ struct Data;
struct PackedVarying : public sh::Varying struct PackedVarying : public sh::Varying
{ {
// TODO(jmadill): Make these D3D-only or otherwise clearly separate from GL.
unsigned int registerIndex; // Assigned during link unsigned int registerIndex; // Assigned during link
unsigned int columnIndex; // Assigned during link, defaults to 0 unsigned int columnIndex; // Assigned during link, defaults to 0
......
...@@ -38,7 +38,6 @@ class ProgramImpl : angle::NonCopyable ...@@ -38,7 +38,6 @@ class ProgramImpl : angle::NonCopyable
virtual bool usesPointSize() const = 0; virtual bool usesPointSize() const = 0;
virtual int getShaderVersion() const = 0; virtual int getShaderVersion() const = 0;
virtual GLenum getTransformFeedbackBufferMode() const = 0;
virtual GLenum getBinaryFormat() = 0; virtual GLenum getBinaryFormat() = 0;
virtual LinkResult load(gl::InfoLog &infoLog, gl::BinaryInputStream *stream) = 0; virtual LinkResult load(gl::InfoLog &infoLog, gl::BinaryInputStream *stream) = 0;
...@@ -46,8 +45,6 @@ class ProgramImpl : angle::NonCopyable ...@@ -46,8 +45,6 @@ class ProgramImpl : angle::NonCopyable
virtual LinkResult link(const gl::Data &data, gl::InfoLog &infoLog, virtual LinkResult link(const gl::Data &data, gl::InfoLog &infoLog,
gl::Shader *fragmentShader, gl::Shader *vertexShader, gl::Shader *fragmentShader, gl::Shader *vertexShader,
const std::vector<std::string> &transformFeedbackVaryings,
GLenum transformFeedbackBufferMode,
int *registers, std::vector<gl::LinkedVarying> *linkedVaryings, int *registers, std::vector<gl::LinkedVarying> *linkedVaryings,
std::map<int, gl::VariableLocation> *outputVariables) = 0; std::map<int, gl::VariableLocation> *outputVariables) = 0;
......
...@@ -736,10 +736,14 @@ void DynamicHLSL::storeUserLinkedVaryings(const ShaderD3D *vertexShader, ...@@ -736,10 +736,14 @@ void DynamicHLSL::storeUserLinkedVaryings(const ShaderD3D *vertexShader,
} }
} }
bool DynamicHLSL::generateShaderLinkHLSL(const gl::Data &data, InfoLog &infoLog, int registers, bool DynamicHLSL::generateShaderLinkHLSL(const gl::Data &data,
InfoLog &infoLog,
int registers,
const VaryingPacking packing, const VaryingPacking packing,
std::string &pixelHLSL, std::string &vertexHLSL, std::string &pixelHLSL,
ShaderD3D *fragmentShader, ShaderD3D *vertexShader, std::string &vertexHLSL,
const ShaderD3D *fragmentShader,
const ShaderD3D *vertexShader,
const std::vector<std::string> &transformFeedbackVaryings, const std::vector<std::string> &transformFeedbackVaryings,
std::vector<LinkedVarying> *linkedVaryings, std::vector<LinkedVarying> *linkedVaryings,
std::map<int, VariableLocation> *programOutputVars, std::map<int, VariableLocation> *programOutputVars,
...@@ -1086,7 +1090,8 @@ bool DynamicHLSL::generateShaderLinkHLSL(const gl::Data &data, InfoLog &infoLog, ...@@ -1086,7 +1090,8 @@ bool DynamicHLSL::generateShaderLinkHLSL(const gl::Data &data, InfoLog &infoLog,
return true; return true;
} }
void DynamicHLSL::defineOutputVariables(ShaderD3D *fragmentShader, std::map<int, VariableLocation> *programOutputVars) const void DynamicHLSL::defineOutputVariables(const ShaderD3D *fragmentShader,
std::map<int, VariableLocation> *programOutputVars) const
{ {
const std::vector<sh::Attribute> &shaderOutputVars = fragmentShader->getActiveOutputVariables(); const std::vector<sh::Attribute> &shaderOutputVars = fragmentShader->getActiveOutputVariables();
......
...@@ -60,10 +60,14 @@ class DynamicHLSL : angle::NonCopyable ...@@ -60,10 +60,14 @@ class DynamicHLSL : angle::NonCopyable
const std::vector<sh::Attribute> &shaderAttributes) const; const std::vector<sh::Attribute> &shaderAttributes) const;
std::string generatePixelShaderForOutputSignature(const std::string &sourceShader, const std::vector<PixelShaderOutputVariable> &outputVariables, std::string generatePixelShaderForOutputSignature(const std::string &sourceShader, const std::vector<PixelShaderOutputVariable> &outputVariables,
bool usesFragDepth, const std::vector<GLenum> &outputLayout) const; bool usesFragDepth, const std::vector<GLenum> &outputLayout) const;
bool generateShaderLinkHLSL(const gl::Data &data, gl::InfoLog &infoLog, int registers, bool generateShaderLinkHLSL(const gl::Data &data,
gl::InfoLog &infoLog,
int registers,
const VaryingPacking packing, const VaryingPacking packing,
std::string &pixelHLSL, std::string &vertexHLSL, std::string &pixelHLSL,
ShaderD3D *fragmentShader, ShaderD3D *vertexShader, std::string &vertexHLSL,
const ShaderD3D *fragmentShader,
const ShaderD3D *vertexShader,
const std::vector<std::string> &transformFeedbackVaryings, const std::vector<std::string> &transformFeedbackVaryings,
std::vector<gl::LinkedVarying> *linkedVaryings, std::vector<gl::LinkedVarying> *linkedVaryings,
std::map<int, gl::VariableLocation> *programOutputVars, std::map<int, gl::VariableLocation> *programOutputVars,
...@@ -86,7 +90,8 @@ class DynamicHLSL : angle::NonCopyable ...@@ -86,7 +90,8 @@ class DynamicHLSL : angle::NonCopyable
std::string generateVaryingHLSL(const ShaderD3D *shader) const; std::string generateVaryingHLSL(const ShaderD3D *shader) const;
void storeUserLinkedVaryings(const ShaderD3D *vertexShader, std::vector<gl::LinkedVarying> *linkedVaryings) const; void storeUserLinkedVaryings(const ShaderD3D *vertexShader, std::vector<gl::LinkedVarying> *linkedVaryings) const;
void storeBuiltinLinkedVaryings(const SemanticInfo &info, std::vector<gl::LinkedVarying> *linkedVaryings) const; void storeBuiltinLinkedVaryings(const SemanticInfo &info, std::vector<gl::LinkedVarying> *linkedVaryings) const;
void defineOutputVariables(ShaderD3D *fragmentShader, std::map<int, gl::VariableLocation> *programOutputVars) const; void defineOutputVariables(const ShaderD3D *fragmentShader,
std::map<int, gl::VariableLocation> *programOutputVars) const;
std::string generatePointSpriteHLSL(int registers, std::string generatePointSpriteHLSL(int registers,
const ShaderD3D *fragmentShader, const ShaderD3D *fragmentShader,
const ShaderD3D *vertexShader) const; const ShaderD3D *vertexShader) const;
......
...@@ -47,7 +47,6 @@ class ProgramD3D : public ProgramImpl ...@@ -47,7 +47,6 @@ class ProgramD3D : public ProgramImpl
const std::vector<PixelShaderOutputVariable> &getPixelShaderKey() { return mPixelShaderKey; } const std::vector<PixelShaderOutputVariable> &getPixelShaderKey() { return mPixelShaderKey; }
int getShaderVersion() const { return mShaderVersion; } int getShaderVersion() const { return mShaderVersion; }
GLenum getTransformFeedbackBufferMode() const { return mTransformFeedbackBufferMode; }
GLint getSamplerMapping(gl::SamplerType type, unsigned int samplerIndex, const gl::Caps &caps) const; GLint getSamplerMapping(gl::SamplerType type, unsigned int samplerIndex, const gl::Caps &caps) const;
GLenum getSamplerTextureType(gl::SamplerType type, unsigned int samplerIndex) const; GLenum getSamplerTextureType(gl::SamplerType type, unsigned int samplerIndex) const;
...@@ -73,8 +72,6 @@ class ProgramD3D : public ProgramImpl ...@@ -73,8 +72,6 @@ class ProgramD3D : public ProgramImpl
LinkResult link(const gl::Data &data, gl::InfoLog &infoLog, LinkResult link(const gl::Data &data, gl::InfoLog &infoLog,
gl::Shader *fragmentShader, gl::Shader *vertexShader, gl::Shader *fragmentShader, gl::Shader *vertexShader,
const std::vector<std::string> &transformFeedbackVaryings,
GLenum transformFeedbackBufferMode,
int *registers, std::vector<gl::LinkedVarying> *linkedVaryings, int *registers, std::vector<gl::LinkedVarying> *linkedVaryings,
std::map<int, gl::VariableLocation> *outputVariables); std::map<int, gl::VariableLocation> *outputVariables);
...@@ -225,8 +222,6 @@ class ProgramD3D : public ProgramImpl ...@@ -225,8 +222,6 @@ class ProgramD3D : public ProgramImpl
UniformStorageD3D *mVertexUniformStorage; UniformStorageD3D *mVertexUniformStorage;
UniformStorageD3D *mFragmentUniformStorage; UniformStorageD3D *mFragmentUniformStorage;
GLenum mTransformFeedbackBufferMode;
std::vector<Sampler> mSamplersPS; std::vector<Sampler> mSamplersPS;
std::vector<Sampler> mSamplersVS; std::vector<Sampler> mSamplersVS;
GLuint mUsedVertexSamplerRange; GLuint mUsedVertexSamplerRange;
......
...@@ -46,12 +46,6 @@ int ProgramGL::getShaderVersion() const ...@@ -46,12 +46,6 @@ int ProgramGL::getShaderVersion() const
return int(); return int();
} }
GLenum ProgramGL::getTransformFeedbackBufferMode() const
{
UNIMPLEMENTED();
return GLenum();
}
GLenum ProgramGL::getBinaryFormat() GLenum ProgramGL::getBinaryFormat()
{ {
UNIMPLEMENTED(); UNIMPLEMENTED();
...@@ -72,16 +66,14 @@ gl::Error ProgramGL::save(gl::BinaryOutputStream *stream) ...@@ -72,16 +66,14 @@ gl::Error ProgramGL::save(gl::BinaryOutputStream *stream)
LinkResult ProgramGL::link(const gl::Data &data, gl::InfoLog &infoLog, LinkResult ProgramGL::link(const gl::Data &data, gl::InfoLog &infoLog,
gl::Shader *fragmentShader, gl::Shader *vertexShader, gl::Shader *fragmentShader, gl::Shader *vertexShader,
const std::vector<std::string> &transformFeedbackVaryings,
GLenum transformFeedbackBufferMode,
int *registers, std::vector<gl::LinkedVarying> *linkedVaryings, int *registers, std::vector<gl::LinkedVarying> *linkedVaryings,
std::map<int, gl::VariableLocation> *outputVariables) std::map<int, gl::VariableLocation> *outputVariables)
{ {
// Reset the program state, delete the current program if one exists // Reset the program state, delete the current program if one exists
reset(); reset();
ShaderGL *vertexShaderGL = GetImplAs<ShaderGL>(vertexShader); const ShaderGL *vertexShaderGL = GetImplAs<ShaderGL>(vertexShader);
ShaderGL *fragmentShaderGL = GetImplAs<ShaderGL>(fragmentShader); const ShaderGL *fragmentShaderGL = GetImplAs<ShaderGL>(fragmentShader);
// Attach the shaders // Attach the shaders
mFunctions->attachShader(mProgramID, vertexShaderGL->getShaderID()); mFunctions->attachShader(mProgramID, vertexShaderGL->getShaderID());
......
...@@ -33,7 +33,6 @@ class ProgramGL : public ProgramImpl ...@@ -33,7 +33,6 @@ class ProgramGL : public ProgramImpl
bool usesPointSize() const override; bool usesPointSize() const override;
int getShaderVersion() const override; int getShaderVersion() const override;
GLenum getTransformFeedbackBufferMode() const override;
GLenum getBinaryFormat() override; GLenum getBinaryFormat() override;
LinkResult load(gl::InfoLog &infoLog, gl::BinaryInputStream *stream) override; LinkResult load(gl::InfoLog &infoLog, gl::BinaryInputStream *stream) override;
...@@ -41,8 +40,6 @@ class ProgramGL : public ProgramImpl ...@@ -41,8 +40,6 @@ class ProgramGL : public ProgramImpl
LinkResult link(const gl::Data &data, gl::InfoLog &infoLog, LinkResult link(const gl::Data &data, gl::InfoLog &infoLog,
gl::Shader *fragmentShader, gl::Shader *vertexShader, gl::Shader *fragmentShader, gl::Shader *vertexShader,
const std::vector<std::string> &transformFeedbackVaryings,
GLenum transformFeedbackBufferMode,
int *registers, std::vector<gl::LinkedVarying> *linkedVaryings, int *registers, std::vector<gl::LinkedVarying> *linkedVaryings,
std::map<int, gl::VariableLocation> *outputVariables) override; std::map<int, gl::VariableLocation> *outputVariables) 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