Path: blob/main_old/src/tests/gles1_conformance_tests/ConformanceTests.cpp
1693 views
//1// Copyright 2017 The ANGLE Project Authors. All rights reserved.2// Use of this source code is governed by a BSD-style license that can be3// found in the LICENSE file.4//5// ConformanceTests.cpp:6// GLES1 conformance tests.7// Function prototypes taken from tproto.h and turned into gtest tests using a macro.8//910#include "test_utils/ANGLETest.h"11#include "test_utils/gl_raii.h"1213#ifdef __cplusplus14extern "C" {15#endif1617// ES 1.018extern long AmbLightExec(void);19extern long AmbMatExec(void);20extern long AmbSceneExec(void);21extern long APFuncExec(void);22extern long AtnConstExec(void);23extern long AtnPosExec(void);24extern long BClearExec(void);25extern long BColorExec(void);26extern long BCornerExec(void);27extern long BlendExec(void);28extern long ClipExec(void);29extern long ColRampExec(void);30extern long CopyTexExec(void);31extern long DifLightExec(void);32extern long DifMatExec(void);33extern long DifMatNormExec(void);34extern long DifMatPosExec(void);35extern long DitherExec(void);36extern long DivZeroExec(void);37extern long EmitMatExec(void);38extern long FogExpExec(void);39extern long FogLinExec(void);40extern long LineAntiAliasExec(void);41extern long LineHVExec(void);42extern long LineRasterExec(void);43extern long LogicOpExec(void);44extern long MipExec(void);45extern long MipLevelsExec(void);46extern long MipLinExec(void);47extern long MipSelectExec(void);48extern long MaskExec(void);49extern long MatrixStackExec(void);50extern long MultiTexExec(void);51extern long MustPassExec(void);52extern long PackedPixelsExec(void);53extern long PointAntiAliasExec(void);54extern long PointRasterExec(void);55extern long PolyCullExec(void);56extern long ReadFormatExec(void);57extern long RescaleNormalExec(void);58extern long ScissorExec(void);59extern long SPClearExec(void);60extern long SPCornerExec(void);61extern long SpecExpExec(void);62extern long SpecExpNormExec(void);63extern long SpecLightExec(void);64extern long SpecMatExec(void);65extern long SpecNormExec(void);66extern long SPFuncExec(void);67extern long SPOpExec(void);68extern long SpotPosExec(void);69extern long SpotExpPosExec(void);70extern long SpotExpDirExec(void);71extern long TexDecalExec(void);72extern long TexPaletExec(void);73extern long TextureEdgeClampExec(void);74extern long TriRasterExec(void);75extern long TriTileExec(void);76extern long VertexOrderExec(void);77extern long ViewportClampExec(void);78extern long XFormExec(void);79extern long XFormMixExec(void);80extern long XFormNormalExec(void);81extern long XFormViewportExec(void);82extern long XFormHomogenousExec(void);83extern long ZBClearExec(void);84extern long ZBFuncExec(void);8586// GL_OES_draw_texture87extern long DrawTexExec(void);8889// GL_OES_query_matrix90extern long MatrixQueryExec(void);9192// ES 1.193extern long BufferObjectExec(void);94extern long PointSizeArrayExec(void);95extern long PointSpriteExec(void);96extern long UserClipExec(void);97extern long MatrixGetTestExec(void);98extern long GetsExec(void);99extern long TexCombineExec(void);100101// GL_OES_matrix_palette102extern long MatrixPaletteExec(void);103104// Test driver setup105void BufferSetup(void);106void EpsilonSetup(void);107void StateSetup(void);108109#define CONFORMANCE_TEST_ERROR (-1)110111#ifdef __cplusplus112}113114#endif115namespace angle116{117class GLES1ConformanceTest : public ANGLETest118{119protected:120GLES1ConformanceTest()121{122setWindowWidth(48);123setWindowHeight(48);124setConfigRedBits(8);125setConfigGreenBits(8);126setConfigBlueBits(8);127setConfigAlphaBits(8);128setConfigDepthBits(24);129setConfigStencilBits(8);130}131132void testSetUp() override133{134BufferSetup();135EpsilonSetup();136StateSetup();137}138};139140TEST_P(GLES1ConformanceTest, AmbLight)141{142// Flaky timeouts due to slow test. http://anglebug.com/5234143ANGLE_SKIP_TEST_IF(IsVulkan());144ASSERT_NE(CONFORMANCE_TEST_ERROR, AmbLightExec());145}146147TEST_P(GLES1ConformanceTest, AmbMat)148{149ASSERT_NE(CONFORMANCE_TEST_ERROR, AmbMatExec());150}151152TEST_P(GLES1ConformanceTest, AmbScene)153{154ASSERT_NE(CONFORMANCE_TEST_ERROR, AmbSceneExec());155}156157TEST_P(GLES1ConformanceTest, APFunc)158{159ASSERT_NE(CONFORMANCE_TEST_ERROR, APFuncExec());160}161162TEST_P(GLES1ConformanceTest, AtnConst)163{164ASSERT_NE(CONFORMANCE_TEST_ERROR, AtnConstExec());165}166167TEST_P(GLES1ConformanceTest, AtnPos)168{169ASSERT_NE(CONFORMANCE_TEST_ERROR, AtnPosExec());170}171172TEST_P(GLES1ConformanceTest, BClear)173{174ASSERT_NE(CONFORMANCE_TEST_ERROR, BClearExec());175}176177TEST_P(GLES1ConformanceTest, BColor)178{179ASSERT_NE(CONFORMANCE_TEST_ERROR, BColorExec());180}181182TEST_P(GLES1ConformanceTest, BCorner)183{184ASSERT_NE(CONFORMANCE_TEST_ERROR, BCornerExec());185}186187TEST_P(GLES1ConformanceTest, Blend)188{189// Slow test, takes over 20 seconds in some configs. http://anglebug.com/5171190ANGLE_SKIP_TEST_IF(IsVulkan() && IsIntel() && IsWindows());191ASSERT_NE(CONFORMANCE_TEST_ERROR, BlendExec());192}193194TEST_P(GLES1ConformanceTest, Clip)195{196ASSERT_NE(CONFORMANCE_TEST_ERROR, ClipExec());197}198199TEST_P(GLES1ConformanceTest, ColRamp)200{201ASSERT_NE(CONFORMANCE_TEST_ERROR, ColRampExec());202}203204TEST_P(GLES1ConformanceTest, CopyTex)205{206ASSERT_NE(CONFORMANCE_TEST_ERROR, CopyTexExec());207}208209TEST_P(GLES1ConformanceTest, DifLight)210{211ASSERT_NE(CONFORMANCE_TEST_ERROR, DifLightExec());212}213214TEST_P(GLES1ConformanceTest, DifMat)215{216ASSERT_NE(CONFORMANCE_TEST_ERROR, DifMatExec());217}218219TEST_P(GLES1ConformanceTest, DifMatNorm)220{221ASSERT_NE(CONFORMANCE_TEST_ERROR, DifMatNormExec());222}223224TEST_P(GLES1ConformanceTest, DifMatPos)225{226ASSERT_NE(CONFORMANCE_TEST_ERROR, DifMatPosExec());227}228229TEST_P(GLES1ConformanceTest, Dither)230{231ASSERT_NE(CONFORMANCE_TEST_ERROR, DitherExec());232}233234TEST_P(GLES1ConformanceTest, DivZero)235{236ASSERT_NE(CONFORMANCE_TEST_ERROR, DivZeroExec());237}238239TEST_P(GLES1ConformanceTest, EmitMat)240{241ASSERT_NE(CONFORMANCE_TEST_ERROR, EmitMatExec());242}243244TEST_P(GLES1ConformanceTest, FogExp)245{246ASSERT_NE(CONFORMANCE_TEST_ERROR, FogExpExec());247}248249TEST_P(GLES1ConformanceTest, FogLin)250{251ASSERT_NE(CONFORMANCE_TEST_ERROR, FogLinExec());252}253254TEST_P(GLES1ConformanceTest, LineAntiAlias)255{256ANGLE_SKIP_TEST_IF(true);257ASSERT_NE(CONFORMANCE_TEST_ERROR, LineAntiAliasExec());258}259260TEST_P(GLES1ConformanceTest, LineHV)261{262ASSERT_NE(CONFORMANCE_TEST_ERROR, LineHVExec());263}264265TEST_P(GLES1ConformanceTest, LineRaster)266{267// http://g.co/anglebug/3862268ANGLE_SKIP_TEST_IF(IsVulkan());269ASSERT_NE(CONFORMANCE_TEST_ERROR, LineRasterExec());270}271272TEST_P(GLES1ConformanceTest, LogicOp)273{274ANGLE_SKIP_TEST_IF(true);275ASSERT_NE(CONFORMANCE_TEST_ERROR, LogicOpExec());276}277278TEST_P(GLES1ConformanceTest, Mip)279{280ASSERT_NE(CONFORMANCE_TEST_ERROR, MipExec());281}282283TEST_P(GLES1ConformanceTest, MipLevels)284{285ANGLE_SKIP_TEST_IF(true);286ASSERT_NE(CONFORMANCE_TEST_ERROR, MipLevelsExec());287}288289TEST_P(GLES1ConformanceTest, MipLin)290{291ASSERT_NE(CONFORMANCE_TEST_ERROR, MipLinExec());292}293294TEST_P(GLES1ConformanceTest, MipSelect)295{296ASSERT_NE(CONFORMANCE_TEST_ERROR, MipSelectExec());297}298299TEST_P(GLES1ConformanceTest, Mask)300{301ASSERT_NE(CONFORMANCE_TEST_ERROR, MaskExec());302}303304TEST_P(GLES1ConformanceTest, MatrixStack)305{306ASSERT_NE(CONFORMANCE_TEST_ERROR, MatrixStackExec());307}308309TEST_P(GLES1ConformanceTest, MultiTex)310{311ASSERT_NE(CONFORMANCE_TEST_ERROR, MultiTexExec());312}313314TEST_P(GLES1ConformanceTest, MustPass)315{316ANGLE_SKIP_TEST_IF(true);317ASSERT_NE(CONFORMANCE_TEST_ERROR, MustPassExec());318}319320TEST_P(GLES1ConformanceTest, PackedPixels)321{322ASSERT_NE(CONFORMANCE_TEST_ERROR, PackedPixelsExec());323}324325TEST_P(GLES1ConformanceTest, PointAntiAlias)326{327ANGLE_SKIP_TEST_IF(true);328ASSERT_NE(CONFORMANCE_TEST_ERROR, PointAntiAliasExec());329}330331TEST_P(GLES1ConformanceTest, PointRaster)332{333ASSERT_NE(CONFORMANCE_TEST_ERROR, PointRasterExec());334}335336TEST_P(GLES1ConformanceTest, PolyCull)337{338ASSERT_NE(CONFORMANCE_TEST_ERROR, PolyCullExec());339}340341TEST_P(GLES1ConformanceTest, ReadFormat)342{343ASSERT_NE(CONFORMANCE_TEST_ERROR, ReadFormatExec());344}345346TEST_P(GLES1ConformanceTest, RescaleNormal)347{348ANGLE_SKIP_TEST_IF(true);349ASSERT_NE(CONFORMANCE_TEST_ERROR, RescaleNormalExec());350}351352TEST_P(GLES1ConformanceTest, Scissor)353{354ASSERT_NE(CONFORMANCE_TEST_ERROR, ScissorExec());355}356357TEST_P(GLES1ConformanceTest, SPClear)358{359// http://g.co/anglebug/3863360ANGLE_SKIP_TEST_IF(IsVulkan());361ASSERT_NE(CONFORMANCE_TEST_ERROR, SPClearExec());362}363364TEST_P(GLES1ConformanceTest, SPCorner)365{366ASSERT_NE(CONFORMANCE_TEST_ERROR, SPCornerExec());367}368369TEST_P(GLES1ConformanceTest, SpecExp)370{371ASSERT_NE(CONFORMANCE_TEST_ERROR, SpecExpExec());372}373374TEST_P(GLES1ConformanceTest, SpecExpNorm)375{376ASSERT_NE(CONFORMANCE_TEST_ERROR, SpecExpNormExec());377}378379TEST_P(GLES1ConformanceTest, SpecLight)380{381ASSERT_NE(CONFORMANCE_TEST_ERROR, SpecLightExec());382}383384TEST_P(GLES1ConformanceTest, SpecMat)385{386ASSERT_NE(CONFORMANCE_TEST_ERROR, SpecMatExec());387}388389TEST_P(GLES1ConformanceTest, SpecNorm)390{391ASSERT_NE(CONFORMANCE_TEST_ERROR, SpecNormExec());392}393394TEST_P(GLES1ConformanceTest, SPFunc)395{396ASSERT_NE(CONFORMANCE_TEST_ERROR, SPFuncExec());397}398399TEST_P(GLES1ConformanceTest, SPOp)400{401ASSERT_NE(CONFORMANCE_TEST_ERROR, SPOpExec());402}403404TEST_P(GLES1ConformanceTest, SpotPos)405{406ASSERT_NE(CONFORMANCE_TEST_ERROR, SpotPosExec());407}408409TEST_P(GLES1ConformanceTest, SpotExpPos)410{411ASSERT_NE(CONFORMANCE_TEST_ERROR, SpotExpPosExec());412}413414TEST_P(GLES1ConformanceTest, SpotExpDir)415{416// http://crbug.com/1136238417ANGLE_SKIP_TEST_IF(IsWindows() && IsVulkan());418ASSERT_NE(CONFORMANCE_TEST_ERROR, SpotExpDirExec());419}420421TEST_P(GLES1ConformanceTest, TexDecal)422{423ASSERT_NE(CONFORMANCE_TEST_ERROR, TexDecalExec());424}425426TEST_P(GLES1ConformanceTest, TexPalet)427{428ANGLE_SKIP_TEST_IF(true);429ASSERT_NE(CONFORMANCE_TEST_ERROR, TexPaletExec());430}431432TEST_P(GLES1ConformanceTest, TextureEdgeClamp)433{434ASSERT_NE(CONFORMANCE_TEST_ERROR, TextureEdgeClampExec());435}436437TEST_P(GLES1ConformanceTest, TriRaster)438{439ASSERT_NE(CONFORMANCE_TEST_ERROR, TriRasterExec());440}441442TEST_P(GLES1ConformanceTest, TriTile)443{444ASSERT_NE(CONFORMANCE_TEST_ERROR, TriTileExec());445}446447TEST_P(GLES1ConformanceTest, VertexOrder)448{449ASSERT_NE(CONFORMANCE_TEST_ERROR, VertexOrderExec());450}451452TEST_P(GLES1ConformanceTest, ViewportClamp)453{454ASSERT_NE(CONFORMANCE_TEST_ERROR, ViewportClampExec());455}456457TEST_P(GLES1ConformanceTest, XForm)458{459ASSERT_NE(CONFORMANCE_TEST_ERROR, XFormExec());460}461462TEST_P(GLES1ConformanceTest, XFormMix)463{464ASSERT_NE(CONFORMANCE_TEST_ERROR, XFormMixExec());465}466467TEST_P(GLES1ConformanceTest, XFormNormal)468{469ASSERT_NE(CONFORMANCE_TEST_ERROR, XFormNormalExec());470}471472TEST_P(GLES1ConformanceTest, XFormViewport)473{474ASSERT_NE(CONFORMANCE_TEST_ERROR, XFormViewportExec());475}476477TEST_P(GLES1ConformanceTest, XFormHomogenous)478{479ASSERT_NE(CONFORMANCE_TEST_ERROR, XFormHomogenousExec());480}481482TEST_P(GLES1ConformanceTest, ZBClear)483{484// http://g.co/anglebug/3864485ANGLE_SKIP_TEST_IF(IsVulkan());486ASSERT_NE(CONFORMANCE_TEST_ERROR, ZBClearExec());487}488489TEST_P(GLES1ConformanceTest, ZBFunc)490{491ASSERT_NE(CONFORMANCE_TEST_ERROR, ZBFuncExec());492}493494TEST_P(GLES1ConformanceTest, DrawTex)495{496ASSERT_TRUE(IsGLExtensionEnabled("GL_OES_draw_texture"));497ASSERT_NE(CONFORMANCE_TEST_ERROR, DrawTexExec());498}499500TEST_P(GLES1ConformanceTest, MatrixQuery)501{502ASSERT_NE(CONFORMANCE_TEST_ERROR, MatrixQueryExec());503}504505TEST_P(GLES1ConformanceTest, BufferObject)506{507ASSERT_NE(CONFORMANCE_TEST_ERROR, BufferObjectExec());508}509510TEST_P(GLES1ConformanceTest, PointSizeArray)511{512ASSERT_NE(CONFORMANCE_TEST_ERROR, PointSizeArrayExec());513}514515TEST_P(GLES1ConformanceTest, PointSprite)516{517ASSERT_NE(CONFORMANCE_TEST_ERROR, PointSpriteExec());518}519520TEST_P(GLES1ConformanceTest, UserClip)521{522// "2.11 Clipping" describes the complementarity criterion, where a523// primitive drawn once with a particular clip plane and again with the524// negated version of the clip plane must not overdraw for pixels where the525// plane equation evaluates exactly to zero; that is, we would need to526// detect previously drawn fragments from one clip plane that lie exactly527// on the half space boundary, and avoid drawing them if the same primitive528// is issued next draw with a negated version of the clip plane.529//530// TODO([email protected])531// We can skip the test for now, or seed the test with a sufficiently nice532// random number so that it still test clip planes, but doesn't have any533// pixels exactly on half space boundaries.534//535// Proper fix would either involve a more complex scheme to track fragments536// on the half space boundary and discard or not next draw based on whether537// they are hit again, or to pass through to a hardware clip plane538// implementation (available in desktop GL or Vulkan)539540ANGLE_SKIP_TEST_IF(true);541ASSERT_NE(CONFORMANCE_TEST_ERROR, UserClipExec());542}543544TEST_P(GLES1ConformanceTest, MatrixGetTest)545{546ASSERT_NE(CONFORMANCE_TEST_ERROR, MatrixGetTestExec());547}548549TEST_P(GLES1ConformanceTest, Gets)550{551ASSERT_NE(CONFORMANCE_TEST_ERROR, GetsExec());552}553554TEST_P(GLES1ConformanceTest, TexCombine)555{556ASSERT_NE(CONFORMANCE_TEST_ERROR, TexCombineExec());557}558559TEST_P(GLES1ConformanceTest, MatrixPalette)560{561ASSERT_NE(CONFORMANCE_TEST_ERROR, MatrixPaletteExec());562}563564ANGLE_INSTANTIATE_TEST(GLES1ConformanceTest, ES1_OPENGL(), ES1_VULKAN());565} // namespace angle566567// Included here to fix a compile error due to white box tests using angle_end2end_tests_main.568void RegisterContextCompatibilityTests() {}569570