Hash :
b6e99bb3
Author :
Date :
2021-09-02T13:47:34
Rename and expand shader variable init feature. This feature now forces both output and unitialized locals to be initialized by the shader translator. This feature is needed by the trace validator to ensure we get deterministic behaviour in traces that exhibit some undefined results. Bug: angleproject:5133 Change-Id: Id1242cd077a57e891eed217f7671976ce1631a58 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3140216 Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
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
//
// Copyright 2016 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.
//
// FrontendFeatures.h: Features/workarounds for driver bugs and other behaviors seen
// on all platforms.
#ifndef ANGLE_PLATFORM_FRONTENDFEATURES_H_
#define ANGLE_PLATFORM_FRONTENDFEATURES_H_
#include "platform/Feature.h"
namespace angle
{
struct FrontendFeatures : angle::FeatureSetBase
{
FrontendFeatures();
~FrontendFeatures();
// Force the context to be lost (via KHR_robustness) if a GL_OUT_OF_MEMORY error occurs. The
// driver may be in an inconsistent state if this happens, and some users of ANGLE rely on this
// notification to prevent further execution.
angle::Feature loseContextOnOutOfMemory = {
"lose_context_on_out_of_memory", angle::FeatureCategory::FrontendWorkarounds,
"Some users rely on a lost context notification if a GL_OUT_OF_MEMORY "
"error occurs",
&members};
// Program binaries don't contain transform feedback varyings on Qualcomm GPUs.
// Work around this by disabling the program cache for programs with transform feedback.
angle::Feature disableProgramCachingForTransformFeedback = {
"disable_program_caching_for_transform_feedback",
angle::FeatureCategory::FrontendWorkarounds,
"On some GPUs, program binaries don't contain transform feedback varyings", &members};
// On Windows Intel OpenGL drivers TexImage sometimes seems to interact with the Framebuffer.
// Flaky crashes can occur unless we sync the Framebuffer bindings. The workaround is to add
// Framebuffer binding dirty bits to TexImage updates. See http://anglebug.com/2906
angle::Feature syncFramebufferBindingsOnTexImage = {
"sync_framebuffer_bindings_on_tex_image", angle::FeatureCategory::FrontendWorkarounds,
"On some drivers TexImage sometimes seems to interact "
"with the Framebuffer",
&members};
angle::Feature scalarizeVecAndMatConstructorArgs = {
"scalarize_vec_and_mat_constructor_args", angle::FeatureCategory::FrontendWorkarounds,
"Always rewrite vec/mat constructors to be consistent", &members,
"http://crbug.com/1165751"};
// Disable support for GL_OES_get_program_binary
angle::Feature disableProgramBinary = {
"disable_program_binary", angle::FeatureCategory::FrontendFeatures,
"Disable support for GL_OES_get_program_binary", &members, "http://anglebug.com/5007"};
// Allow disabling of GL_EXT_texture_filter_anisotropic through a runtime feature for
// performance comparisons.
angle::Feature disableAnisotropicFiltering = {
"disable_anisotropic_filtering", angle::FeatureCategory::FrontendWorkarounds,
"Disable support for anisotropic filtering", &members};
// We can use this feature to override compressed format support for portability.
angle::Feature allowCompressedFormats = {"allow_compressed_formats",
angle::FeatureCategory::FrontendWorkarounds,
"Allow compressed formats", &members};
angle::Feature captureLimits = {"enable_capture_limits",
angle::FeatureCategory::FrontendFeatures,
"Set the context limits like frame capturing was enabled",
&members, "http://anglebug.com/5750"};
// Whether we should compress pipeline cache in thread pool before it's stored in blob cache.
// http://anglebug.com/4722
angle::Feature enableCompressingPipelineCacheInThreadPool = {
"enableCompressingPipelineCacheInThreadPool", angle::FeatureCategory::FrontendWorkarounds,
"Enable compressing pipeline cache in thread pool.", &members, "http://anglebug.com/4722"};
// Forces on robust resource init. Useful for some tests to avoid undefined values.
angle::Feature forceRobustResourceInit = {
"forceRobustResourceInit", angle::FeatureCategory::FrontendFeatures,
"Force-enable robust resource init", &members, "http://anglebug.com/6041"};
// Forces on shader variable init to avoid undefined values in tests. This feature is enabled
// for WebGL and frame capture, which both require deterministic results.
angle::Feature forceInitShaderVariables = {
"forceInitShaderVariables", angle::FeatureCategory::FrontendFeatures,
"Force-enable shader variable initialization", &members};
angle::Feature enableProgramBinaryForCapture = {
"enableProgramBinaryForCapture", angle::FeatureCategory::FrontendFeatures,
"Even if FrameCapture is enabled, enable GL_OES_get_program_binary", &members,
"http://anglebug.com/5658"};
};
inline FrontendFeatures::FrontendFeatures() = default;
inline FrontendFeatures::~FrontendFeatures() = default;
} // namespace angle
#endif // ANGLE_PLATFORM_FRONTENDFEATURES_H_