| Index: client/deps/glbench/src/attributefetchtest.cc
|
| diff --git a/client/deps/glbench/src/attributefetchtest.cc b/client/deps/glbench/src/attributefetchtest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..2cc25ce58c94d64ef719b40e8989ae27eb8afed4
|
| --- /dev/null
|
| +++ b/client/deps/glbench/src/attributefetchtest.cc
|
| @@ -0,0 +1,148 @@
|
| +// Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "main.h"
|
| +#include "utils.h"
|
| +#include "testbase.h"
|
| +
|
| +
|
| +namespace glbench {
|
| +
|
| +class AttributeFetchShaderTest : public DrawElementsTestFunc {
|
| + public:
|
| + AttributeFetchShaderTest() {}
|
| + virtual ~AttributeFetchShaderTest() {}
|
| + virtual bool Run();
|
| +
|
| + private:
|
| + DISALLOW_COPY_AND_ASSIGN(AttributeFetchShaderTest);
|
| +};
|
| +
|
| +
|
| +const char *simple_vertex_shader =
|
| +"attribute vec4 c1;"
|
| +"void main() {"
|
| +" gl_Position = c1;"
|
| +"}";
|
| +
|
| +const char *simple_vertex_shader_2_attr =
|
| +"attribute vec4 c1;"
|
| +"attribute vec4 c2;"
|
| +"void main() {"
|
| +" gl_Position = c1+c2;"
|
| +"}";
|
| +
|
| +const char *simple_vertex_shader_4_attr =
|
| +"attribute vec4 c1;"
|
| +"attribute vec4 c2;"
|
| +"attribute vec4 c3;"
|
| +"attribute vec4 c4;"
|
| +"void main() {"
|
| +" gl_Position = c1+c2+c3+c4;"
|
| +"}";
|
| +
|
| +const char *simple_vertex_shader_8_attr =
|
| +"attribute vec4 c1;"
|
| +"attribute vec4 c2;"
|
| +"attribute vec4 c3;"
|
| +"attribute vec4 c4;"
|
| +"attribute vec4 c5;"
|
| +"attribute vec4 c6;"
|
| +"attribute vec4 c7;"
|
| +"attribute vec4 c8;"
|
| +"void main() {"
|
| +" gl_Position = c1+c2+c3+c4+c5+c6+c7+c8;"
|
| +"}";
|
| +
|
| +const char *simple_fragment_shader =
|
| +"void main() {"
|
| +" gl_FragColor = vec4(0.5);"
|
| +"}";
|
| +
|
| +GLuint AttributeFetchShaderProgram(int attribute_count,
|
| + GLuint vertex_buffers[]) {
|
| + const char *vertex_shader = NULL;
|
| + switch (attribute_count) {
|
| + case 1: vertex_shader = simple_vertex_shader; break;
|
| + case 2: vertex_shader = simple_vertex_shader_2_attr; break;
|
| + case 4: vertex_shader = simple_vertex_shader_4_attr; break;
|
| + case 8: vertex_shader = simple_vertex_shader_8_attr; break;
|
| + default: return 0;
|
| + }
|
| + GLuint program =
|
| + InitShaderProgram(vertex_shader, simple_fragment_shader);
|
| +
|
| + for (int i = 0; i < attribute_count; i++) {
|
| + char attribute[] = "c_";
|
| + attribute[1] = '1' + i;
|
| + int attribute_index = glGetAttribLocation(program, attribute);
|
| + glBindBuffer(GL_ARRAY_BUFFER, vertex_buffers[i]);
|
| + glVertexAttribPointer(attribute_index, 2, GL_FLOAT, GL_FALSE, 0, NULL);
|
| + glEnableVertexAttribArray(attribute_index);
|
| + }
|
| +
|
| + return program;
|
| +}
|
| +
|
| +bool AttributeFetchShaderTest::Run() {
|
| + GLint width = 64;
|
| + GLint height = 64;
|
| +
|
| + glViewport(-g_width, -g_height, g_width*2, g_height*2);
|
| +
|
| + GLfloat *vertices = NULL;
|
| + GLsizeiptr vertex_buffer_size = 0;
|
| + CreateLattice(&vertices, &vertex_buffer_size, 1.f / g_width, 1.f / g_height,
|
| + width, height);
|
| + GLuint vertex_buffer = SetupVBO(GL_ARRAY_BUFFER,
|
| + vertex_buffer_size, vertices);
|
| +
|
| + GLuint *indices = NULL;
|
| + GLuint index_buffer = 0;
|
| + GLsizeiptr index_buffer_size = 0;
|
| +
|
| + // Everything will be back-face culled.
|
| + count_ = CreateMesh(&indices, &index_buffer_size, width, height, 0);
|
| + index_buffer = SetupVBO(GL_ELEMENT_ARRAY_BUFFER,
|
| + index_buffer_size, indices);
|
| +
|
| + glEnable(GL_CULL_FACE);
|
| +
|
| + GLuint vertex_buffers[8];
|
| + for (GLuint i = 0; i < sizeof(vertex_buffers)/sizeof(vertex_buffers[0]); i++)
|
| + vertex_buffers[i] = vertex_buffer;
|
| +
|
| + GLuint program = AttributeFetchShaderProgram(1, vertex_buffers);
|
| + RunTest(this,
|
| + "mvtx_sec_attribute_fetch_shader", count_, true);
|
| + glDeleteProgram(program);
|
| +
|
| + program = AttributeFetchShaderProgram(2, vertex_buffers);
|
| + RunTest(this,
|
| + "mvtx_sec_attribute_fetch_shader_2_attr", count_, true);
|
| + glDeleteProgram(program);
|
| +
|
| + program = AttributeFetchShaderProgram(4, vertex_buffers);
|
| + RunTest(this,
|
| + "mvtx_sec_attribute_fetch_shader_4_attr", count_, true);
|
| + glDeleteProgram(program);
|
| +
|
| + program = AttributeFetchShaderProgram(8, vertex_buffers);
|
| + RunTest(this,
|
| + "mvtx_sec_attribute_fetch_shader_8_attr", count_, true);
|
| + glDeleteProgram(program);
|
| +
|
| + glDeleteBuffers(1, &index_buffer);
|
| + delete[] indices;
|
| +
|
| + glDeleteBuffers(1, &vertex_buffer);
|
| + delete[] vertices;
|
| + return true;
|
| +}
|
| +
|
| +TestBase* GetAttributeFetchShaderTest() {
|
| + return new AttributeFetchShaderTest();
|
| +}
|
| +
|
| +} // namespace glbench
|
|
|