Index: gpu/command_buffer/service/program_cache_unittest.cc |
diff --git a/gpu/command_buffer/service/program_cache_unittest.cc b/gpu/command_buffer/service/program_cache_unittest.cc |
index 7a4cbcdb1274521f8b60a409adcaf9a516b258de..f4949ce28b844d943c7825e8fb12b2dd6865d135 100644 |
--- a/gpu/command_buffer/service/program_cache_unittest.cc |
+++ b/gpu/command_buffer/service/program_cache_unittest.cc |
@@ -20,14 +20,19 @@ class NoBackendProgramCache : public ProgramCache { |
Shader* /* shader_a */, |
Shader* /* shader_b */, |
const LocationMap* /* bind_attrib_location_map */, |
+ const std::vector<std::string>& /* transform_feedback_varyings */, |
+ GLenum /* transform_feedback_buffer_mode */, |
const ShaderCacheCallback& /* callback */) override { |
return PROGRAM_LOAD_SUCCESS; |
} |
- void SaveLinkedProgram(GLuint /* program */, |
- const Shader* /* shader_a */, |
- const Shader* /* shader_b */, |
- const LocationMap* /* bind_attrib_location_map */, |
- const ShaderCacheCallback& /* callback */) override {} |
+ void SaveLinkedProgram( |
+ GLuint /* program */, |
+ const Shader* /* shader_a */, |
+ const Shader* /* shader_b */, |
+ const LocationMap* /* bind_attrib_location_map */, |
+ const std::vector<std::string>& /* transform_feedback_varyings */, |
+ GLenum /* transform_feedback_buffer_mode */, |
+ const ShaderCacheCallback& /* callback */) override {} |
void LoadProgram(const std::string& /* program */) override {} |
@@ -35,7 +40,9 @@ class NoBackendProgramCache : public ProgramCache { |
void SaySuccessfullyCached(const std::string& shader1, |
const std::string& shader2, |
- std::map<std::string, GLint>* attrib_map) { |
+ std::map<std::string, GLint>* attrib_map, |
+ const std::vector<std::string>& varyings, |
+ GLenum buffer_mode) { |
char a_sha[kHashLength]; |
char b_sha[kHashLength]; |
ComputeShaderHash(shader1, a_sha); |
@@ -45,6 +52,8 @@ class NoBackendProgramCache : public ProgramCache { |
ComputeProgramHash(a_sha, |
b_sha, |
attrib_map, |
+ varyings, |
+ buffer_mode, |
sha); |
const std::string shaString(sha, kHashLength); |
@@ -56,13 +65,18 @@ class NoBackendProgramCache : public ProgramCache { |
ProgramCache::ComputeShaderHash(shader, result); |
} |
- void ComputeProgramHash(const char* hashed_shader_0, |
- const char* hashed_shader_1, |
- const LocationMap* bind_attrib_location_map, |
- char* result) const { |
+ void ComputeProgramHash( |
+ const char* hashed_shader_0, |
+ const char* hashed_shader_1, |
+ const LocationMap* bind_attrib_location_map, |
+ const std::vector<std::string>& transform_feedback_varyings, |
+ GLenum transform_feedback_buffer_mode, |
+ char* result) const { |
ProgramCache::ComputeProgramHash(hashed_shader_0, |
hashed_shader_1, |
bind_attrib_location_map, |
+ transform_feedback_varyings, |
+ transform_feedback_buffer_mode, |
result); |
} |
@@ -78,6 +92,7 @@ class ProgramCacheTest : public testing::Test { |
protected: |
scoped_ptr<NoBackendProgramCache> cache_; |
+ std::vector<std::string> varyings_; |
}; |
TEST_F(ProgramCacheTest, LinkStatusSave) { |
@@ -88,8 +103,8 @@ TEST_F(ProgramCacheTest, LinkStatusSave) { |
std::string shader_b = shader2; |
EXPECT_EQ(ProgramCache::LINK_UNKNOWN, |
cache_->GetLinkedProgramStatus( |
- shader_a, shader_b, NULL)); |
- cache_->SaySuccessfullyCached(shader_a, shader_b, NULL); |
+ shader_a, shader_b, NULL, varyings_, GL_NONE)); |
+ cache_->SaySuccessfullyCached(shader_a, shader_b, NULL, varyings_, GL_NONE); |
shader_a.clear(); |
shader_b.clear(); |
@@ -97,33 +112,35 @@ TEST_F(ProgramCacheTest, LinkStatusSave) { |
// make sure it was copied |
EXPECT_EQ(ProgramCache::LINK_SUCCEEDED, |
cache_->GetLinkedProgramStatus( |
- shader1, shader2, NULL)); |
+ shader1, shader2, NULL, varyings_, GL_NONE)); |
} |
TEST_F(ProgramCacheTest, LinkUnknownOnFragmentSourceChange) { |
const std::string shader1 = "abcd1234"; |
std::string shader2 = "abcda sda b1~#4 bbbbb1234"; |
- cache_->SaySuccessfullyCached(shader1, shader2, NULL); |
+ cache_->SaySuccessfullyCached(shader1, shader2, NULL, varyings_, GL_NONE); |
shader2 = "different!"; |
EXPECT_EQ(ProgramCache::LINK_UNKNOWN, |
- cache_->GetLinkedProgramStatus(shader1, shader2, NULL)); |
+ cache_->GetLinkedProgramStatus(shader1, shader2, NULL, |
+ varyings_, GL_NONE)); |
} |
TEST_F(ProgramCacheTest, LinkUnknownOnVertexSourceChange) { |
std::string shader1 = "abcd1234"; |
const std::string shader2 = "abcda sda b1~#4 bbbbb1234"; |
- cache_->SaySuccessfullyCached(shader1, shader2, NULL); |
+ cache_->SaySuccessfullyCached(shader1, shader2, NULL, varyings_, GL_NONE); |
shader1 = "different!"; |
EXPECT_EQ(ProgramCache::LINK_UNKNOWN, |
- cache_->GetLinkedProgramStatus(shader1, shader2, NULL)); |
+ cache_->GetLinkedProgramStatus(shader1, shader2, NULL, |
+ varyings_, GL_NONE)); |
} |
TEST_F(ProgramCacheTest, StatusEviction) { |
const std::string shader1 = "abcd1234"; |
const std::string shader2 = "abcda sda b1~#4 bbbbb1234"; |
- cache_->SaySuccessfullyCached(shader1, shader2, NULL); |
+ cache_->SaySuccessfullyCached(shader1, shader2, NULL, varyings_, GL_NONE); |
char a_sha[ProgramCache::kHashLength]; |
char b_sha[ProgramCache::kHashLength]; |
cache_->ComputeShaderHash(shader1, a_sha); |
@@ -133,18 +150,21 @@ TEST_F(ProgramCacheTest, StatusEviction) { |
cache_->ComputeProgramHash(a_sha, |
b_sha, |
NULL, |
+ varyings_, |
+ GL_NONE, |
sha); |
cache_->Evict(std::string(sha, ProgramCache::kHashLength)); |
EXPECT_EQ(ProgramCache::LINK_UNKNOWN, |
- cache_->GetLinkedProgramStatus(shader1, shader2, NULL)); |
+ cache_->GetLinkedProgramStatus(shader1, shader2, NULL, |
+ varyings_, GL_NONE)); |
} |
TEST_F(ProgramCacheTest, EvictionWithReusedShader) { |
const std::string shader1 = "abcd1234"; |
const std::string shader2 = "abcda sda b1~#4 bbbbb1234"; |
const std::string shader3 = "asbjbbjj239a"; |
- cache_->SaySuccessfullyCached(shader1, shader2, NULL); |
- cache_->SaySuccessfullyCached(shader1, shader3, NULL); |
+ cache_->SaySuccessfullyCached(shader1, shader2, NULL, varyings_, GL_NONE); |
+ cache_->SaySuccessfullyCached(shader1, shader3, NULL, varyings_, GL_NONE); |
char a_sha[ProgramCache::kHashLength]; |
char b_sha[ProgramCache::kHashLength]; |
@@ -157,36 +177,63 @@ TEST_F(ProgramCacheTest, EvictionWithReusedShader) { |
cache_->ComputeProgramHash(a_sha, |
b_sha, |
NULL, |
+ varyings_, |
+ GL_NONE, |
sha); |
cache_->Evict(std::string(sha, ProgramCache::kHashLength)); |
EXPECT_EQ(ProgramCache::LINK_UNKNOWN, |
- cache_->GetLinkedProgramStatus(shader1, shader2, NULL)); |
+ cache_->GetLinkedProgramStatus(shader1, shader2, NULL, |
+ varyings_, GL_NONE)); |
EXPECT_EQ(ProgramCache::LINK_SUCCEEDED, |
- cache_->GetLinkedProgramStatus(shader1, shader3, NULL)); |
+ cache_->GetLinkedProgramStatus(shader1, shader3, NULL, |
+ varyings_, GL_NONE)); |
cache_->ComputeProgramHash(a_sha, |
c_sha, |
NULL, |
+ varyings_, |
+ GL_NONE, |
sha); |
cache_->Evict(std::string(sha, ProgramCache::kHashLength)); |
EXPECT_EQ(ProgramCache::LINK_UNKNOWN, |
- cache_->GetLinkedProgramStatus(shader1, shader2, NULL)); |
+ cache_->GetLinkedProgramStatus(shader1, shader2, NULL, |
+ varyings_, GL_NONE)); |
EXPECT_EQ(ProgramCache::LINK_UNKNOWN, |
- cache_->GetLinkedProgramStatus(shader1, shader3, NULL)); |
+ cache_->GetLinkedProgramStatus(shader1, shader3, NULL, |
+ varyings_, GL_NONE)); |
} |
TEST_F(ProgramCacheTest, StatusClear) { |
const std::string shader1 = "abcd1234"; |
const std::string shader2 = "abcda sda b1~#4 bbbbb1234"; |
const std::string shader3 = "asbjbbjj239a"; |
- cache_->SaySuccessfullyCached(shader1, shader2, NULL); |
- cache_->SaySuccessfullyCached(shader1, shader3, NULL); |
+ cache_->SaySuccessfullyCached(shader1, shader2, NULL, varyings_, GL_NONE); |
+ cache_->SaySuccessfullyCached(shader1, shader3, NULL, varyings_, GL_NONE); |
cache_->Clear(); |
EXPECT_EQ(ProgramCache::LINK_UNKNOWN, |
- cache_->GetLinkedProgramStatus(shader1, shader2, NULL)); |
+ cache_->GetLinkedProgramStatus(shader1, shader2, NULL, |
+ varyings_, GL_NONE)); |
+ EXPECT_EQ(ProgramCache::LINK_UNKNOWN, |
+ cache_->GetLinkedProgramStatus(shader1, shader3, NULL, |
+ varyings_, GL_NONE)); |
+} |
+ |
+TEST_F(ProgramCacheTest, LinkUnknownOnTransformFeedbackChange) { |
+ const std::string shader1 = "abcd1234"; |
+ std::string shader2 = "abcda sda b1~#4 bbbbb1234"; |
+ varyings_.push_back("a"); |
+ cache_->SaySuccessfullyCached(shader1, shader2, NULL, varyings_, |
+ GL_INTERLEAVED_ATTRIBS); |
+ |
+ EXPECT_EQ(ProgramCache::LINK_UNKNOWN, |
+ cache_->GetLinkedProgramStatus(shader1, shader2, NULL, |
+ varyings_, GL_SEPARATE_ATTRIBS)); |
+ |
+ varyings_.push_back("b"); |
EXPECT_EQ(ProgramCache::LINK_UNKNOWN, |
- cache_->GetLinkedProgramStatus(shader1, shader3, NULL)); |
+ cache_->GetLinkedProgramStatus(shader1, shader2, NULL, |
+ varyings_, GL_INTERLEAVED_ATTRIBS)); |
} |
} // namespace gles2 |