Hash :
89e38b57
Author :
Date :
2022-06-22T15:04:08
Refactor to use ANGLETest vs ANGLETestWithParam Bug: angleproject:6747 Change-Id: I72ad52d0268eae0e1a401f12f3e94cc5efa402f2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3719002 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154
//
// 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.
//
// DebugMarkerTest:
// Basic tests to ensure EXT_debug_marker entry points work.
#include "test_utils/ANGLETest.h"
#include "test_utils/gl_raii.h"
using namespace angle;
namespace
{
class DebugMarkerTest : public ANGLETest<>
{
protected:
DebugMarkerTest()
{
setWindowWidth(128);
setWindowHeight(128);
setConfigRedBits(8);
setConfigGreenBits(8);
setConfigBlueBits(8);
setConfigAlphaBits(8);
}
};
// Simple test to ensure the various EXT_debug_marker entry points don't crash.
// The debug markers can be validated by capturing this test under a graphics debugger.
TEST_P(DebugMarkerTest, BasicValidation)
{
ANGLE_SKIP_TEST_IF(!IsGLExtensionEnabled("GL_EXT_debug_marker"));
std::string eventMarkerCaption = "Test event marker caption";
std::string groupMarkerCaption = "Test group marker caption";
glPushGroupMarkerEXT(static_cast<GLsizei>(groupMarkerCaption.length()),
groupMarkerCaption.c_str());
// Do some basic operations between calls to extension entry points
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glInsertEventMarkerEXT(static_cast<GLsizei>(eventMarkerCaption.length()),
eventMarkerCaption.c_str());
glClearColor(1.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glPushGroupMarkerEXT(0, nullptr);
glClearColor(0.0f, 1.0f, 0.0f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT);
glPopGroupMarkerEXT();
glClearColor(0.0f, 0.0f, 1.0f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT);
glPopGroupMarkerEXT();
ASSERT_GL_NO_ERROR();
}
// Test EXT_debug_marker markers before, during and after rendering. The debug markers can be
// validated by capturing this test under a graphics debugger.
TEST_P(DebugMarkerTest, Rendering)
{
ANGLE_SKIP_TEST_IF(!IsGLExtensionEnabled("GL_EXT_debug_marker"));
// The test produces the following hierarchy:
//
// Event: Before Draw Marker
// Group: Before Draw
// Event: In Group 1 Marker
// glDrawArrays
// Group: After Draw 1
// Event: In Group 2 Marker
// glDrawArrays
//
// glCopyTexImage <-- this breaks the render pass
//
// glDrawArrays
// End Group
// glDrawArrays
// Group: After Draw 2
// glDrawArrays
// Event: In Group 3 Marker
//
// glCopyTexImage <-- this breaks the render pass
// End Group
// End Group
// Event: After Draw Marker
const std::string beforeDrawGroup = "Before Draw";
const std::string drawGroup1 = "Group 1";
const std::string drawGroup2 = "Group 2";
const std::string beforeDrawMarker = "Before Draw Marker";
const std::string inGroup1Marker = "In Group 1 Marker";
const std::string inGroup2Marker = "In Group 2 Marker";
const std::string inGroup3Marker = "In Group 3 Marker";
const std::string afterDrawMarker = "After Draw Marker";
ANGLE_GL_PROGRAM(program, essl1_shaders::vs::Simple(), essl1_shaders::fs::Blue());
glUseProgram(program);
glInsertEventMarkerEXT(static_cast<GLsizei>(beforeDrawMarker.length()),
beforeDrawMarker.c_str());
glPushGroupMarkerEXT(static_cast<GLsizei>(beforeDrawGroup.length()), beforeDrawGroup.c_str());
{
glInsertEventMarkerEXT(static_cast<GLsizei>(inGroup1Marker.length()),
inGroup1Marker.c_str());
glDrawArrays(GL_TRIANGLES, 0, 6);
glPushGroupMarkerEXT(static_cast<GLsizei>(drawGroup1.length()), drawGroup1.c_str());
{
glInsertEventMarkerEXT(static_cast<GLsizei>(inGroup2Marker.length()),
inGroup2Marker.c_str());
glDrawArrays(GL_TRIANGLES, 0, 6);
GLTexture texture;
glBindTexture(GL_TEXTURE_2D, texture);
glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, 1, 1, 0);
glDrawArrays(GL_TRIANGLES, 0, 6);
}
glPopGroupMarkerEXT();
glDrawArrays(GL_TRIANGLES, 0, 6);
glPushGroupMarkerEXT(static_cast<GLsizei>(drawGroup2.length()), drawGroup2.c_str());
{
glDrawArrays(GL_TRIANGLES, 0, 6);
glInsertEventMarkerEXT(static_cast<GLsizei>(inGroup3Marker.length()),
inGroup3Marker.c_str());
glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, 2, 2, 0);
}
glPopGroupMarkerEXT();
}
glPopGroupMarkerEXT();
glInsertEventMarkerEXT(static_cast<GLsizei>(afterDrawMarker.length()), afterDrawMarker.c_str());
ASSERT_GL_NO_ERROR();
}
// Use this to select which configurations (e.g. which renderer, which GLES major version) these
// tests should be run against.
ANGLE_INSTANTIATE_TEST_ES2(DebugMarkerTest);
} // namespace