Edit

kc3-lang/angle/src/libANGLE/features.h

Branch :

  • Show log

    Commit

  • Author : Jamie Madill
    Date : 2016-11-28 15:55:51
    Hash : 01074255
    Message : D3D: Implement multi-thread shader compilation. Choose to use std::async for now to implement multi-threaded compiles. This should work across platforms and also be usable for other threading tasks. Note that std::async does not have a good way to wait for multiple std::futures. Also the Linux compile of std::async is broken due to a bug in an old STL version, so disable it on this platform. The implementation uses a static polymorphism approach, which should have very good performance (no virtual calls). This design leaves the door open for other future implementations, such as a Win32 thread pool, or one based on angle::Platform. BUG=angleproject:422 Change-Id: Ia2f13c3af0339efaca1d19b40b3e08ecca61b8e8 Reviewed-on: https://chromium-review.googlesource.com/413712 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>

  • src/libANGLE/features.h
  • //
    // Copyright (c) 2014 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.
    //
    
    #ifndef LIBANGLE_FEATURES_H_
    #define LIBANGLE_FEATURES_H_
    
    #include "common/platform.h"
    
    #define ANGLE_DISABLED 0
    #define ANGLE_ENABLED 1
    
    // Feature defaults
    
    // Direct3D9EX
    // The "Debug This Pixel..." feature in PIX often fails when using the
    // D3D9Ex interfaces.  In order to get debug pixel to work on a Vista/Win 7
    // machine, define "ANGLE_D3D9EX=0" in your project file.
    #if !defined(ANGLE_D3D9EX)
    #define ANGLE_D3D9EX ANGLE_ENABLED
    #endif
    
    // Vsync
    // ENABLED allows Vsync to be configured at runtime
    // DISABLED disallows Vsync
    #if !defined(ANGLE_VSYNC)
    #define ANGLE_VSYNC ANGLE_ENABLED
    #endif
    
    // Program binary loading
    #if !defined(ANGLE_PROGRAM_BINARY_LOAD)
    #define ANGLE_PROGRAM_BINARY_LOAD ANGLE_ENABLED
    #endif
    
    // Append HLSL assembly to shader debug info. Defaults to enabled in Debug and off in Release.
    #if !defined(ANGLE_APPEND_ASSEMBLY_TO_SHADER_DEBUG_INFO)
    #if !defined(NDEBUG)
    #define ANGLE_APPEND_ASSEMBLY_TO_SHADER_DEBUG_INFO ANGLE_ENABLED
    #else
    #define ANGLE_APPEND_ASSEMBLY_TO_SHADER_DEBUG_INFO ANGLE_DISABLED
    #endif  // !defined(NDEBUG)
    #endif  // !defined(ANGLE_APPEND_ASSEMBLY_TO_SHADER_DEBUG_INFO)
    
    // Program link validation of precisions for uniforms. This feature was
    // requested by developers to allow non-conformant shaders to be used which
    // contain mismatched precisions.
    // ENABLED validate that precision for uniforms match between vertex and fragment shaders
    // DISABLED allow precision for uniforms to differ between vertex and fragment shaders
    #if !defined(ANGLE_PROGRAM_LINK_VALIDATE_UNIFORM_PRECISION)
    #define ANGLE_PROGRAM_LINK_VALIDATE_UNIFORM_PRECISION ANGLE_ENABLED
    #endif
    
    // Controls if our threading code uses std::async or falls back to single-threaded operations.
    // TODO(jmadill): Enable on Linux once STL chrono headers are updated.
    #if !defined(ANGLE_STD_ASYNC_WORKERS)
    #if defined(ANGLE_PLATFORM_WINDOWS)
    #define ANGLE_STD_ASYNC_WORKERS ANGLE_ENABLED
    #else
    #define ANGLE_STD_ASYNC_WORKERS ANGLE_DISABLED
    #endif  // defined(ANGLE_PLATFORM_WINDOWS)
    #endif  // !defined(ANGLE_STD_ASYNC_WORKERS)
    
    #endif // LIBANGLE_FEATURES_H_