Home | History | Annotate | Download | only in src
      1 // Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 // This test evaluates the speed of using the same textures to draw repeatedly.
      6 // It uploads a series of textures initially.  On subsequent iterations, it uses
      7 // those uploaded textures to draw.
      8 
      9 #include "main.h"
     10 #include "texturetest.h"
     11 
     12 namespace glbench {
     13 
     14 class TextureReuseTest : public TextureTest {
     15  public:
     16   TextureReuseTest() {}
     17   virtual ~TextureReuseTest() {}
     18   virtual bool TestFunc(uint64_t iterations);
     19   virtual const char* Name() const { return "texture_reuse"; }
     20   virtual bool IsDrawTest() const { return true; }
     21 };
     22 
     23 bool TextureReuseTest::TestFunc(uint64_t iterations) {
     24   glGetError();
     25 
     26   glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
     27   glFlush();
     28 
     29   for (uint64_t i = 0; i < iterations; ++i) {
     30     glBindTexture(GL_TEXTURE_2D, textures_[i % kNumberOfTextures]);
     31     switch (flavor_) {
     32       case TEX_IMAGE:
     33         glTexImage2D(GL_TEXTURE_2D, 0, texel_gl_format_, width_, height_, 0,
     34                      texel_gl_format_, GL_UNSIGNED_BYTE,
     35                      pixels_[i % kNumberOfTextures].get());
     36         break;
     37       case TEX_SUBIMAGE:
     38         glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, width_, height_,
     39                         texel_gl_format_, GL_UNSIGNED_BYTE,
     40                         pixels_[i % kNumberOfTextures].get());
     41         break;
     42     }
     43 
     44     // After having uploaded |kNumberOfTextures| textures, use each of them to
     45     // draw once before uploading new textures.
     46     if ((i % kNumberOfTextures) == (kNumberOfTextures - 1)) {
     47       for (int j = 0; j < kNumberOfTextures; ++j) {
     48         glBindTexture(GL_TEXTURE_2D, textures_[j]);
     49         glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
     50       }
     51     }
     52   }
     53 
     54   return true;
     55 }
     56 
     57 TestBase* GetTextureReuseTest() {
     58   return new TextureReuseTest;
     59 }
     60 
     61 }  // namespace glbench
     62