Commit d33ffb22 by Jamie Madill Committed by Commit Bot

Organize VaryingPacking methods.

This clarifies the difference between "collect" and "pack" methods. Previously the naming was overlapping between the two. Also makes the "packUserVaryings" method private. Refactoring change only. Will enable further improvements for capturing varyings with multiple shader stages. Bug: angleproject:5496 Change-Id: I854590ceab39f3a0e7a785516e0d1fd44e4ccc98 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2606529 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarTim Van Patten <timvp@google.com> Reviewed-by: 's avatarShahbaz Youssefi <syoussefi@chromium.org>
parent 92e7bc89
...@@ -207,8 +207,6 @@ class VaryingPacking final : angle::NonCopyable ...@@ -207,8 +207,6 @@ class VaryingPacking final : angle::NonCopyable
void init(GLuint maxVaryingVectors, PackMode packMode); void init(GLuint maxVaryingVectors, PackMode packMode);
bool packUserVaryings(gl::InfoLog &infoLog, const std::vector<PackedVarying> &packedVaryings);
bool collectAndPackUserVaryings(gl::InfoLog &infoLog, bool collectAndPackUserVaryings(gl::InfoLog &infoLog,
const ProgramMergedVaryings &mergedVaryings, const ProgramMergedVaryings &mergedVaryings,
const std::vector<std::string> &tfVaryings, const std::vector<std::string> &tfVaryings,
...@@ -246,29 +244,38 @@ class VaryingPacking final : angle::NonCopyable ...@@ -246,29 +244,38 @@ class VaryingPacking final : angle::NonCopyable
void reset(); void reset();
private: private:
bool packVarying(const PackedVarying &packedVarying); using VaryingUniqueFullNames = ShaderMap<std::set<std::string>>;
bool isFree(unsigned int registerRow,
// Register map functions.
bool packUserVaryings(gl::InfoLog &infoLog, const std::vector<PackedVarying> &packedVaryings);
bool packVaryingIntoRegisterMap(const PackedVarying &packedVarying);
bool isRegisterRangeFree(unsigned int registerRow,
unsigned int registerColumn, unsigned int registerColumn,
unsigned int varyingRows, unsigned int varyingRows,
unsigned int varyingColumns) const; unsigned int varyingColumns) const;
void insert(unsigned int registerRow, void insertVaryingIntoRegisterMap(unsigned int registerRow,
unsigned int registerColumn, unsigned int registerColumn,
const PackedVarying &packedVarying); const PackedVarying &packedVarying);
void clearRegisterMap();
using VaryingUniqueFullNames = ShaderMap<std::set<std::string>>; // Collection functions.
void packUserVarying(const ProgramVaryingRef &ref, VaryingUniqueFullNames *uniqueFullNames); void collectUserVarying(const ProgramVaryingRef &ref, VaryingUniqueFullNames *uniqueFullNames);
void packUserVaryingField(const ProgramVaryingRef &ref, void collectUserVaryingField(const ProgramVaryingRef &ref,
GLuint arrayIndex, GLuint arrayIndex,
GLuint fieldIndex, GLuint fieldIndex,
GLuint secondaryFieldIndex, GLuint secondaryFieldIndex,
VaryingUniqueFullNames *uniqueFullNames); VaryingUniqueFullNames *uniqueFullNames);
void packUserVaryingTF(const ProgramVaryingRef &ref, size_t subscript); void collectUserVaryingTF(const ProgramVaryingRef &ref, size_t subscript);
void packUserVaryingFieldTF(const ProgramVaryingRef &ref, void collectUserVaryingFieldTF(const ProgramVaryingRef &ref,
const sh::ShaderVariable &field, const sh::ShaderVariable &field,
GLuint fieldIndex, GLuint fieldIndex,
GLuint secondaryFieldIndex); GLuint secondaryFieldIndex);
void collectVarying(const sh::ShaderVariable &varying,
void clearRegisterMap(); const ProgramVaryingRef &ref,
VaryingUniqueFullNames *uniqueFullNames);
void collectTFVarying(const std::string &tfVarying,
const ProgramVaryingRef &ref,
VaryingUniqueFullNames *uniqueFullNames);
std::vector<Register> mRegisterMap; std::vector<Register> mRegisterMap;
std::vector<PackedVaryingRegister> mRegisterList; std::vector<PackedVaryingRegister> mRegisterList;
......
...@@ -29,18 +29,22 @@ class VaryingPackingTest : public ::testing::TestWithParam<GLuint> ...@@ -29,18 +29,22 @@ class VaryingPackingTest : public ::testing::TestWithParam<GLuint>
bool testVaryingPacking(const std::vector<sh::ShaderVariable> &shVaryings, bool testVaryingPacking(const std::vector<sh::ShaderVariable> &shVaryings,
VaryingPacking *varyingPacking) VaryingPacking *varyingPacking)
{ {
std::vector<PackedVarying> packedVaryings; ProgramMergedVaryings mergedVaryings;
for (const sh::ShaderVariable &shVarying : shVaryings) for (const sh::ShaderVariable &shVarying : shVaryings)
{ {
packedVaryings.push_back(PackedVarying( ProgramVaryingRef ref;
VaryingInShaderRef(ShaderType::Vertex, &shVarying), ref.frontShader = &shVarying;
VaryingInShaderRef(ShaderType::Fragment, &shVarying), shVarying.interpolation)); ref.backShader = &shVarying;
ref.frontShaderStage = ShaderType::Vertex;
ref.backShaderStage = ShaderType::Fragment;
mergedVaryings.push_back(ref);
} }
InfoLog infoLog; InfoLog infoLog;
std::vector<std::string> transformFeedbackVaryings; std::vector<std::string> transformFeedbackVaryings;
return varyingPacking->packUserVaryings(infoLog, packedVaryings); return varyingPacking->collectAndPackUserVaryings(infoLog, mergedVaryings,
transformFeedbackVaryings, false);
} }
// Uses the "relaxed" ANGLE packing mode. // Uses the "relaxed" ANGLE packing mode.
......
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