Hash :
82826be0
Author :
Date :
2023-01-06T11:20:14
Reland "Make ANGLE program version only dependent on data that matters"
This is a reland of commit 61728827d2e5ecce685578bc54bb2c744b65fc9a
Changes made on top of previous commit
1. In src/program_serialize_data_version.py,
fix the script error on Windows: anglebug.com/7918.
2. In BUILD.gn, replace the 'write_file' with
'response_file_content'. See
https://gn.googlesource.com/gn/+/main/docs/reference.md#var_response_file_contents
3. In scripts/generate_android.bp.py, add code to
handle the special GN build flag {{response_file_name}}.
The code writes the list defined in srcs
(identified by $(in) in Android blueprint) into a
temp file named 'gn_response_file', and replaces the
{{response_file_name}} with 'gn_response_file'.
Original change's description
> Changes made on top of original commit
> 1. Enable execution permission on python script
> program_serialize_data_version.py
> 2. Remove unused list in libGLESv2.gni
> 3. In angle/BUILD.gn, change file path from
> "relative to angle_root", to "relative to root_build_dir",
> so that inside the script program_serialize_data_version.py,
> we don't have to find the absolute path of the code files for
> hashing.
> Original change's description
> > This change introduces a new variable ANGLE_PROGRAM_VERSION
> > to track the version of ANGLE source files that affect shader
> > program serialization/deserialization. This change include more
> > source files than necessary, to serve the purpose of a conservative
> > jumping off point. We will narrow down the list of files for
> > ANGLE_PROGRAM_VERSION hash generation in the future.
> > Add a new script program_serialize_data_version.py that will
> > be triggered during the build when the related source files changed.
> > The script will generate a hash and the hash size from the related
> > source files. In program serialization/deserialization and cache
> > key generation, we will use this hash value instead of the entire
> > ANGLE git hash. When the hash value changed, we know that the
> > related source files changed, and we should invalidate the program
> > cache and re-generate the blob cache / program binary.
> > Bug: angleproject:4981
> > Change-Id: I2fb609416738d459d3289190c232c2d797ba58e3
> > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4072215
> > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
> > Reviewed-by: Cody Northrop <cnorthrop@google.com>
> > Reviewed-by: Jamie Madill <jmadill@chromium.org>
> > Commit-Queue: Yuxin Hu <yuxinhu@google.com>
> Bug: angleproject:4981
> Change-Id: Iaa9eb0ab33439197bc30d03064fc245ea7ef1ea8
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4113445
> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
> Reviewed-by: Cody Northrop <cnorthrop@google.com>
> Commit-Queue: Yuxin Hu <yuxinhu@google.com>
Bug: angleproject:4981
Change-Id: Ib5bba199be6d08a1e19807026df0e7b747dbc8a9
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4144078
Reviewed-by: Roman Lavrov <romanl@google.com>
Commit-Queue: Yuxin Hu <yuxinhu@google.com>
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
# Copyright 2022 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.
# Define a list of source files that ANGLE_PROGRAM_VERSION hash value is
# generated from. When any of the files listed below changes, the
# ANGLE_PROGRAM_VERSION should change and we will invalidate shader program
# cache blobs: applications will compile shader programs from scratch and not
# loading from blob caches.
# The path of all the files added to angle_code_affecting_program_serialize
# must be relative to angle_root.
import("libANGLE/renderer/d3d/d3d_backend.gni")
import("libANGLE/renderer/gl/gl_backend.gni")
import("libANGLE/renderer/metal/metal_backend.gni")
import("libANGLE/renderer/null/null_backend.gni")
import("libANGLE/renderer/vulkan/vulkan_backend.gni")
import("libGLESv2.gni")
angle_code_affecting_program_serialize = libangle_common_sources
angle_code_affecting_program_serialize += libangle_headers
angle_code_affecting_program_serialize += libangle_sources
angle_code_affecting_program_serialize += libangle_includes
vulkan_backend_dir = "libANGLE/renderer/vulkan/"
angle_code_affecting_program_serialize +=
rebase_path(vulkan_backend_sources, angle_root, vulkan_backend_dir)
gl_backend_dir = "libANGLE/renderer/gl/"
angle_code_affecting_program_serialize +=
rebase_path(gl_backend_sources, angle_root, gl_backend_dir)
d3d_backend_dir = "libANGLE/renderer/d3d/"
angle_code_affecting_program_serialize +=
rebase_path(d3d_shared_sources, angle_root, d3d_backend_dir)
if (angle_enable_d3d9) {
angle_code_affecting_program_serialize +=
rebase_path(d3d9_backend_sources, angle_root, d3d_backend_dir)
}
if (angle_enable_d3d11) {
angle_code_affecting_program_serialize +=
rebase_path(d3d11_backend_sources, angle_root, d3d_backend_dir)
}
null_backend_dir = "libANGLE/renderer/null/"
angle_code_affecting_program_serialize +=
rebase_path(null_backend_sources, angle_root, null_backend_dir)
metal_backend_dir = "libANGLE/renderer/metal/"
angle_code_affecting_program_serialize +=
rebase_path(metal_backend_sources, angle_root, metal_backend_dir)
if (angle_has_frame_capture) {
angle_code_affecting_program_serialize += libangle_capture_sources
}