1// Copyright 2013 The Chromium 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#include "cc/output/shader.h"
6
7#include "cc/test/test_gles2_interface.h"
8#include "cc/test/test_web_graphics_context_3d.h"
9#include "testing/gtest/include/gtest/gtest.h"
10#include "ui/gfx/geometry/point.h"
11#include "ui/gfx/geometry/size.h"
12
13namespace cc {
14
15TEST(ShaderTest, HighpThresholds) {
16  // The test context always uses a mediump precision of 10 bits which
17  // corresponds to a native highp threshold of 2^10 = 1024
18  scoped_ptr<TestWebGraphicsContext3D> stub_context =
19    TestWebGraphicsContext3D::Create();
20  TestGLES2Interface stub_gl(stub_context.get());
21
22  int threshold_cache = 0;
23  int threshold_min;
24  gfx::Point closePoint(512, 512);
25  gfx::Size smallSize(512, 512);
26  gfx::Point farPoint(2560, 2560);
27  gfx::Size bigSize(2560, 2560);
28
29  threshold_min = 0;
30  EXPECT_EQ(TexCoordPrecisionMedium, TexCoordPrecisionRequired(
31      &stub_gl, &threshold_cache, threshold_min, closePoint));
32  EXPECT_EQ(TexCoordPrecisionMedium, TexCoordPrecisionRequired(
33      &stub_gl, &threshold_cache, threshold_min, smallSize));
34  EXPECT_EQ(TexCoordPrecisionHigh, TexCoordPrecisionRequired(
35      &stub_gl, &threshold_cache, threshold_min, farPoint));
36  EXPECT_EQ(TexCoordPrecisionHigh, TexCoordPrecisionRequired(
37      &stub_gl, &threshold_cache, threshold_min, bigSize));
38
39  threshold_min = 3000;
40  EXPECT_EQ(TexCoordPrecisionMedium, TexCoordPrecisionRequired(
41      &stub_gl, &threshold_cache, threshold_min, closePoint));
42  EXPECT_EQ(TexCoordPrecisionMedium, TexCoordPrecisionRequired(
43      &stub_gl, &threshold_cache, threshold_min, smallSize));
44  EXPECT_EQ(TexCoordPrecisionMedium, TexCoordPrecisionRequired(
45      &stub_gl, &threshold_cache, threshold_min, farPoint));
46  EXPECT_EQ(TexCoordPrecisionMedium, TexCoordPrecisionRequired(
47      &stub_gl, &threshold_cache, threshold_min, bigSize));
48}
49
50}  // namespace cc
51