Hash :
f3d5dac3
Author :
Date :
2021-08-23T17:25:15
Vulkan: SPIR-V Gen: Drop dependency to glslang
The SPIR-V gen path is now made default. Compilation through glslang is
still supported for debugging, and is enabled on the GLSL* end2end tests
for smoke testing. On release builds, glslang is not supported.
To test with glslang, add the following gn arg (only necessary if dcheck
is disabled):
angle_enable_spirv_gen_through_glslang = true
Then enable the generateSPIRVThroughGlslang feature. This can be done
by setting an environment variable:
ANGLE_FEATURE_OVERRIDES_ENABLED=generateSPIRVThroughGlslang ./angle_deqp_gles2_tests
Binary size saving:
- 1.3MB on Linux (SPIR-V gen itself: 240KB)
- 730KB on Android (SPIR-V gen itself: 140KB)
Perf tests:
- LinkProgramBenchmark.Run/vulkan_compile_single_thread
* Through glslang:
truncated mean: 1287033.36
* Direct SPIR-V Gen:
truncated mean: 244495.91 (~80% reduction)
- LinkProgramBenchmark.Run/vulkan_compile_multi_thread
* Through glslang:
truncated mean: 4565894.83
* Direct SPIR-V Gen:
truncated mean: 1158164.10 (~75% reduction)
Bug: angleproject:4889
Bug: angleproject:6210
Change-Id: I486342702977c8114e90073b97183aba115a8b2d
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3115140
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Tim Van Patten <timvp@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
/*-------------------------------------------------------------------------
* drawElements Quality Program Tester Core
* ----------------------------------------
*
* Copyright 2014 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
#ifndef TCU_ANGLE_PLATFORM_H_
#define TCU_ANGLE_PLATFORM_H_
#include "gluPlatform.hpp"
#include "tcuDefs.hpp"
#include "tcuPlatform.hpp"
#ifndef _EGLUPLATFORM_HPP
# include "egluPlatform.hpp"
#endif
#include "platform/PlatformMethods.h"
#include "tcuANGLENativeDisplayFactory.h"
namespace tcu
{
class ANGLEPlatform : public tcu::Platform, private glu::Platform, private eglu::Platform
{
public:
ANGLEPlatform(angle::LogErrorFunc logErrorFunc, uint32_t preRotation);
~ANGLEPlatform();
bool processEvents() override;
const glu::Platform &getGLPlatform() const override
{
return static_cast<const glu::Platform &>(*this);
}
const eglu::Platform &getEGLPlatform() const override
{
return static_cast<const eglu::Platform &>(*this);
}
private:
// Note: -1 represents EGL_DONT_CARE, but we don't have the EGL headers here.
std::vector<eglw::EGLAttrib> initAttribs(eglw::EGLAttrib type,
eglw::EGLAttrib deviceType = -1,
eglw::EGLAttrib majorVersion = -1,
eglw::EGLAttrib minorVersion = -1);
EventState mEvents;
angle::PlatformMethods mPlatformMethods;
std::vector<const char *> mEnableFeatureOverrides;
};
} // namespace tcu
tcu::Platform *CreateANGLEPlatform(angle::LogErrorFunc logErrorFunc, uint32_t preRotation);
#endif // TCU_ANGLE_PLATFORM_H_