mirror of
https://github.com/roytam1/palemoon27.git
synced 2026-05-26 05:37:11 +00:00
157a125630
- Bug 1144778 - Send an HTTP Date request header with telemetry pings. r=dexter (b630ff3123) - Bug 1268581 - Reduce Telemetry initialization delay in tests. r=dexter (08ea2597f4) - Bug 1205898 - Making TelemetryStopwatch.jsm handle keyed histograms. r=gfritzsche (2e1d793bc0) - Bug 1262386 - Move Scheduler shutdown() next to init(). r=dexter (9aa12c0859) - Bug 1162538 - Add test coverage for Telemetry archive probes. r=gfritzsche (f7f9095e82) - Bug 1186955 - Add test coverage. r=gfritzsche (cc76ba4fda) - Bug 1262386 - Trigger Telemetry scheduler tick after waking up from sleep. r=dexter (27b03357bf) - Bug 1178005 - Fix unintended octal literals (00 => 0). r=Mossop (dd738033b1) - Bug 1222054 - Fix broken tests. r=gfritzsche (a6c6fa3445) - Bug 1161515 - Reset UUID generator with fakeGenerateUUID(). r=gfritzsche (460ed17cb5) - Bug 1209912 - Use JSON.parse instead of nsIJSON.decode in Telemetry tests. r=Dexter (7ca55a9b5c) - Bug 1245136 - Discard old-format pending Telemetry files. r=gfritzsche (57f2a19c9d) - Bug 1034138 - d. Test BackgroundHangMonitor permahangs; r=vladan (7313b143bc) - Bug 1016629 - h. Fix wrong sysinfo usage; r=trivial (9823cd5ed0) - Bug 1197612 - In test_TelemetrySendOldPings.js, set the FHR pref to the value the tests assume it has. r=gfritzsche (06a41428b2) - Bug 1136082 - test_TelemetrySendOldPings.js is missing AddonManager initialization. r=froydnj (cfc700dd44) - Bug 1239480 - Make test_TelemetryReportingPolicy.js set the minimum policy version pref for the right channel. r=gfritzsche (e44841aa2a) - Bug 1230213 - test_TelemetryLog yields from a non generator function. r=dexter (34f28fb0b1) - Bug 1226178 - Fix deprecated octal literals warnings in Telemetry tests. r=gfritzsche (88208f0f2e) - Bug 1174111 - |test_sendTimeout| in test_TelemetryControllerShutdown.js must not wait on ping submission. r=gfritzsche (3b010e9743) - Bug 1120379 - Add tests for the deletion ping. r=gfritzsche (61e6fbd8a1) - Bug 1178262 - Add test-coverage for sending persisted deletion pings. r=gfritzsche (657fbbbcc2) - Bug 1174674 - Add test coverage. r=gfritzsche (426212e94c) - Bug 1167456 - Add test coverage. r=gfritzsche (4842d38e2e) - Bug 1198364 - Set FHR upload pref in telemetry/tests/unit/head.js to avoid test failures. r=gfritzsche (024599364e) - Bug 1149284 - Restore Telemetry tests. r=rvitillo, r=sstamm (88d4022e6b) - add esl (c459da1cd3) - Bug 1251785 - Remove remaining references to MOZILLA_XPCOMRT_API from toolkit. r=froydnj (5b5708031d) - Bug 1120379 - Add the documentation for deletion pings. r=gfritzsche (723f44f669) - Bug 1241599 - Add 'core' ping telemetry docs. r=gfritzsche (35fcc54195) - Bug 1241697 - Add docs for 'experiments' field in core ping. r=mfinkle (3c408f1a61) - Bug 1247572 - Add profileDate field to Android core ping docs. r=gfritzsche (79b1c71b53) - Bug 1249288 - Update telemetry docs to include defaultSearch. r=gfritzsche,rnewman (3807061291) - Bug 1257595 - Document that the 'core' pings profileDate field can be missing. r=mcomella (f40392cb2d) - Bug 1246816 - Add docs for profileDate. r=gfritzsche (7248d799aa) - Bug 1263761 - Update defaultSearch in core ping docs for custom search engines. r=gfritzsche (e516ecbab3) - Bug 1247982 - Lock request headers. r=mcmanus (8a5940a109) - Bug 1251332 - add PAC support for reversed ranges; r=bagder (7ac8fd97cb) - Bug 1178337 - Part 1: Supports all referrer policies for element atrributes. r=sicking, r=Gijs, r=mcmanus (85b7421b02) - Bug 1187357 - rename referrer attribute to referrerpolicy in tests. r=hsivonen (da334bf712) - Bug 1178337 - Part 2: Update/add test cases. r=sicking. (acec860fd8) - Bug 1260766 - the comparison of OriginAttributes in nsFrameLoader::Swap* methods should consider the usercontextid attribute of the owning element, r=smaug (82f8895bec) - bits of Bug 1110485 P1 (f8908eb35f) - Bug 1195968 - Check how CanvasFilterChainObserver accesses the CanvasRenderingContext2D. r=mstange (eecc12329b) - Bug 1260960 - Check skiaGL is enabled before calling skiaGLTex(), r=snorp (82c069fcc9) - align test stuff (c0ccc11ed9) - Bug 1245256 - GMP Plugins now installed in flat manner to accomodate widevine. r=spohl (ae0eb69979) - Bug 1245649: Turn on use-isnan, no-unexpected-multiline (0633b3470f) - Bug 1079665 - [e10s] Findbar focusContent doesn't work when a link was found. r=enndeakin (b349e62d5a) - Bug 1174291 - Fix ctrl-return for e10s findbar. r=evilpie (6f0bf0b149) - Bug 1174289 - Remove fake focus-ring after e10s findbar is closed. r=evilpie (302ffe7559) - Bug 1079665 - follow up, remove accidental line included from different patch. r=me (0904fe927c) - Bug 1260208 - part 1 - use C I/O facilities in TestWebGLElementArrayCache instead of C++ ones; r=BenWa The libc++ included with the Android NDK does not seem to work correctly with std::cerr; writing to it (or to std::cout, as confirmed by tests) causes the process to hang indefinitely, causing test failures. Using fprintf and stderr, however, seems to work correctly. (4279c2d09d) - Bug 1260208 - part 5 - add libc++ license to about:license when using it on Android; r=gerv,nalexander (4bcf23794a) - Bug 1260208 - part 0 - correctly compare EHTable when sorting; r=froydnj operator< for EHTable compares the LHS start PC with the RHS *end* PC. Because the ranges are non-overlapping, this works fine for two distinct EHTables. However, the comparison doesn't work if LHS and RHS refer to the same EHTable; in that case operator< returns true, even though it should return false because the two operands are identical. (dc2af36cec) - Bug 1254908 - ./mach bootstrap doesn't work on CentOS/Fedora when it attempts to upgrade Mercurial. r=gps (d288b314ec) - Bug 1239413. Clarify comment about the context flags. (c2b01ef6d1) - Bug 1146875 - Fix the leak-gauge.html broken and add a encoding declaration. r=dbaron (8df2510774) - Bug 1132499 - part 1 - convert nsTextEditorState::mValue to use Maybe instead of heap allocation; r=ehsan (2644faebbb) - Bug 1132499 - part 2 - convert nsTextEditorState::mValue to be an nsString; r=ehsan (6e0df4d1dc) - Bug 409885 - Use SetHostPort in nsHTMLDocument::SetDomain. r=bz (2d289a79c5) - Bug 1269475 - Fix uninitialized variable warning. r=jdm (881fa29803) - Bug 1263935 - Expose native version of mapURIToAddonId via amIAddonPathService. r=mossop (04da9fe703) - missing bit of Bug 1255040 Add webidl for install/uninstall (63b5489b3d) - Bug 1234974 - Handle null GetOwner() in |BluetoothAdapter::IsBluetoothCertifiedApp|, r=shuang (e4dde47d7f) - Bug 1241117 - Fix mAppUuid access before assign in BluetoothGatt::Connect. r=joliu (3920535f2a) - Bug 1238424 - Fix a missing header in Bluetooth module. r=brsun (438fd74375) - Bug 1267958: Only complain for negative size, not merely zero. r=jrmuizel (194bd2a754) - Bug 1320621 - Make sure --enable-system-hunspell picks up system headers. r=glandium (125c4ea215) - Bug 1266430: Support offsets in DrawTargetD2D1::CopySurface when using PartialUploading. r=jrmuizel (de8630b117) - Bug 1267363. Disable hinting on osx fonts only if we have expclity grayscale AA. r=mstange (c4c32fd7cc) - Bug 1134549 - Switch FlattenBezier from floats to doubles. r=bas (5753ab16a3) - Bug 1240437 part 2: Follow-up to fix implicit constrcutor static analysis failure. r=me (525d9d9a9f) - Bug 1256678 - Backout diagnostic patch rev 39c895b67af2 - r=me (f63698de77) - Bug 1256678 - Account for truncated font names in ScaledFontWin::GetFontFileData() - r=jfkthame (a6930e0a33) - Bug 1256678 - Re-add nightly-only crash if ScaledFontWin::GetFontFileData fails to find a matching TrueType collection font - r=jfkthame (8bec2d43a2) - Bug 1260350 - GFX: 2D: Use ConvolveHorizontally_LS3. r=jrmuizel (9d2f372593) - Bug 1260112 - GFX: 2D: Fix unaligned access in ConvolveVertically/Horizontally_LS3. r=huangwenjun06 (43ba8f7b05) - Bug 1260885 - Make SurfaceFormat::R5G6B5_UINT16 properly round-trip through SourceSurfaceCairo. r=lsalzman (bc8f0c0876) - Bug 1262415 - make Accessible to keep weak pointers to parent and children, r=yzen (c0b987fe10) - Bug 1267271 - skip empty surfaces in DrawTargetSkia::DrawSurfaceWithShadow. r=mchang (fd488c918a) - Bug 1249600. Lookup font and font family from font face when requesting SkTypeface. r=bas (0281313c33) - Bug 1268096. Sync the D3D11 rasterizer state if pointDrawMode or multisample changes. (25b2af8b26) - Bug 1203132 - Add an SVG for the B2G flow of touch events. r=botond (2ce3b0ddc4) - Bug 1180322. Add a document describing the history of layers (b3351dbba3) - Bug 1235223. Update history document. (212d356bd0) - Bug 1235223 - Fix typos in layers history document. (f19a5802d8) - Bug 1235223 - Fix another typo in the layers history document. (9663fe5447) - Bug 1265112 - Add support for NV_texture_barrier to GLContext. r=jrmuizel (f1f5fb1a3a) - Bug 1240730 - Initialize all GLLibraryEGL symbols in the ctor. r=mattwoodrow (dae8955458) - Bug 1240730 - Initialize all GLXLibrary members in the ctor. r=mattwoodrow (8218ed6fd9) - bug 1250485 - make the ctor for GLXLibrary constexpr r=jrmuizel (a571491f0a) - mitor spacing (0083550ab2) - Bug 1256492 - Cast to proper width to avoid C4312 on VS2015; r=jrmuizel (1bb2ed20d3) - Bug 1266878 - Fix off-by-one error in ParamTraits<StereoMode> - r=nical (f467d496b8) - Bug 1258758 - rename GetEffectiveClipRect to GetLocalClipRect. r=kats (897798948f) - Bug 1249936 - add a LayerComposite::GetShadowTransform method & simplify Layer::GetLocalTransform. r=botond (fe492a1327) - Bug 1269032 - Add support for user multipliers to pan gesture inputs. r=mstange (ea7698dca2) - Bug 1265510 - Add some scroll-snapping logging to APZC. r=botond (6f2369163a) - Bug 1268523 - Avoid leaking tasks when they are posted to a destroyed APZC instance. r=botond (70e1e63b7b) - Bug 1265510 - Ensure that new input blocks still allow APZCs with interrupted animations to scroll-snap. r=botond (01341b554b) - Bug 1269068 - Zero out the axis velocity once the wheel scroll animation is terminating. r=botond (9a9f384485) - Bug 1246056 - Ensure that the MockContentController's timestamp is always >= GetStartupTime(). r=botond (4fe53e1f24) - Bug 1256341 - Add a gtest to catch scenarios where a tap timeout is interrupted by a non-touch block. r=botond (21a15f5a5a) - Bug 1266833 - When the scroll position is clamped during a frame reconstruction, send a scroll offset update to APZ. r=tnikkel (c0acd70a3d) - Bug 1268517 - Remove unused function. r=botond (534e4d9bae) - Bug 1213095 - Fix APZEventState build with logging enabled. r=botond (ac7c1e9401) - Bug 1250954 - Correct the SharedSurfaceTextureClient when forwarder changed. r=jgilbert (0a389bc0fa) - Bug 1265873 - Use gfxSharedReadLock in TextureClientPool r=nical (e3ed936a8a) - Bug 1265468 - Update the compositor pointer on all TextureSources in the list when recycling in ImageHost. r=nical (78f29244bb) - Bug 1252237 - Remove the TextureHost shmem mapping failed assert. r=milan (d0b7230dff) - Bug 1265112 - When rendering blend modes with CompositorOGL, use NV_texture_barrier (if available) to sample directly from the framebuffer. r=jrmuizel (6f3ae237a5) - Bug 1268878 - Include various of gfxFontEntry's sub-objects in memory reporting. r=njn (b960415fa8) - Bug 1268951 - Reallocate sanitized user font data into an appropriately-sized block, to reduce ongoing RAM footprint. r=jrmuizel (a26e9dd632) - Bug 1123416 - Part 1: Make topsrcdir a valid Gradle project root. r=sebastian (77b0b35fc1) - Bug 1260672: Remove 'nsAutoPtr.h' and clean up includes of Gonk diskspace watcher, r=gsvelto (99c4c35e3d) - Bug 1167535 - Fix fanotify 4g size limit. r=fabrice (c62015e454) - Bug 1167817 - Switch back to printf_stderr in GonkDiskSpaceWatcher.cpp r=dhylands (110445f628) - Bug 1260672: Use |UniquePtr| for Gonk alarms, r=gsvelto (03678b9015) - Bug 1260672: Use |UniquePtr| for Gonk sensors, r=gsvelto (545ec3fc70) - Bug 1263845. When a parent changes from auto height to non-auto height or vice versa, a percentage height non-block child needs to realize it's doing a vertical resize. r=dbaron (05db492bc8) - Bug 1268009 - If APZ is force-disabled, disable paint skipping even for apz-originated scrolls. r=kats (c02f8755cd) - Bug 1267555 part 1 - [css-grid] Make grid-aligned abs.pos. descendants that span from 'auto' to the first/last line stretch to the outer edge of the first/last track respectively. r=dholbert (88f6261043) - Bug 1267555 part 2 - [css-grid] Adjust reftests for abs.pos. "auto/first-line" and "last-line/auto" change. (43d03ab15b)
527 lines
15 KiB
C++
527 lines
15 KiB
C++
//
|
|
// Copyright 2015 The ANGLE Project Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
//
|
|
// Some of the pointsprite tests below were ported from Khronos WebGL
|
|
// conformance test suite.
|
|
|
|
#include "test_utils/ANGLETest.h"
|
|
|
|
#include <cmath>
|
|
|
|
using namespace angle;
|
|
|
|
class PointSpritesTest : public ANGLETest
|
|
{
|
|
protected:
|
|
const int windowWidth = 256;
|
|
const int windowHeight = 256;
|
|
PointSpritesTest()
|
|
{
|
|
setWindowWidth(windowWidth);
|
|
setWindowHeight(windowHeight);
|
|
setConfigRedBits(8);
|
|
setConfigGreenBits(8);
|
|
setConfigBlueBits(8);
|
|
setConfigAlphaBits(8);
|
|
}
|
|
|
|
virtual void SetUp()
|
|
{
|
|
ANGLETest::SetUp();
|
|
}
|
|
|
|
float s2p(float s)
|
|
{
|
|
return (s + 1.0f) * 0.5f * (GLfloat)windowWidth;
|
|
}
|
|
};
|
|
|
|
// Checks gl_PointCoord and gl_PointSize
|
|
// https://www.khronos.org/registry/webgl/sdk/tests/conformance/glsl/variables/gl-pointcoord.html
|
|
TEST_P(PointSpritesTest, PointCoordAndPointSizeCompliance)
|
|
{
|
|
// TODO(jmadill): figure out why this fails
|
|
if (isIntel() && GetParam() == ES2_D3D9())
|
|
{
|
|
std::cout << "Test skipped on Intel due to failures." << std::endl;
|
|
return;
|
|
}
|
|
|
|
const std::string fs = SHADER_SOURCE
|
|
(
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
gl_FragColor = vec4(
|
|
gl_PointCoord.x,
|
|
gl_PointCoord.y,
|
|
0,
|
|
1);
|
|
}
|
|
);
|
|
|
|
const std::string vs = SHADER_SOURCE
|
|
(
|
|
attribute vec4 vPosition;
|
|
uniform float uPointSize;
|
|
void main()
|
|
{
|
|
gl_PointSize = uPointSize;
|
|
gl_Position = vPosition;
|
|
}
|
|
);
|
|
|
|
GLuint program = CompileProgram(vs, fs);
|
|
ASSERT_NE(program, 0u);
|
|
ASSERT_GL_NO_ERROR();
|
|
|
|
glUseProgram(program);
|
|
|
|
GLfloat pointSizeRange[2] = {};
|
|
glGetFloatv(GL_ALIASED_POINT_SIZE_RANGE, pointSizeRange);
|
|
|
|
GLfloat maxPointSize = pointSizeRange[1];
|
|
|
|
ASSERT_TRUE(maxPointSize >= 1);
|
|
maxPointSize = floorf(maxPointSize);
|
|
ASSERT_TRUE((int)maxPointSize % 1 == 0);
|
|
|
|
maxPointSize = std::min(maxPointSize, 64.0f);
|
|
GLfloat pointWidth = maxPointSize / windowWidth;
|
|
GLint step = static_cast<GLint>(floorf(maxPointSize / 4));
|
|
GLint pointStep = std::max<GLint>(1, step);
|
|
|
|
GLint pointSizeLoc = glGetUniformLocation(program, "uPointSize");
|
|
ASSERT_GL_NO_ERROR();
|
|
|
|
glUniform1f(pointSizeLoc, maxPointSize);
|
|
ASSERT_GL_NO_ERROR();
|
|
|
|
GLfloat pixelOffset = ((int)maxPointSize % 2) ? (1.0f / (GLfloat)windowWidth) : 0;
|
|
GLuint vertexObject = 0;
|
|
glGenBuffers(1, &vertexObject);
|
|
ASSERT_NE(vertexObject, 0U);
|
|
ASSERT_GL_NO_ERROR();
|
|
|
|
glBindBuffer(GL_ARRAY_BUFFER, vertexObject);
|
|
ASSERT_GL_NO_ERROR();
|
|
|
|
GLfloat thePoints[] = { -0.5f + pixelOffset, -0.5f + pixelOffset,
|
|
0.5f + pixelOffset, -0.5f + pixelOffset,
|
|
-0.5f + pixelOffset, 0.5f + pixelOffset,
|
|
0.5f + pixelOffset, 0.5f + pixelOffset };
|
|
|
|
glBufferData(GL_ARRAY_BUFFER, sizeof(thePoints), thePoints, GL_STATIC_DRAW);
|
|
ASSERT_GL_NO_ERROR();
|
|
|
|
glEnableVertexAttribArray(0);
|
|
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, 0);
|
|
|
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
|
|
|
glDrawArrays(GL_POINTS, 0, 4);
|
|
ASSERT_GL_NO_ERROR();
|
|
|
|
glDeleteBuffers(1, &vertexObject);
|
|
|
|
std::string debugText;
|
|
for (float py = 0; py < 2; ++py) {
|
|
for (float px = 0; px < 2; ++px) {
|
|
float pointX = -0.5f + px + pixelOffset;
|
|
float pointY = -0.5f + py + pixelOffset;
|
|
for (int yy = 0; yy < maxPointSize; yy += pointStep) {
|
|
for (int xx = 0; xx < maxPointSize; xx += pointStep) {
|
|
// formula for s and t from OpenGL ES 2.0 spec section 3.3
|
|
float xw = s2p(pointX);
|
|
float yw = s2p(pointY);
|
|
float u = xx / maxPointSize * 2 - 1;
|
|
float v = yy / maxPointSize * 2 - 1;
|
|
int xf = static_cast<int>(floorf(s2p(pointX + u * pointWidth)));
|
|
int yf = static_cast<int>(floorf(s2p(pointY + v * pointWidth)));
|
|
float s = 0.5f + (xf + 0.5f - xw) / maxPointSize;
|
|
float t = 0.5f + (yf + 0.5f - yw) / maxPointSize;
|
|
GLubyte color[4] = { static_cast<GLubyte>(floorf(s * 255)), static_cast<GLubyte>(floorf((1 - t) * 255)), 0, 255 };
|
|
EXPECT_PIXEL_NEAR(xf, yf, color[0], color[1], color[2], color[3], 4);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Verify that drawing a point without enabling any attributes succeeds
|
|
// https://www.khronos.org/registry/webgl/sdk/tests/conformance/rendering/point-no-attributes.html
|
|
TEST_P(PointSpritesTest, PointWithoutAttributesCompliance)
|
|
{
|
|
// clang-format off
|
|
const std::string fs = SHADER_SOURCE
|
|
(
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);
|
|
}
|
|
);
|
|
|
|
const std::string vs = SHADER_SOURCE
|
|
(
|
|
void main()
|
|
{
|
|
gl_PointSize = 2.0;
|
|
gl_Position = vec4(0.0, 0.0, 0.0, 1.0);
|
|
}
|
|
);
|
|
// clang-format on
|
|
|
|
GLuint program = CompileProgram(vs, fs);
|
|
ASSERT_NE(program, 0u);
|
|
ASSERT_GL_NO_ERROR();
|
|
|
|
glUseProgram(program);
|
|
|
|
glDrawArrays(GL_POINTS, 0, 1);
|
|
ASSERT_GL_NO_ERROR();
|
|
|
|
// expect the center pixel to be green
|
|
EXPECT_PIXEL_EQ((windowWidth - 1) / 2, (windowHeight - 1) / 2, 0, 255, 0, 255);
|
|
}
|
|
|
|
// This is a regression test for a graphics driver bug affecting end caps on roads in MapsGL
|
|
// https://www.khronos.org/registry/webgl/sdk/tests/conformance/rendering/point-with-gl-pointcoord-in-fragment-shader.html
|
|
TEST_P(PointSpritesTest, PointCoordRegressionTest)
|
|
{
|
|
const std::string fs = SHADER_SOURCE
|
|
(
|
|
precision mediump float;
|
|
varying vec4 v_color;
|
|
void main()
|
|
{
|
|
// It seems as long as this mathematical expression references
|
|
// gl_PointCoord, the fragment's color is incorrect.
|
|
vec2 diff = gl_PointCoord - vec2(.5, .5);
|
|
if (length(diff) > 0.5)
|
|
discard;
|
|
|
|
// The point should be a solid color.
|
|
gl_FragColor = v_color;
|
|
}
|
|
);
|
|
|
|
const std::string vs = SHADER_SOURCE
|
|
(
|
|
varying vec4 v_color;
|
|
// The X and Y coordinates of the center of the point.
|
|
attribute vec2 a_vertex;
|
|
uniform float u_pointSize;
|
|
void main()
|
|
{
|
|
gl_PointSize = u_pointSize;
|
|
gl_Position = vec4(a_vertex, 0.0, 1.0);
|
|
// The color of the point.
|
|
v_color = vec4(0.0, 1.0, 0.0, 1.0);
|
|
}
|
|
);
|
|
|
|
GLuint program = CompileProgram(vs, fs);
|
|
ASSERT_NE(program, 0u);
|
|
ASSERT_GL_NO_ERROR();
|
|
|
|
glUseProgram(program);
|
|
|
|
GLfloat pointSizeRange[2] = {};
|
|
glGetFloatv(GL_ALIASED_POINT_SIZE_RANGE, pointSizeRange);
|
|
|
|
GLfloat maxPointSize = pointSizeRange[1];
|
|
|
|
ASSERT_TRUE(maxPointSize > 2);
|
|
|
|
glClearColor(0, 0, 0, 1);
|
|
glDisable(GL_DEPTH_TEST);
|
|
glClear(GL_COLOR_BUFFER_BIT);
|
|
|
|
GLint pointSizeLoc = glGetUniformLocation(program, "u_pointSize");
|
|
ASSERT_GL_NO_ERROR();
|
|
|
|
GLfloat pointSize = std::min<GLfloat>(20.0f, maxPointSize);
|
|
glUniform1f(pointSizeLoc, pointSize);
|
|
ASSERT_GL_NO_ERROR();
|
|
|
|
GLuint vertexObject = 0;
|
|
glGenBuffers(1, &vertexObject);
|
|
ASSERT_NE(vertexObject, 0U);
|
|
ASSERT_GL_NO_ERROR();
|
|
|
|
glBindBuffer(GL_ARRAY_BUFFER, vertexObject);
|
|
ASSERT_GL_NO_ERROR();
|
|
|
|
GLfloat thePoints[] = { 0.0f, 0.0f };
|
|
|
|
glBufferData(GL_ARRAY_BUFFER, sizeof(thePoints), thePoints, GL_STATIC_DRAW);
|
|
ASSERT_GL_NO_ERROR();
|
|
|
|
glEnableVertexAttribArray(0);
|
|
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, 0);
|
|
|
|
glDrawArrays(GL_POINTS, 0, 1);
|
|
ASSERT_GL_NO_ERROR();
|
|
|
|
// expect the center pixel to be green
|
|
EXPECT_PIXEL_EQ((windowWidth - 1) / 2, (windowHeight - 1) / 2, 0, 255, 0, 255);
|
|
|
|
glDeleteBuffers(1, &vertexObject);
|
|
}
|
|
|
|
// Verify GL_VERTEX_PROGRAM_POINT_SIZE is enabled
|
|
// https://www.khronos.org/registry/webgl/sdk/tests/conformance/rendering/point-size.html
|
|
TEST_P(PointSpritesTest, PointSizeEnabledCompliance)
|
|
{
|
|
const std::string fs = SHADER_SOURCE
|
|
(
|
|
precision mediump float;
|
|
varying vec4 color;
|
|
|
|
void main()
|
|
{
|
|
gl_FragColor = color;
|
|
}
|
|
);
|
|
|
|
const std::string vs = SHADER_SOURCE
|
|
(
|
|
attribute vec3 pos;
|
|
attribute vec4 colorIn;
|
|
uniform float pointSize;
|
|
varying vec4 color;
|
|
|
|
void main()
|
|
{
|
|
gl_PointSize = pointSize;
|
|
color = colorIn;
|
|
gl_Position = vec4(pos, 1.0);
|
|
}
|
|
);
|
|
|
|
// The WebGL test is drawn on a 2x2 canvas. Emulate this by setting a 2x2 viewport.
|
|
glViewport(0, 0, 2, 2);
|
|
|
|
GLuint program = CompileProgram(vs, fs);
|
|
ASSERT_NE(program, 0u);
|
|
ASSERT_GL_NO_ERROR();
|
|
|
|
glUseProgram(program);
|
|
|
|
glDisable(GL_BLEND);
|
|
|
|
// The choice of (0.4, 0.4) ensures that the centers of the surrounding
|
|
// pixels are not contained within the point when it is of size 1, but
|
|
// that they definitely are when it is of size 2.
|
|
GLfloat vertices[] = { 0.4f, 0.4f, 0.0f };
|
|
GLubyte colors[] = { 255, 0, 0, 255 };
|
|
|
|
GLuint vertexObject = 0;
|
|
glGenBuffers(1, &vertexObject);
|
|
ASSERT_NE(vertexObject, 0U);
|
|
ASSERT_GL_NO_ERROR();
|
|
|
|
glBindBuffer(GL_ARRAY_BUFFER, vertexObject);
|
|
ASSERT_GL_NO_ERROR();
|
|
|
|
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices) + sizeof(colors), NULL, GL_STATIC_DRAW);
|
|
ASSERT_GL_NO_ERROR();
|
|
|
|
glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(vertices), vertices);
|
|
ASSERT_GL_NO_ERROR();
|
|
|
|
glBufferSubData(GL_ARRAY_BUFFER, sizeof(vertices), sizeof(colors), colors);
|
|
ASSERT_GL_NO_ERROR();
|
|
|
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
|
|
|
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
|
|
glEnableVertexAttribArray(0);
|
|
|
|
glVertexAttribPointer(1, 4, GL_UNSIGNED_BYTE, GL_TRUE, 0, (GLvoid*)sizeof(vertices));
|
|
glEnableVertexAttribArray(1);
|
|
|
|
GLint pointSizeLoc = glGetUniformLocation(program, "pointSize");
|
|
ASSERT_GL_NO_ERROR();
|
|
|
|
glUniform1f(pointSizeLoc, 1.0f);
|
|
ASSERT_GL_NO_ERROR();
|
|
|
|
glDrawArrays(GL_POINTS, 0, static_cast<GLsizei>(ArraySize(vertices)) / 3);
|
|
ASSERT_GL_NO_ERROR();
|
|
|
|
// Test the pixels around the target Red pixel to ensure
|
|
// they are the expected color values
|
|
for (GLint y = 0; y < 2; ++y)
|
|
{
|
|
for (GLint x = 0; x < 2; ++x)
|
|
{
|
|
// 1x1 is expected to be a red pixel
|
|
// All others are black
|
|
GLubyte expectedColor[4] = { 0, 0, 0, 0 };
|
|
if (x == 1 && y == 1)
|
|
{
|
|
expectedColor[0] = 255;
|
|
expectedColor[3] = 255;
|
|
}
|
|
EXPECT_PIXEL_EQ(x, y, expectedColor[0], expectedColor[1], expectedColor[2], expectedColor[3]);
|
|
}
|
|
}
|
|
|
|
GLfloat pointSizeRange[2] = {};
|
|
glGetFloatv(GL_ALIASED_POINT_SIZE_RANGE, pointSizeRange);
|
|
|
|
if (pointSizeRange[1] >= 2.0)
|
|
{
|
|
// Draw a point of size 2 and verify it fills the appropriate region.
|
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
|
|
|
glUniform1f(pointSizeLoc, 2.0f);
|
|
ASSERT_GL_NO_ERROR();
|
|
|
|
glDrawArrays(GL_POINTS, 0, static_cast<GLsizei>(ArraySize(vertices)) / 3);
|
|
ASSERT_GL_NO_ERROR();
|
|
|
|
// Test the pixels to ensure the target is ALL Red pixels
|
|
for (GLint y = 0; y < 2; ++y)
|
|
{
|
|
for (GLint x = 0; x < 2; ++x)
|
|
{
|
|
EXPECT_PIXEL_EQ(x, y, 255, 0, 0, 255);
|
|
}
|
|
}
|
|
}
|
|
|
|
glDeleteBuffers(1, &vertexObject);
|
|
}
|
|
|
|
// Verify that rendering works correctly when gl_PointSize is declared in a shader but isn't used
|
|
TEST_P(PointSpritesTest, PointSizeDeclaredButUnused)
|
|
{
|
|
const std::string vs = SHADER_SOURCE
|
|
(
|
|
attribute highp vec4 position;
|
|
|
|
void main(void)
|
|
{
|
|
gl_PointSize = 1.0;
|
|
gl_Position = position;
|
|
}
|
|
);
|
|
|
|
const std::string fs = SHADER_SOURCE
|
|
(
|
|
void main(void)
|
|
{
|
|
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
|
|
}
|
|
);
|
|
|
|
GLuint program = CompileProgram(vs, fs);
|
|
ASSERT_NE(program, 0u);
|
|
ASSERT_GL_NO_ERROR();
|
|
|
|
glUseProgram(program);
|
|
drawQuad(program, "position", 0.5f, 1.0f);
|
|
ASSERT_GL_NO_ERROR();
|
|
|
|
// expect the center pixel to be red
|
|
EXPECT_PIXEL_EQ(getWindowWidth() / 2, getWindowHeight() / 2, 255, 0, 0, 255);
|
|
|
|
glDeleteProgram(program);
|
|
}
|
|
|
|
// Test to cover a bug where the D3D11 rasterizer state would not be update when switching between
|
|
// draw types. This causes the cull face to potentially be incorrect when drawing emulated point
|
|
// spites.
|
|
TEST_P(PointSpritesTest, PointSpriteAlternatingDrawTypes)
|
|
{
|
|
// clang-format off
|
|
const std::string pointFS = SHADER_SOURCE
|
|
(
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);
|
|
}
|
|
);
|
|
|
|
const std::string pointVS = SHADER_SOURCE
|
|
(
|
|
void main()
|
|
{
|
|
gl_PointSize = 16.0;
|
|
gl_Position = vec4(0.0, 0.0, 0.0, 1.0);
|
|
}
|
|
);
|
|
|
|
const std::string quadFS = SHADER_SOURCE
|
|
(
|
|
precision mediump float;
|
|
void main()
|
|
{
|
|
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
|
|
}
|
|
);
|
|
|
|
const std::string quadVS = SHADER_SOURCE
|
|
(
|
|
precision mediump float;
|
|
attribute vec4 pos;
|
|
void main()
|
|
{
|
|
gl_Position = pos;
|
|
}
|
|
);
|
|
// clang-format on
|
|
|
|
GLuint pointProgram = CompileProgram(pointVS, pointFS);
|
|
ASSERT_NE(pointProgram, 0u);
|
|
ASSERT_GL_NO_ERROR();
|
|
|
|
GLuint quadProgram = CompileProgram(quadVS, quadFS);
|
|
ASSERT_NE(pointProgram, 0u);
|
|
ASSERT_GL_NO_ERROR();
|
|
|
|
glEnable(GL_CULL_FACE);
|
|
glCullFace(GL_FRONT);
|
|
|
|
const GLfloat quadVertices[] = {
|
|
-1.0f, 1.0f, 0.5f, 1.0f, -1.0f, 0.5f, -1.0f, -1.0f, 0.5f,
|
|
|
|
-1.0f, 1.0f, 0.5f, 1.0f, 1.0f, 0.5f, 1.0f, -1.0f, 0.5f,
|
|
};
|
|
|
|
glUseProgram(quadProgram);
|
|
GLint positionLocation = glGetAttribLocation(quadProgram, "pos");
|
|
glVertexAttribPointer(positionLocation, 3, GL_FLOAT, GL_FALSE, 0, quadVertices);
|
|
glEnableVertexAttribArray(positionLocation);
|
|
glDrawArrays(GL_TRIANGLES, 0, 6);
|
|
|
|
glUseProgram(pointProgram);
|
|
glDrawArrays(GL_POINTS, 0, 1);
|
|
ASSERT_GL_NO_ERROR();
|
|
|
|
// expect the center pixel to be green
|
|
EXPECT_PIXEL_EQ(getWindowWidth() / 2, getWindowHeight() / 2, 0, 255, 0, 255);
|
|
|
|
glDeleteProgram(pointProgram);
|
|
glDeleteProgram(quadProgram);
|
|
}
|
|
|
|
// Use this to select which configurations (e.g. which renderer, which GLES
|
|
// major version) these tests should be run against.
|
|
//
|
|
// We test on D3D11 9_3 because the existing D3D11 PointSprite implementation
|
|
// uses Geometry Shaders which are not supported for 9_3.
|
|
// D3D9 and D3D11 are also tested to ensure no regressions.
|
|
ANGLE_INSTANTIATE_TEST(PointSpritesTest,
|
|
ES2_D3D9(),
|
|
ES2_D3D11(),
|
|
ES2_D3D11_FL9_3(),
|
|
ES2_OPENGL(),
|
|
ES2_OPENGLES());
|