xref: /aosp_15_r20/external/angle/samples/tex_redef_microbench/TexRedefMicroBench.cpp (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1*8975f5c5SAndroid Build Coastguard Worker //
2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2014 The ANGLE Project Authors. All rights reserved.
3*8975f5c5SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
4*8975f5c5SAndroid Build Coastguard Worker // found in the LICENSE file.
5*8975f5c5SAndroid Build Coastguard Worker //
6*8975f5c5SAndroid Build Coastguard Worker 
7*8975f5c5SAndroid Build Coastguard Worker //            Based on Hello_Triangle.c from
8*8975f5c5SAndroid Build Coastguard Worker // Book:      OpenGL(R) ES 2.0 Programming Guide
9*8975f5c5SAndroid Build Coastguard Worker // Authors:   Aaftab Munshi, Dan Ginsburg, Dave Shreiner
10*8975f5c5SAndroid Build Coastguard Worker // ISBN-10:   0321502795
11*8975f5c5SAndroid Build Coastguard Worker // ISBN-13:   9780321502797
12*8975f5c5SAndroid Build Coastguard Worker // Publisher: Addison-Wesley Professional
13*8975f5c5SAndroid Build Coastguard Worker // URLs:      http://safari.informit.com/9780321563835
14*8975f5c5SAndroid Build Coastguard Worker //            http://www.opengles-book.com
15*8975f5c5SAndroid Build Coastguard Worker 
16*8975f5c5SAndroid Build Coastguard Worker #include "SampleApplication.h"
17*8975f5c5SAndroid Build Coastguard Worker 
18*8975f5c5SAndroid Build Coastguard Worker #include "texture_utils.h"
19*8975f5c5SAndroid Build Coastguard Worker #include "util/shader_utils.h"
20*8975f5c5SAndroid Build Coastguard Worker 
21*8975f5c5SAndroid Build Coastguard Worker #include <cstring>
22*8975f5c5SAndroid Build Coastguard Worker #include <iostream>
23*8975f5c5SAndroid Build Coastguard Worker 
24*8975f5c5SAndroid Build Coastguard Worker // This sample demonstrates the differences in rendering efficiency when
25*8975f5c5SAndroid Build Coastguard Worker // drawing with already-created textures whose dimensions have been altered
26*8975f5c5SAndroid Build Coastguard Worker // versus drawing with newly created textures.
27*8975f5c5SAndroid Build Coastguard Worker //
28*8975f5c5SAndroid Build Coastguard Worker // In order to support GL's per-level texture creation semantics over the
29*8975f5c5SAndroid Build Coastguard Worker // D3D API in particular, which requires textures' full mip chains to be
30*8975f5c5SAndroid Build Coastguard Worker // created at texture object creation time, ANGLE maintains copies of the
31*8975f5c5SAndroid Build Coastguard Worker // constituent texture images in system memory until the texture is used in
32*8975f5c5SAndroid Build Coastguard Worker // a draw call, at which time, if the texture passes GL's mip completeness
33*8975f5c5SAndroid Build Coastguard Worker // rules, the D3D texture is created and the contents of the texture are
34*8975f5c5SAndroid Build Coastguard Worker // uploaded. Once the texture is created, redefinition of the dimensions or
35*8975f5c5SAndroid Build Coastguard Worker // format of the texture is costly-- a new D3D texture needs to be created,
36*8975f5c5SAndroid Build Coastguard Worker // and ANGLE may need to read the contents back into system memory.
37*8975f5c5SAndroid Build Coastguard Worker //
38*8975f5c5SAndroid Build Coastguard Worker // Creating an entirely new texture also requires that a new D3D texture be
39*8975f5c5SAndroid Build Coastguard Worker // created, but any overhead associated with tracking the already-present
40*8975f5c5SAndroid Build Coastguard Worker // texture images is eliminated, as it's a novel texture. This sample
41*8975f5c5SAndroid Build Coastguard Worker // demonstrates the contrast in draw call time between these two situations.
42*8975f5c5SAndroid Build Coastguard Worker //
43*8975f5c5SAndroid Build Coastguard Worker // The resizing & creation of a new texture is delayed until several frames
44*8975f5c5SAndroid Build Coastguard Worker // after startup, to eliminate draw time differences caused by caching of
45*8975f5c5SAndroid Build Coastguard Worker // rendering state subsequent to the first frame.
46*8975f5c5SAndroid Build Coastguard Worker 
47*8975f5c5SAndroid Build Coastguard Worker class TexRedefBenchSample : public SampleApplication
48*8975f5c5SAndroid Build Coastguard Worker {
49*8975f5c5SAndroid Build Coastguard Worker   public:
TexRedefBenchSample(int argc,char ** argv)50*8975f5c5SAndroid Build Coastguard Worker     TexRedefBenchSample(int argc, char **argv)
51*8975f5c5SAndroid Build Coastguard Worker         : SampleApplication("Microbench", argc, argv, ClientType::ES2, 1280, 1280),
52*8975f5c5SAndroid Build Coastguard Worker           mPixelsResize(nullptr),
53*8975f5c5SAndroid Build Coastguard Worker           mPixelsNewTex(nullptr),
54*8975f5c5SAndroid Build Coastguard Worker           mTimeFrame(false),
55*8975f5c5SAndroid Build Coastguard Worker           mFrameCount(0)
56*8975f5c5SAndroid Build Coastguard Worker     {}
57*8975f5c5SAndroid Build Coastguard Worker 
defineSquareTexture2D(GLuint texId,GLsizei baseDimension,GLenum format,GLenum type,void * data)58*8975f5c5SAndroid Build Coastguard Worker     void defineSquareTexture2D(GLuint texId,
59*8975f5c5SAndroid Build Coastguard Worker                                GLsizei baseDimension,
60*8975f5c5SAndroid Build Coastguard Worker                                GLenum format,
61*8975f5c5SAndroid Build Coastguard Worker                                GLenum type,
62*8975f5c5SAndroid Build Coastguard Worker                                void *data)
63*8975f5c5SAndroid Build Coastguard Worker     {
64*8975f5c5SAndroid Build Coastguard Worker         glBindTexture(GL_TEXTURE_2D, texId);
65*8975f5c5SAndroid Build Coastguard Worker         GLsizei curDim = baseDimension;
66*8975f5c5SAndroid Build Coastguard Worker         GLuint level   = 0;
67*8975f5c5SAndroid Build Coastguard Worker 
68*8975f5c5SAndroid Build Coastguard Worker         while (curDim >= 1)
69*8975f5c5SAndroid Build Coastguard Worker         {
70*8975f5c5SAndroid Build Coastguard Worker             glTexImage2D(GL_TEXTURE_2D, level, format, curDim, curDim, 0, format, type, data);
71*8975f5c5SAndroid Build Coastguard Worker             curDim /= 2;
72*8975f5c5SAndroid Build Coastguard Worker             level++;
73*8975f5c5SAndroid Build Coastguard Worker         }
74*8975f5c5SAndroid Build Coastguard Worker     }
75*8975f5c5SAndroid Build Coastguard Worker 
createPixelData()76*8975f5c5SAndroid Build Coastguard Worker     void createPixelData()
77*8975f5c5SAndroid Build Coastguard Worker     {
78*8975f5c5SAndroid Build Coastguard Worker         mPixelsResize     = new GLubyte[512 * 512 * 4];
79*8975f5c5SAndroid Build Coastguard Worker         mPixelsNewTex     = new GLubyte[512 * 512 * 4];
80*8975f5c5SAndroid Build Coastguard Worker         GLubyte *pixPtr0  = mPixelsResize;
81*8975f5c5SAndroid Build Coastguard Worker         GLubyte *pixPtr1  = mPixelsNewTex;
82*8975f5c5SAndroid Build Coastguard Worker         GLubyte zeroPix[] = {0, 192, 192, 255};
83*8975f5c5SAndroid Build Coastguard Worker         GLubyte onePix[]  = {192, 0, 0, 255};
84*8975f5c5SAndroid Build Coastguard Worker         for (int i = 0; i < 512 * 512; ++i)
85*8975f5c5SAndroid Build Coastguard Worker         {
86*8975f5c5SAndroid Build Coastguard Worker             memcpy(pixPtr0, zeroPix, 4 * sizeof(GLubyte));
87*8975f5c5SAndroid Build Coastguard Worker             memcpy(pixPtr1, onePix, 4 * sizeof(GLubyte));
88*8975f5c5SAndroid Build Coastguard Worker             pixPtr0 += 4;
89*8975f5c5SAndroid Build Coastguard Worker             pixPtr1 += 4;
90*8975f5c5SAndroid Build Coastguard Worker         }
91*8975f5c5SAndroid Build Coastguard Worker     }
92*8975f5c5SAndroid Build Coastguard Worker 
initialize()93*8975f5c5SAndroid Build Coastguard Worker     bool initialize() override
94*8975f5c5SAndroid Build Coastguard Worker     {
95*8975f5c5SAndroid Build Coastguard Worker         constexpr char kVS[] = R"(attribute vec4 a_position;
96*8975f5c5SAndroid Build Coastguard Worker attribute vec2 a_texCoord;
97*8975f5c5SAndroid Build Coastguard Worker varying vec2 v_texCoord;
98*8975f5c5SAndroid Build Coastguard Worker void main()
99*8975f5c5SAndroid Build Coastguard Worker {
100*8975f5c5SAndroid Build Coastguard Worker     gl_Position = a_position;
101*8975f5c5SAndroid Build Coastguard Worker     v_texCoord = a_texCoord;
102*8975f5c5SAndroid Build Coastguard Worker })";
103*8975f5c5SAndroid Build Coastguard Worker 
104*8975f5c5SAndroid Build Coastguard Worker         constexpr char kFS[] = R"(precision mediump float;
105*8975f5c5SAndroid Build Coastguard Worker varying vec2 v_texCoord;
106*8975f5c5SAndroid Build Coastguard Worker uniform sampler2D s_texture;
107*8975f5c5SAndroid Build Coastguard Worker void main()
108*8975f5c5SAndroid Build Coastguard Worker {
109*8975f5c5SAndroid Build Coastguard Worker     gl_FragColor = texture2D(s_texture, v_texCoord);
110*8975f5c5SAndroid Build Coastguard Worker })";
111*8975f5c5SAndroid Build Coastguard Worker 
112*8975f5c5SAndroid Build Coastguard Worker         mProgram = CompileProgram(kVS, kFS);
113*8975f5c5SAndroid Build Coastguard Worker         if (!mProgram)
114*8975f5c5SAndroid Build Coastguard Worker         {
115*8975f5c5SAndroid Build Coastguard Worker             return false;
116*8975f5c5SAndroid Build Coastguard Worker         }
117*8975f5c5SAndroid Build Coastguard Worker 
118*8975f5c5SAndroid Build Coastguard Worker         // Get the attribute locations
119*8975f5c5SAndroid Build Coastguard Worker         mPositionLoc = glGetAttribLocation(mProgram, "a_position");
120*8975f5c5SAndroid Build Coastguard Worker         mTexCoordLoc = glGetAttribLocation(mProgram, "a_texCoord");
121*8975f5c5SAndroid Build Coastguard Worker 
122*8975f5c5SAndroid Build Coastguard Worker         // Get the sampler location
123*8975f5c5SAndroid Build Coastguard Worker         mSamplerLoc = glGetUniformLocation(mProgram, "s_texture");
124*8975f5c5SAndroid Build Coastguard Worker 
125*8975f5c5SAndroid Build Coastguard Worker         // Generate texture IDs, and create texture 0
126*8975f5c5SAndroid Build Coastguard Worker         glGenTextures(3, mTextureIds);
127*8975f5c5SAndroid Build Coastguard Worker 
128*8975f5c5SAndroid Build Coastguard Worker         createPixelData();
129*8975f5c5SAndroid Build Coastguard Worker         defineSquareTexture2D(mTextureIds[0], 256, GL_RGBA, GL_UNSIGNED_BYTE, mPixelsResize);
130*8975f5c5SAndroid Build Coastguard Worker 
131*8975f5c5SAndroid Build Coastguard Worker         glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
132*8975f5c5SAndroid Build Coastguard Worker 
133*8975f5c5SAndroid Build Coastguard Worker         return true;
134*8975f5c5SAndroid Build Coastguard Worker     }
135*8975f5c5SAndroid Build Coastguard Worker 
destroy()136*8975f5c5SAndroid Build Coastguard Worker     void destroy() override
137*8975f5c5SAndroid Build Coastguard Worker     {
138*8975f5c5SAndroid Build Coastguard Worker         glDeleteProgram(mProgram);
139*8975f5c5SAndroid Build Coastguard Worker 
140*8975f5c5SAndroid Build Coastguard Worker         delete[] mPixelsResize;
141*8975f5c5SAndroid Build Coastguard Worker         delete[] mPixelsNewTex;
142*8975f5c5SAndroid Build Coastguard Worker     }
143*8975f5c5SAndroid Build Coastguard Worker 
draw()144*8975f5c5SAndroid Build Coastguard Worker     void draw() override
145*8975f5c5SAndroid Build Coastguard Worker     {
146*8975f5c5SAndroid Build Coastguard Worker         GLfloat vertices[] = {
147*8975f5c5SAndroid Build Coastguard Worker             -0.5f, 0.5f,  0.0f,  // Position 0
148*8975f5c5SAndroid Build Coastguard Worker             0.0f,  0.0f,         // TexCoord 0
149*8975f5c5SAndroid Build Coastguard Worker             -0.5f, -0.5f, 0.0f,  // Position 1
150*8975f5c5SAndroid Build Coastguard Worker             0.0f,  1.0f,         // TexCoord 1
151*8975f5c5SAndroid Build Coastguard Worker             0.5f,  -0.5f, 0.0f,  // Position 2
152*8975f5c5SAndroid Build Coastguard Worker             1.0f,  1.0f,         // TexCoord 2
153*8975f5c5SAndroid Build Coastguard Worker             0.5f,  0.5f,  0.0f,  // Position 3
154*8975f5c5SAndroid Build Coastguard Worker             1.0f,  0.0f          // TexCoord 3
155*8975f5c5SAndroid Build Coastguard Worker         };
156*8975f5c5SAndroid Build Coastguard Worker         GLushort indices[] = {0, 1, 2, 0, 2, 3};
157*8975f5c5SAndroid Build Coastguard Worker 
158*8975f5c5SAndroid Build Coastguard Worker         // Set the viewport
159*8975f5c5SAndroid Build Coastguard Worker         glViewport(0, 0, getWindow()->getWidth(), getWindow()->getHeight());
160*8975f5c5SAndroid Build Coastguard Worker 
161*8975f5c5SAndroid Build Coastguard Worker         // Clear the color buffer
162*8975f5c5SAndroid Build Coastguard Worker         glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
163*8975f5c5SAndroid Build Coastguard Worker 
164*8975f5c5SAndroid Build Coastguard Worker         // Use the program object
165*8975f5c5SAndroid Build Coastguard Worker         glUseProgram(mProgram);
166*8975f5c5SAndroid Build Coastguard Worker 
167*8975f5c5SAndroid Build Coastguard Worker         // Load the vertex position
168*8975f5c5SAndroid Build Coastguard Worker         glVertexAttribPointer(mPositionLoc, 3, GL_FLOAT, GL_FALSE, 5 * sizeof(GLfloat), vertices);
169*8975f5c5SAndroid Build Coastguard Worker         // Load the texture coordinate
170*8975f5c5SAndroid Build Coastguard Worker         glVertexAttribPointer(mTexCoordLoc, 2, GL_FLOAT, GL_FALSE, 5 * sizeof(GLfloat),
171*8975f5c5SAndroid Build Coastguard Worker                               vertices + 3);
172*8975f5c5SAndroid Build Coastguard Worker 
173*8975f5c5SAndroid Build Coastguard Worker         glEnableVertexAttribArray(mPositionLoc);
174*8975f5c5SAndroid Build Coastguard Worker         glEnableVertexAttribArray(mTexCoordLoc);
175*8975f5c5SAndroid Build Coastguard Worker 
176*8975f5c5SAndroid Build Coastguard Worker         // Bind the texture
177*8975f5c5SAndroid Build Coastguard Worker         glActiveTexture(GL_TEXTURE0);
178*8975f5c5SAndroid Build Coastguard Worker         glBindTexture(GL_TEXTURE_2D, mTextureIds[0]);
179*8975f5c5SAndroid Build Coastguard Worker 
180*8975f5c5SAndroid Build Coastguard Worker         // Set the texture sampler to texture unit to 0
181*8975f5c5SAndroid Build Coastguard Worker         glUniform1i(mSamplerLoc, 0);
182*8975f5c5SAndroid Build Coastguard Worker 
183*8975f5c5SAndroid Build Coastguard Worker         // We delay timing of texture resize/creation until after the first frame, as
184*8975f5c5SAndroid Build Coastguard Worker         // caching optimizations will reduce draw time for subsequent frames for reasons
185*8975f5c5SAndroid Build Coastguard Worker         // unreleated to texture creation. mTimeFrame is set to true on the fifth frame.
186*8975f5c5SAndroid Build Coastguard Worker         if (mTimeFrame)
187*8975f5c5SAndroid Build Coastguard Worker         {
188*8975f5c5SAndroid Build Coastguard Worker             mOrigTimer.start();
189*8975f5c5SAndroid Build Coastguard Worker         }
190*8975f5c5SAndroid Build Coastguard Worker 
191*8975f5c5SAndroid Build Coastguard Worker         glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, indices);
192*8975f5c5SAndroid Build Coastguard Worker 
193*8975f5c5SAndroid Build Coastguard Worker         if (mTimeFrame)
194*8975f5c5SAndroid Build Coastguard Worker         {
195*8975f5c5SAndroid Build Coastguard Worker             mOrigTimer.stop();
196*8975f5c5SAndroid Build Coastguard Worker             // This timer indicates draw time for an already-created texture resident on the GPU,
197*8975f5c5SAndroid Build Coastguard Worker             // which needs no updates. It will be faster than the other draws.
198*8975f5c5SAndroid Build Coastguard Worker             std::cout << "Original texture draw: " << mOrigTimer.getElapsedWallClockTime() * 1000
199*8975f5c5SAndroid Build Coastguard Worker                       << "msec" << std::endl;
200*8975f5c5SAndroid Build Coastguard Worker 
201*8975f5c5SAndroid Build Coastguard Worker             glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
202*8975f5c5SAndroid Build Coastguard Worker 
203*8975f5c5SAndroid Build Coastguard Worker             // Now, change the texture dimensions of the original texture
204*8975f5c5SAndroid Build Coastguard Worker             mResizeDefineTimer.start();
205*8975f5c5SAndroid Build Coastguard Worker             defineSquareTexture2D(mTextureIds[0], 512, GL_RGBA, GL_UNSIGNED_BYTE, mPixelsResize);
206*8975f5c5SAndroid Build Coastguard Worker             mResizeDefineTimer.stop();
207*8975f5c5SAndroid Build Coastguard Worker 
208*8975f5c5SAndroid Build Coastguard Worker             mResizeDrawTimer.start();
209*8975f5c5SAndroid Build Coastguard Worker             glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, indices);
210*8975f5c5SAndroid Build Coastguard Worker             mResizeDrawTimer.stop();
211*8975f5c5SAndroid Build Coastguard Worker             // This timer indicates draw time for a texture which has already been used in a draw,
212*8975f5c5SAndroid Build Coastguard Worker             // causing the underlying resource to be allocated, and then resized, requiring resource
213*8975f5c5SAndroid Build Coastguard Worker             // reallocation and related overhead.
214*8975f5c5SAndroid Build Coastguard Worker             std::cout << "Resized texture definition: "
215*8975f5c5SAndroid Build Coastguard Worker                       << mResizeDefineTimer.getElapsedWallClockTime() * 1000 << "msec" << std::endl;
216*8975f5c5SAndroid Build Coastguard Worker             std::cout << "Resized texture draw: "
217*8975f5c5SAndroid Build Coastguard Worker                       << mResizeDrawTimer.getElapsedWallClockTime() * 1000 << "msec" << std::endl;
218*8975f5c5SAndroid Build Coastguard Worker 
219*8975f5c5SAndroid Build Coastguard Worker             glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
220*8975f5c5SAndroid Build Coastguard Worker 
221*8975f5c5SAndroid Build Coastguard Worker             // Create texure at same dimensions we resized previous texture to
222*8975f5c5SAndroid Build Coastguard Worker             mNewTexDefineTimer.start();
223*8975f5c5SAndroid Build Coastguard Worker             defineSquareTexture2D(mTextureIds[1], 512, GL_RGBA, GL_UNSIGNED_BYTE, mPixelsNewTex);
224*8975f5c5SAndroid Build Coastguard Worker             mNewTexDefineTimer.stop();
225*8975f5c5SAndroid Build Coastguard Worker 
226*8975f5c5SAndroid Build Coastguard Worker             mNewTexDrawTimer.start();
227*8975f5c5SAndroid Build Coastguard Worker             glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, indices);
228*8975f5c5SAndroid Build Coastguard Worker             mNewTexDrawTimer.stop();
229*8975f5c5SAndroid Build Coastguard Worker             // This timer indicates draw time for a texture newly created this frame. The underlying
230*8975f5c5SAndroid Build Coastguard Worker             // resource will need to be created, but because it has not previously been used, there
231*8975f5c5SAndroid Build Coastguard Worker             // is no already-resident texture object to manage. This draw is expected to be faster
232*8975f5c5SAndroid Build Coastguard Worker             // than the resized texture draw.
233*8975f5c5SAndroid Build Coastguard Worker             std::cout << "Newly created texture definition: "
234*8975f5c5SAndroid Build Coastguard Worker                       << mNewTexDefineTimer.getElapsedWallClockTime() * 1000 << "msec" << std::endl;
235*8975f5c5SAndroid Build Coastguard Worker             std::cout << "Newly created texture draw: "
236*8975f5c5SAndroid Build Coastguard Worker                       << mNewTexDrawTimer.getElapsedWallClockTime() * 1000 << "msec" << std::endl;
237*8975f5c5SAndroid Build Coastguard Worker         }
238*8975f5c5SAndroid Build Coastguard Worker 
239*8975f5c5SAndroid Build Coastguard Worker         if (mFrameCount == 5)
240*8975f5c5SAndroid Build Coastguard Worker             mTimeFrame = true;
241*8975f5c5SAndroid Build Coastguard Worker         else
242*8975f5c5SAndroid Build Coastguard Worker             mTimeFrame = false;
243*8975f5c5SAndroid Build Coastguard Worker 
244*8975f5c5SAndroid Build Coastguard Worker         mFrameCount++;
245*8975f5c5SAndroid Build Coastguard Worker     }
246*8975f5c5SAndroid Build Coastguard Worker 
247*8975f5c5SAndroid Build Coastguard Worker   private:
248*8975f5c5SAndroid Build Coastguard Worker     // Handle to a program object
249*8975f5c5SAndroid Build Coastguard Worker     GLuint mProgram;
250*8975f5c5SAndroid Build Coastguard Worker 
251*8975f5c5SAndroid Build Coastguard Worker     // Attribute locations
252*8975f5c5SAndroid Build Coastguard Worker     GLint mPositionLoc;
253*8975f5c5SAndroid Build Coastguard Worker     GLint mTexCoordLoc;
254*8975f5c5SAndroid Build Coastguard Worker 
255*8975f5c5SAndroid Build Coastguard Worker     // Sampler location
256*8975f5c5SAndroid Build Coastguard Worker     GLint mSamplerLoc;
257*8975f5c5SAndroid Build Coastguard Worker 
258*8975f5c5SAndroid Build Coastguard Worker     // Texture handle
259*8975f5c5SAndroid Build Coastguard Worker     GLuint mTextureIds[2];  // 0: texture created, then resized
260*8975f5c5SAndroid Build Coastguard Worker                             // 1: texture newly created with TexImage
261*8975f5c5SAndroid Build Coastguard Worker 
262*8975f5c5SAndroid Build Coastguard Worker     // Texture pixel data
263*8975f5c5SAndroid Build Coastguard Worker     GLubyte *mPixelsResize;
264*8975f5c5SAndroid Build Coastguard Worker     GLubyte *mPixelsNewTex;
265*8975f5c5SAndroid Build Coastguard Worker 
266*8975f5c5SAndroid Build Coastguard Worker     Timer mOrigTimer;
267*8975f5c5SAndroid Build Coastguard Worker     Timer mResizeDrawTimer;
268*8975f5c5SAndroid Build Coastguard Worker     Timer mResizeDefineTimer;
269*8975f5c5SAndroid Build Coastguard Worker     Timer mNewTexDrawTimer;
270*8975f5c5SAndroid Build Coastguard Worker     Timer mNewTexDefineTimer;
271*8975f5c5SAndroid Build Coastguard Worker     bool mTimeFrame;
272*8975f5c5SAndroid Build Coastguard Worker     unsigned int mFrameCount;
273*8975f5c5SAndroid Build Coastguard Worker };
274*8975f5c5SAndroid Build Coastguard Worker 
main(int argc,char ** argv)275*8975f5c5SAndroid Build Coastguard Worker int main(int argc, char **argv)
276*8975f5c5SAndroid Build Coastguard Worker {
277*8975f5c5SAndroid Build Coastguard Worker     TexRedefBenchSample app(argc, argv);
278*8975f5c5SAndroid Build Coastguard Worker     return app.run();
279*8975f5c5SAndroid Build Coastguard Worker }
280