|
b16d105f
|
2024-10-03T10:25:32
|
|
Remove Desktop GL front-end support
For Desktop GL applications, please use Zink!
Bug: angleproject:370937467
Change-Id: Ie734634bb62a2e98c80e1b32d8b3d34624da3c04
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5905428
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
da572160
|
2024-07-23T16:36:10
|
|
Reland: GL: Forward client-side arrays to the driver when possible
The OpenGL driver can handle client-side arrays when the context is
OpenGL ES or a desktop GL compatibility profile. When in these
situations, use the driver default VAO for all frontend context VAOs
and forward client-side data directly to the driver.
Fix synchronizing the default VAO state for external contexts. There
is no valid VertexArrayStateGL for external VAOs so make sure it's
nulled and the VAO dirty bits are set so the correct VAO state is
reapplied.
Disable syncing to the default VAO for external contexts. The only
VAO that they can share with ANGLE's internal state is the default
VAO so avoid having to save and restore its state.
Bug: angleproject:355034686
Change-Id: I015bbbc854938fe4bc1e92d0ca8fe04628d0db16
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5743284
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
|
|
b98c4d81
|
2024-07-23T09:09:37
|
|
FrameCapture: Add restore of VAO buffer binding
If the VAO was changed before the trace started, but no
buffers were bound during replay, the VAO buffer binding
was not properly reset.
Test: angle_trace_tests --gtest_filter=*shovel_knight_pocket_dungeon
Bug: b/354888763
Change-Id: I76f94e5d219b88c641528049034d92ee55161f56
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5734653
Commit-Queue: Mark Łobodziński <mark@lunarg.com>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
|
|
93491ae3
|
2024-06-21T08:04:24
|
|
FrameCapture: Handle active texture in MEC
When restoring texture bindings and contents, we need to first
set the correct GL_ACTIVE_TEXTURE, otherwise it will use existing
active texture bindings and update the wrong textures.
Test: Grand Mountain Adventure MEC
Bug: angleproject:345851268
Change-Id: I7c6c4a918513d4216405efe51774fcce4b49b45e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5647491
Commit-Queue: Cody Northrop <cnorthrop@google.com>
Reviewed-by: Mark Łobodziński <mark@lunarg.com>
|
|
0e598a0c
|
2024-07-17T09:49:19
|
|
FrameCapture: Unbind PIXEL_UNPACK_BUFFER for texture restore
When restoring textures, we need to ensure the PIXEL_UNPACK_BUFFER
is not bound, as that will influence where we pull data from.
Allow per-context reset to restore the correct binding.
Test: Grand Mountain Adventure MEC
Bug: angleproject:345851268
Change-Id: I636f3780f8454d04152ff7bf7ba15d039ee41872
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5718285
Commit-Queue: Cody Northrop <cnorthrop@google.com>
Reviewed-by: Mark Łobodziński <mark@lunarg.com>
|
|
98ff1c14
|
2024-07-17T09:45:03
|
|
FrameCapture: Improve buffer binding reset
We aren't correctly tracking and resetting buffer bindings, which are
per-context. To restore them, we need to track the bindings at the
beginning and mark them dirty. Before this we were doing it in
ResetReplayContextShared based on the object dirty state.
Test: Grand Mountain Adventure MEC
Bug: angleproject:345851268
Change-Id: Ic3db583c88bec9c680197f71ff11fdf69efdf630
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5610332
Reviewed-by: Mark Łobodziński <mark@lunarg.com>
Commit-Queue: Cody Northrop <cnorthrop@google.com>
|
|
eda67d7e
|
2024-07-11T11:16:08
|
|
Avoid including fstream from angleutils.h
SaveFileHelper is mostly useful for / specific to FrameCapture,
so move it there.
The other couple of uses just write a string.
Bug: angleproject:42266508
Change-Id: Ia1dcd4531f9d5671f40611a1887dcfe7c5dbc1ef
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5696025
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Roman Lavrov <romanl@google.com>
|
|
1917377f
|
2024-06-07T17:02:33
|
|
Capture/Replay: Write comments to the capture
Useful for tracking why things are happening in the frame, from the
perspective of the tracer.
Allows for entries like this:
// DEBUG: AttachShader called, checking for IDs;
glAttachShader(gShaderProgramMap2[6943], gShaderProgramMap2[1531]);
// DEBUG: AttachShader called, checking for IDs;
glAttachShader(gShaderProgramMap2[6943], gShaderProgramMap2[1511]);
Good for debugging or knowing we've skipped invalid/unsupported calls.
This CL includes one use of comments to mark calls we've skipped,
meaning the app or ANGLE submitted them, but omitted from capture.
Bug: angleproject:345851268
Change-Id: Ied917c7480704afc3fdfb8cbb617b323eb7403a5
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3233876
Reviewed-by: Mark Łobodziński <mark@lunarg.com>
Commit-Queue: Cody Northrop <cnorthrop@google.com>
Reviewed-by: Roman Lavrov <romanl@google.com>
|
|
d193d51b
|
2024-06-17T22:46:08
|
|
Replace issue ids post migration to new issue tracker
This change replaces anglebug.com/NNNN links.
Bug: None
Change-Id: I8ac3aec8d2a8a844b3d7b99fc0a6b2be8da31761
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5637912
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
be78da6e
|
2024-05-22T15:33:46
|
|
FrameCapture: log end of trace capture
This makes it easy to spot when the capture is done through logcat.
Bug: angleproject:343190307
Change-Id: Idf174cbf256242e32cda3c781c8b1092123254bb
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5557966
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Commit-Queue: Cody Northrop <cnorthrop@google.com>
Commit-Queue: Bruno BELANYI <ambroisie@google.com>
|
|
a1665d2f
|
2024-05-10T00:15:31
|
|
Reland "Document thread-unsafe iterator access to resource maps"
This is a reland of commit d1bb6ed8399dd12e79484f30f9e9ded95c25625a
The crash was due to another issue (disabling EGL validation in
Chrome)
Original change's description:
> Document thread-unsafe iterator access to resource maps
>
> By using a proxy type, everywhere resource maps are iterated are clearly
> marked as not being thread safe. In most cases, only destruction and
> capture/replay iterate over these maps, which means thread safety is not
> an issue (or is externally enforced).
>
> The only case where iterators are used in the presence of other contexts
> is with ANGLE_request_extension, which is changed to explicitly require
> the application to ensure thread safety. In practice, the user is
> Chrome which already guarantees this.
>
> Bug: angleproject:8667
> Change-Id: I7af13c6433b6955d9c36f9088b3aa4c065e1cfc1
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5526428
> Reviewed-by: Charlie Lao <cclao@google.com>
> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Bug: angleproject:8667
Change-Id: Id539cabac01df5f242150f6684222577003eef3f
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5531278
Reviewed-by: Charlie Lao <cclao@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
4e887491
|
2024-05-11T18:08:03
|
|
Revert "Document thread-unsafe iterator access to resource maps"
This reverts commit d1bb6ed8399dd12e79484f30f9e9ded95c25625a.
Reason for revert: Checking to see if it's the reason
for crbug.com/339948886
Original change's description:
> Document thread-unsafe iterator access to resource maps
>
> By using a proxy type, everywhere resource maps are iterated are clearly
> marked as not being thread safe. In most cases, only destruction and
> capture/replay iterate over these maps, which means thread safety is not
> an issue (or is externally enforced).
>
> The only case where iterators are used in the presence of other contexts
> is with ANGLE_request_extension, which is changed to explicitly require
> the application to ensure thread safety. In practice, the user is
> Chrome which already guarantees this.
>
> Bug: angleproject:8667
> Change-Id: I7af13c6433b6955d9c36f9088b3aa4c065e1cfc1
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5526428
> Reviewed-by: Charlie Lao <cclao@google.com>
> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Bug: angleproject:8667
Change-Id: I1245c9e57dfeb27a7f0e5718b1455614c70bc0dc
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5532187
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Commit-Queue: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
d1bb6ed8
|
2024-05-10T00:15:31
|
|
Document thread-unsafe iterator access to resource maps
By using a proxy type, everywhere resource maps are iterated are clearly
marked as not being thread safe. In most cases, only destruction and
capture/replay iterate over these maps, which means thread safety is not
an issue (or is externally enforced).
The only case where iterators are used in the presence of other contexts
is with ANGLE_request_extension, which is changed to explicitly require
the application to ensure thread safety. In practice, the user is
Chrome which already guarantees this.
Bug: angleproject:8667
Change-Id: I7af13c6433b6955d9c36f9088b3aa4c065e1cfc1
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5526428
Reviewed-by: Charlie Lao <cclao@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
|
|
c3a1cae4
|
2024-04-15T14:58:55
|
|
Use angle::SimpleMutex everywhere in libGLESv2
Only cases left that use std::mutex are:
- Share group and the context ErrorSet mutexes as they need try_lock()
- Anywhere mutexes are used in conjunction with std::condition_variables
(as they explicitly require std::mutex)
Bug: angleproject:8667
Change-Id: Ib6d68938b0886f9e7c43e023162557990ecfb300
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5453294
Reviewed-by: Roman Lavrov <romanl@google.com>
Reviewed-by: Charlie Lao <cclao@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
e3a58b25
|
2024-04-11T09:33:55
|
|
FrameCapture: Support deferred linking of shaders
Modern Combat 5 creates and attaches programs and shaders but
defers compiling and linking until needed. Added support in
the tracer for this corner case and updated CapturedTest
to exercise this behavior as well.
Test: angle_end2end_tests --gtest_filter=CapturedTest.MultiFrame/ES3_Vulkan
Bug: b/334030316
Change-Id: Ib7fdf0fe25b11cdb3df33d50e49501f3a51e9510
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5449599
Commit-Queue: Mark Łobodziński <mark@lunarg.com>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
|
|
71e5a43f
|
2024-03-26T14:03:14
|
|
FrameCapture: Don't use shadow memory on Pixel after Android 14
The platform bug that required shadow memory to track changes to
coherent mapped buffers has been fixed in Android 14.
mprotect now works on Vulkan surfaces.
Test: MEC with title using coherent buffers
Bug: angleproject:7402
Bug: b/269535398
Change-Id: I370f29ee7d033b19facf48cfd76576950c39b735
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5399117
Reviewed-by: Mark Łobodziński <mark@lunarg.com>
Reviewed-by: Mike Schuchardt <mikes@lunarg.com>
Auto-Submit: Cody Northrop <cnorthrop@google.com>
Commit-Queue: Mark Łobodziński <mark@lunarg.com>
|
|
7cb518bc
|
2024-03-14T18:10:08
|
|
Reset shader images modified during trace
ANGLE will track and restore texture resources modified during
replay by reinitializing them in the Reset function, but shader
images resources modified by glDispatchCompute calls were
unhandled.
Test: angle_trace_tests --gtest_filter=*poppy_playtime
Bug: b/329824015
Change-Id: I2852b5a3cecdd2e2213ea457ea43e7cf84741986
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5375541
Commit-Queue: Mark Łobodziński <mark@lunarg.com>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
|
|
56a291e8
|
2024-02-01T02:30:02
|
|
Rework external image capture
Move external image creation into the trace fixture. Record image size
at capture time and then recreate it using a GL staging texture and
placeholder data during replay if the original client buffer is missing
(MEC) or the image was created from another API (AHB).
Track when EGLImages are created and destroyed during capture so they
can be restored to their original MEC state at reset time. Clean up
the backing GLTexture resources when the corresponding EGLImage is
destroyed.
In cases where EGL calls are made without an associated GL context, look
up and active context to use from the passed in EGLDisplay parameter.
Bug: b/300966403
Change-Id: I7033fa25d2cb3a59957887439506f6f6a416c8f1
Test: Trace com.square_enix.android_googleplay.FFVII
Test: Trace com.MOBGames.PoppyMobileChap1
Test: Trace com.tocaboca.tocalifeworld
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4903441
Reviewed-by: Cody Northrop <cnorthrop@google.com>
|
|
9ca81c7e
|
2024-01-21T13:35:06
|
|
FrameCapture: Handle zero vertex count draws
Seeing the following from GLES1 (note count = 0):
glDrawArrays(context = 1, mode = GL_POINTS, first = 0, count = 0)
This crahes in FrameCaptureShared::captureClientArraySnapshot:
'length_error was thrown in -fno-exceptions mode with message "vector"'
The function assumes vertexCount will always be greater than zero.
This CL updates it to detect the empty case and simply return.
Negative counts are already handled as a GL error.
Test: Plague Inc MEC
Bug: b/321562592
Change-Id: I3613eaac297a3471dc998b023bf2658413cb5d1b
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5250427
Commit-Queue: Cody Northrop <cnorthrop@google.com>
Reviewed-by: Mike Schuchardt <mikes@lunarg.com>
|
|
0c4d6446
|
2024-01-24T10:38:45
|
|
Rework uniform block <-> uniform buffer mapping
In GLES, the shader declares which buffer binding a block (uniform,
storage or atomic counter) is bound to. For example:
layout(binding = 1) uniform ubo0 { ... };
layout(binding = 2) uniform ubo1 { ... };
layout(binding = 1) uniform ubo2 { ... };
In the above, ubo0 and ubo2 use data from the buffer bound to index 2
(through glBindBufferRange), while ubo1 uses data from the buffer bound
to index 1. For uniform blocks in particular, omitting the binding
is allowed, in which case it is implicitly bound to buffer 0.
GLES allows uniform blocks (and only uniform blocks) to remap their
bindings through calls to glUniformBlockBinding. This means that the
mapping of uniform blocks in the program (ubo0, ubo1, ubo2) to the
buffer bindings is not constant. For storage blocks and atomic counter
buffers, this binding _is_ constant and is determined at link time.
At link time, the mapping of blocks to buffers is determined based on
values specified in the shaders. This info is stored was stored in
gl::InterfaceBlock::binding (for UBOs and SSBOs), and
gl::AtomicCounterBuffer::binding. For clarity, this change renames
these members to ...::inShaderBinding.
When glUniformBlockBinding is called, the mapping is updated. Prior to
this change, gl::InterfaceBlock::binding was directly updated, trumping
the mapping determined at link time. A bug here was that after a call
to glProgramBinary, GL expects the mappings to reset to their original
link-time values, but instead ANGLE restored the mappings to what was
configured at the time the binary was retrieved.
This change tracks the uniform block -> buffer binding mapping
separately from the link results so that the original values can be
restored during glProgramBinary. In the process, the support data
structures for tracking this mapping are moved to ProgramExecutable and
the algorithms are simplified. Program Pipeline Objects maintain this
mapping identically to Programs and no longer require a special and more
costly path when a buffer state changes.
This change prepares for but does not yet fix the more fundamental bug
that the dirty bits are tracked in the program executable instead of the
context state, which makes changes not propagate to all contexts
correctly.
Bug: angleproject:8493
Change-Id: Ib0999f49be24db06ebe9a4917d06b90af899611e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5235883
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
e9aa41f5
|
2023-11-06T15:00:33
|
|
Trace/Replay: Add multi-context call grouping
Instead of inserting eglMakeCurrent calls into the command
stream where context changes occur in the traced application,
track the context for all calls. During trace generation
output calls grouped by context while preserving
synchronization, reducing the number of context switches
and improving performance.
Test: Capture Diablo Immortal or Asphalt 9 trace and replay
Bug: b/300965096
Change-Id: Ia02e0ddf0440ac8a9a0ef3b6af67788f2f147809
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4909217
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Commit-Queue: Mark Łobodziński <mark@lunarg.com>
|
|
35e49df7
|
2023-12-11T21:16:57
|
|
FrameCapture: Skip eglQueryContext
We don't use the return value of the call, so it can
be omitted from the capture.
Test: Flip capture
Bug: b/308208067
Change-Id: Ib3dfea2b7bd5638092bd691e66c6b9e2b6fabf15
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5112776
Reviewed-by: Mike Schuchardt <mikes@lunarg.com>
Commit-Queue: Cody Northrop <cnorthrop@google.com>
|
|
9b66848f
|
2023-12-11T20:54:30
|
|
FrameCapture: Handle context Reset with no calls
The code was assuming that setDefaultResetCalls adds
reset calls for an entry point, but it has logic for
skipping if the current state is already default.
This CL checks to see if we added any calls for the
entry point before trying to iterate through them.
Test: Flip capture
Bug: b/308208067
Change-Id: I8a214b0eb0df068d6b3172c0ca1406f6751f91ea
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5114271
Reviewed-by: Mike Schuchardt <mikes@lunarg.com>
Commit-Queue: Cody Northrop <cnorthrop@google.com>
|
|
bc301691
|
2023-12-07T00:00:00
|
|
Run PackUnpackTest on all backends
Fixed negative zero serialization for capture/replay.
Bug: angleproject:4092
Change-Id: Ic12a556f56e40064da8bf3a8ce7d01af92c7086a
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5106509
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
c27a4a1d
|
2023-11-27T14:44:07
|
|
Re-use EGL sync object allocations.
Create a pool of EGL sync objects with their implementations that can
be re-used. Update all backend implementations to support multiple
calls to initialize/destroy.
Pool size of 32 chosen through experimentation using Chrome.
Bug: angleproject:8430
Change-Id: I86fea41aed35eddccc953efb3802bf5fdb7f3cb2
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5063341
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
|
|
53c5b145
|
2023-10-10T09:42:08
|
|
Capture/Replay: Restore texture bindings on reset
Store active texture unit and all bound textures at capture start. Track
dirty state for each unit+target pair during capture. Restore bound
textures for each dirty binding unit when resetting context state. Also
restore active texture unit if necessary.
Test: Capture The Sims Mobile
Bug: angleproject:4599
Change-Id: Iae3e03e6c5b0a35d5bb95bf07397d7894355502b
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4927869
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Commit-Queue: Mike Schuchardt <mikes@lunarg.com>
|
|
03eea365
|
2023-09-25T17:50:51
|
|
ANGLE Tracer: Mark FBAttachment texture resources as active
If a texture and framebuffer were set up before capture and
referenced during a capture, the texture resource would not
be set as active and the trace may fail.
Test: Capture a Diablo Immortal trace and attempt to replay
Bug: b/301999483
Change-Id: I5ea114e65b11479a5cdbf496dc8c5ab4eeadbf55
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4893251
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Commit-Queue: Mark Łobodziński <mark@lunarg.com>
|
|
ca4dc52e
|
2023-06-22T15:20:12
|
|
Replace (Single/Shared)ContextMutex classed with ContextMutex
This CL removes `SingleContextMutex` class and not 100% safe
`Context::lockAndActivateSharedContextMutex()` method.
`SharedContextMutex<>` was replaced with `ContextMutex` with static
mutex type which is defined in "SharedContextMutex.h":
- ContextMutexType = std::mutex
Above refactoring also allows storing `State::mContext` by value,
instead by pointer. Actual mutex is referenced by `ContextMutex::mRoot`
member. This removes extra pointer indirection and slightly improves
performance.
If newly created Context uses shared textures/samplers, then it uses
`Display::mManagersMutex` root as its root.
Performance in Single/Shared cases now will be the same, and it should
be slightly faster then old Shared case (because of the reduced
complexity).
Bug: angleproject:8226
Change-Id: I7ca4d9ea008c665cbea98ace1c6e7bbc544f54b5
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4632729
Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
Reviewed-by: Charlie Lao <cclao@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
eb0d5997
|
2023-09-15T16:41:13
|
|
Move set/get uniform machinery to ProgramExecutable
This is done because some uniforms are internally added by the compiler
(draw ID, base vertex, and base instance) and are automatically set **on
the installed executable**.
This change fixes scenarios where a draw is done after a program has
failed a relink, and therefore is unable to correctly set the uniforms
(as it does not have access to the executable that is installed).
It also fixes draws that use those uniforms in a PPO.
Bug: angleproject:8297
Change-Id: Id74b4984b88aa09b5b81be1c91412d6c91711136
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4864693
Reviewed-by: Charlie Lao <cclao@google.com>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
29561184
|
2023-09-06T22:08:33
|
|
Remove forward-to-executable helpers from program
This helps avoid accidental usage of the executable that is in the
program instead of the installed executable in the GL context.
The program's executable is still accessed in specific cases of:
- During link
- GL program queries
Bug: angleproject:8297
Change-Id: I40a956e740944f2ecfbf6e4a3060aac08c21f7f3
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4864448
Commit-Queue: Yuxin Hu <yuxinhu@google.com>
Reviewed-by: Charlie Lao <cclao@google.com>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
1249fc1f
|
2023-09-07T14:39:26
|
|
Tests: Support capture_tests on Android and enable on CI
Enables angle_with_capture_by_default = true on Android bots
similarly to Linux and Windows.
Enables the capture test on Pixel 4 and 6 bots (it takes only a few
seconds to run)
Enables support for capture in android_helper in general.
For example, this now works the same way it would on say Linux, but
runs the capture on the device an pulls files to OUT_DIR.
% ANGLE_CAPTURE_LABEL=gacha_club ANGLE_CAPTURE_OUT_DIR=/tmp/capt2 ANGLE_CAPTURE_FRAME_START=16 ANGLE_CAPTURE_FRAME_END=16 out/AndroidPerformance/angle_trace_tests --gtest_filter=TraceTest.gacha_club --use-angle=vulkan --retrace-mode --max-steps-performed=20
For end2end tests it's a bit trickier as we're still using the Chromium
wrappers for e.g. out/AndroidPerformance/angle_end2end_tests - which is
why capture_tests.py is currently using angle_android_test_runner.py
Bug: b/296397568
Change-Id: I2606e74a17c90e381bb49ec8d555a6d24851b4f7
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4850889
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Commit-Queue: Roman Lavrov <romanl@google.com>
|
|
fce1e574
|
2023-09-08T14:21:58
|
|
FrameCapture: Skip output dir check if disabled
* In order to improve performance and avoid errors when running
with capture support, change the output dir checks to be optional.
* The checks are expensive on Android due to reading the process
name and filesystem locations.
* We want want to continue emitting errors if the user wants to
capture but didn't create the output dir.
Test: Android apps with and without capture enabled via properties
Bug: b/296397568
Change-Id: If3adbe0c569db49fd8e8e430b7c57ae8585ca4d7
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4854443
Reviewed-by: Roman Lavrov <romanl@google.com>
Commit-Queue: Cody Northrop <cnorthrop@google.com>
|
|
9c0748d3
|
2023-08-16T09:15:22
|
|
Capture/Replay: Trim inactive Texture resources
As is done with Shader and Program objects, trim inactive Texture
objects from default trace execution playback and update
CapturedTest with new use cases.
Bug: b/297031925
Change-Id: I734d8f1fa66a24be7790391deaeee24cf570d12a
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4802281
Reviewed-by: Roman Lavrov <romanl@google.com>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Commit-Queue: Mark Łobodziński <mark@lunarg.com>
|
|
7b0bb0f6
|
2023-09-01T13:52:28
|
|
Properly "install" program executables
According to GL:
- The program has an executable
- The executable is overwritten during link.
- After a failed link, queries of the executable may return
half-linked information
- On glUseProgram, the executable is installed in the context
- On glUseProgramStages, the executable is installed in the program
pipeline
- After a successful link, the executable is updated wherever the
previous executable of the program was installed.
This change implements exactly the above:
- The program's and the program pipeline's executables are now
shared_ptr. References to an executable in the context and PPO are
also through a shared_ptr. Installing an executable thus translates
to sharing the executable.
- The context and PPOs are made to not reference the program directly,
but work solely through the executable. As a result, the program is
free to create a new executable for link.
With this change, the link job will be free to modify the executable as
necessary because that will not be accessed until the link is done.
Note that previous changes made the backend executable accessed through
the frontend one, and moved all link results to the frontend and backend
executables as appropriate.
Bug: angleproject:6358
Bug: angleproject:8297
Change-Id: Ie636b23ff7420ad284d18b525ec4f5fb559dd9d1
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4823089
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
|
|
33be2590
|
2023-08-30T21:58:54
|
|
Move transform feedback buffer mode to program state
This is link input and should persist between relinks. A copy of it is
still left in ProgramExecutable as it is used later after the executable
is installed (and the program might get relinked; a future change
reworks things so that the installed executable and the originating
program are independent).
Bug: angleproject:8297
Change-Id: Ifba6ac18ea09fd804b89d8fdb14930ef3d839cf4
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4827764
Reviewed-by: Charlie Lao <cclao@google.com>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
f3c1de36
|
2023-08-17T15:29:24
|
|
Make shader recompile while parallel linking safe
Prior to this change, Program* objects held references to Shader*
objects. This poses a problem where a shader recompile can race with a
program link, if the program link is done in parallel.
As a result, a good chunk of the link job is done serially and under the
share group lock. After this change, that is no longer a problem, and
most of the link can be made lockless/parallelized.
This change separates out the "compiled state" from the rest of the
shader state. This was already done for the front-end state (for the
sake of caching), but is also now done for the backends that need it.
The compiled state in turn is placed in a shared_ptr, and is shared with
the program. When a shader is compiled, its own shared_ptr is replaced
with a new object, leaving all programs currently compiling unaffected
and using the previous compilation results.
Once a program is linked, its references to compiled shader states is
updated.
Bug: angleproject:8297
Change-Id: Iff7094a37088fbad99c6241f1c48b0bd4c820eb2
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4791065
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
|
|
d85de0e9
|
2023-08-09T14:15:56
|
|
Capture/Replay: Add optional replay of trimmed resources
This CL:
- Adds '--include-inactive-resources' option to
angle_trace_tests
- Removes the 'trim-enabled' option
- Outputs all previously trimmed shaders/programs to trace file
in a new Setup function, SetupReplayContextSharedInactive()
which is executed only if the new option is specified
- Modifies CaptureTest to add inactive resources, but does not
set the include-inactive-resources flag
Bug: b/296055694
Change-Id: I33b18d5da727d55c90c2012c2bf64b1413521429
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4781552
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Commit-Queue: Mark Łobodziński <mark@lunarg.com>
Reviewed-by: Roman Lavrov <romanl@google.com>
|
|
1e1c9d9d
|
2023-08-11T15:16:26
|
|
Pack and reduce Program::mProgramInput size
Right now mProgramInput is std::vector<sh::ShaderVariable>. It really
only need a subset of ShaderVariable struct. This CL adds a ProgramInput
struct so that we can add data members that actually required. This CL
also makes bools into bitfield and some variables to uint16_t to further
compact the size. This CL also groups the data memebers other than
string to basicDataTypeStruct which only contains basic data types and
the entire struct is memcpied during program binary load and save. This
not just reduces number of memcpy calls, but also improves reliability
so that when someone adds a new member into the struct, it will
automatically load/save correctly.
Bug: b/275102061
Change-Id: Ic055c986453ed46e56057a0122c9926245fef4d1
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4776267
Reviewed-by: Roman Lavrov <romanl@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Charlie Lao <cclao@google.com>
|
|
719165c8
|
2023-08-04T12:13:37
|
|
Remove "const UniformTypeInfo *typeInfo" from struct LinkedUniform
This is a cached pointer to the const kInfoTable. There isn't much of
performance benefit to cache here compare to directly retrieve from the
table. This cached pointer is removed in this CL, which means we do not
need to update the pointer in the ProgramExecutable::load().
This and a few earlier CLs that attempt to do memcpy for entire
mUniforms reduced average frame time of blade_and_soul_revolution app
trace 3%, from 4.3359 ms to 4.2066ms on pixel 7 pro.
Bug: b/275102061
Change-Id: I6fd34d665234e3a5cc85344924049bf5b13aaa80
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4753933
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Charlie Lao <cclao@google.com>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
|
|
eff12c1e
|
2023-08-03T12:10:05
|
|
Move name and mappedName out of LinkedUniform struct
These are std::string objects. This CL moves these two data out of
LinkedUniform and into ProgramExecutable class, side by side with
mUniforms. With these two data moved out, LinkedUniform is now a simple
struct with basic data types, and I can memcpy entire vector of
uniforms.
Bug: b/275102061
Change-Id: I9ae13e7daca85f8e5f3662a4718f190bebb5f5d2
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4750442
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Charlie Lao <cclao@google.com>
|
|
9c588180
|
2023-08-02T16:39:44
|
|
Change LinkedUniform::arraySizes from std::vector to unsigned int
We always flatten multiple dimensional arrays in the uniform to a one
dimensional array, so the arraySizes can be simplified to unsigned int
instead of a vector. With this, we can now move the arraySize into the
simple mFixedSizeData struct and the normal memcpy will cover the
load/save.
Bug: b/275102061
Change-Id: I24c026f783b755f7aa691a5db5746b6309a21227
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4735275
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Charlie Lao <cclao@google.com>
|
|
ee019f58
|
2023-08-01T17:03:24
|
|
Group fixed sized data of LinkedUniform into a struct
Most of gl::LinkedUniform struct is a basic types and can be simply
initialized with memcpy. This CL groups these together and encapsulate
them with get APIs. The load/save is now a single memcpy for the entire
fixed size data structure of basic types.
Bug: b/275102061
Change-Id: I49120c06ec941c783790ac0ecb0ee314a4234b26
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4740298
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Roman Lavrov <romanl@google.com>
Commit-Queue: Charlie Lao <cclao@google.com>
|
|
52fe3116
|
2023-07-17T16:20:54
|
|
Vulkan: Deduplicate share group's context set tracking
Bug: angleproject:8224
Change-Id: I7a59a37229682fb91ff777f31e02e05d7ab2b80f
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4690345
Reviewed-by: Charlie Lao <cclao@google.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
40111c68
|
2023-07-11T14:21:21
|
|
Rename context-local to context-private state
Bug: angleproject:8224
Change-Id: I1bb39475043f8fb14d683d11a038b4850692a8c6
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4678781
Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Charlie Lao <cclao@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
72c26926
|
2023-07-05T16:31:23
|
|
Make pack/unpack and hint entry points lockless
These entry points only set context-local state and thus don't require
locking.
Bug: angleproject:8224
Change-Id: I5694d319df61a7a9df1766cf1f723b9a05208209
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4666352
Reviewed-by: Igor Nazarov <i.nazarov@samsung.com>
Reviewed-by: Charlie Lao <cclao@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
44395930
|
2023-07-05T11:59:23
|
|
Make various state setting entry points lockless
These entry points only set context-local state and thus don't require
locking.
Bug: angleproject:8224
Change-Id: I428c23cc862e9356d571bc085b5df0bf48017175
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4661700
Reviewed-by: Igor Nazarov <i.nazarov@samsung.com>
Reviewed-by: Charlie Lao <cclao@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
36c3e0f5
|
2023-01-17T17:42:59
|
|
Implement "Shared Context Mutex" functionality.
Existing implementation uses single `GlobalMutex` for
- EGL calls
- GL calls for Contexts with concurrent access.
This CL introduces abstract `egl::ContextMutex` with two
implementations:
- SingleContextMutex;
- SharedContextMutex<Mutex>;
Note:
`std::mutex` is used in this commit. It is very easy to change mutex
type either at compile-time or at run-time (single type per Display).
When Context:
- is not Shared;
- does not use `EGLImage`s;
- does not use EGL_DISPLAY_TEXTURE_SHARE_GROUP_ANGLE
- does not use EGL_DISPLAY_SEMAPHORE_SHARE_GROUP_ANGLE
then it will be using `SingleContextMutex` with minimal overhead.
Before such Context is used as `shareContext` or uses `EGLImage`
its mutex replaced by `SharedContextMutex<Mutex>`.
The `GlobalMutex` is only used for EGL calls, while `egl::ContextMutex`
implementations for GL calls. Because some EGL calls use Context,
explicit `egl::ContextMutex` lock is required. This is implemented by
generating "egl_context_mutex_autogen.h" header, and insertion of
`ANGLE_EGL_SCOPED_CONTEXT_LOCK()` macro before `ANGLE_EGL_VALIDATE()`
in each EGL entry point. Implementation in "egl_context_lock_impl.h"
returns lock for required APIs. Special cases of `egl::ContextMutex`
lock handled separately. `std::unique_lock<>` is not used for
performance reasons.
`egl::ContextMutex` explicitly locked when capturing EGL calls.
Fixes EGLImage problem:
https://chromium.googlesource.com/angle/angle/+/e18240d136d15e5cdfa4fa4a6355ca21c8d807b6
Mark contexts as shared when importing EGL images.
Details:
- EGLImage inherits Context's mutex when created.
Mutex is used when the EGLImage accessed or destroyed.
- When EGLImage is used in Context with other `egl::ContextMutex`,
two mutexes are merged into one.
- After the mutex merge, Context Groups will remain separate,
but will not be able to run in parallel.
Fixes race when checking `context->isShared()` in the
`SCOPED_SHARE_CONTEXT_LOCK()` macro. One Context may start executing GL
call while not "Shared", but become "Shared" inside the call. New
(second) "Shared" Context may immediately start using GL and potentially
corrupt some "Shared" state.
Possible performance benefit: allows parallel execution in some cases,
when single `GlobalMutex` would block.
Important note:
Process of replacing the `SingleContextMutex` by
`SharedContextMutex<Mutex>` is not 100% safe. This mean that
original Context may still be using `SingleContextMutex` after
activating `SharedContextMutex<Mutex>`. However, this was always
the case before introduction of this CL. Old `Context::mShared`
member update was not synchronized in any way at all. In other
words, this solution does not 100% fix the original problem.
For 100% safe solution `SingleContextMutex` should not be used
(always pass `SharedContextMutex<Mutex>` to the `gl::Context`
constructor). See `lockAndActivateSharedContextMutex()` for more
details.
CL adds new build option:
angle_enable_shared_context_mutex = true
Behavior with other build options:
- When:
`angle_enable_shared_context_mutex` is disabled or
`angle_enable_share_context_lock` is disabled or
`angle_force_context_check_every_call` is enabled,
Contexts will always have `SingleContextMutex`, however it will be
only used in special cases. `SCOPED_SHARE_CONTEXT_LOCK()` will use
`GlobalMutex` when applicable.
- Otherwise, `SCOPED_SHARE_CONTEXT_LOCK()` will use `egl::ContextMutex`.
Some GFXBench "1080p Driver Overhead 2 Offscreen" performance numbers.
Tested on S906B (Samsung Galaxy S22+) on old ANGLE base:
https://chromium.googlesource.com/angle/angle/+/807c94ea85e046c6f279d081d99f0fb1bcf1191a
Capture/Replay: Adjust tests do adhere to capture limits
Each test result is an average frame number from 6 runs.
SingleContextMutex 6579 ( +0.13%)
(old) GetContextLock() (mShared is false) 6570
Forced `mShared = true` or NOT using `SingleContextMutex`.
SharedContextMutex<std::mutex> FORCE 5061 (-22.97%)
(old) GetContextLock() FORCE 4766 (-27.46%)
Bug: angleproject:6957
Bug: chromium:1336126
Change-Id: Idcd919f9d4bf482b9ae489bd8b4415ec96048e32
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4374545
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
a01a566c
|
2023-06-09T00:31:06
|
|
extension xmls: fix incorrect use of <ptype> tags
I was having trouble using some GL/EGL loader generators because of some
errors in the XML definitions for ANGLE.
The first major problem is the content of the <ptype> tags. Let's refer
to the Khronos registry XML schema (which is annoyingly a PDF rather
than an xsd that we can test against, though I don't know if an xsd
would catch this anyway):
https://raw.githubusercontent.com/KhronosGroup/OpenGL-Registry/master/xml/readme.pdf
In section 12.4.2, "Contents of <param> tags" it states:
The <ptype> tag is optional, and contains text which is a valid type
name found in <type> tag, and indicates that this type must be
previously defined for the definition of the command to succeed.
Builtin C types, and any derived types which are expected to be
found in other header files, should not be wrapped in <ptype> tags
Note that the above is repeated for the contents of <proto> tags as
well.
The extension XML files currently have a bunch of <ptype> tags which
don't meet the expectations described above. The correct transformation
for them would be, for example:
<ptype>GLfloat *</ptype> -> <ptype>GLfloat</ptype> *
<ptype>void *</ptype> -> void *
<ptype>const char *</ptype> -> const char *
<ptype>EGLAttrib *</ptype> -> <ptype>EGLAttrib</ptype> *
The next issue is that some tags have some typos, such as "<pytpe>"
instead of "<ptype>". (Now *that* is something an .xsd would catch...)
The last issue is the use of the typename "GLvoid" which is not as
serious a problem. It is still defined in Khronos' gl.xml <types> block,
but Khronos no longer uses it in their XML registries. The comment for
the "GLvoid" type in their <types> block states:
<type comment="Not an actual GL type, though used in headers in the past">typedef void <name>GLvoid</name>;</type>
So we might as well replace those with just plain "void".
Anyway, long story short: to apply these transformations, I used Perl
regular expressions, and applied these expressions in order:
- Fix the tag misspellings:
s#<(/?)pytpe>#<\1ptype>#g
- Move the const qualifiers (if present) and pointer asterisk(s) (if
any) outside the <ptype> tag itself:
s#<ptype>(const )?([A-Za-z0-9]+)[ ]?(\*\*?)</ptype> #\1<ptype>\2</ptype> \3#g
- Replace "GLvoid", "char", and "void" inside ptype tags to normal
C types outside tags:
s#<ptype>(GLvoid|void|char)</ptype>#\1#g
Bug: angleproject:8190
Change-Id: Ib0bea79fecb7e714910b6e92124bb9f52994d0fb
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4603709
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
d8339e78
|
2023-05-25T08:40:48
|
|
FrameCapture: Support EGLSync in MEC
This CL starts treating EGLSync as a tracked resource, such
that we can detect when they need to be created in Setup, or
regenerated in Reset.
Test: MEC of infinity_ops trace
Test: Replay new kentucky_route_zero trace without error
Bug: angleproject:8176
Change-Id: I130212f6edb78d9df29dd6e572843df25493ae09
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4566949
Reviewed-by: Roman Lavrov <romanl@google.com>
Commit-Queue: Cody Northrop <cnorthrop@google.com>
|
|
9e47cbd3
|
2023-05-18T14:40:37
|
|
Capture/Replay: Rework trace EGLDisplay handling
Refactor the trace-replay EGLDisplay handling to allow
initializing the global EGLDisplay handle in the
InitializeReplay4() body. This included adding
support for eglGetCurrentDisplay() to the EGL-on-
WGL shim.
Test: angle_trace_tests --gtest_filter=infinity_ops
Bug: b/282725258
Change-Id: I2319fd9a35f8fb9c0a7f10547ca39f49ce402b8d
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4546267
Reviewed-by: Roman Lavrov <romanl@google.com>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Commit-Queue: Mark Łobodziński <mark@lunarg.com>
|
|
8fdb164b
|
2023-05-11T10:03:57
|
|
Capture/Replay: Get and use actual EGLDisplay in trace
ANGLE traces were using ANGLE_NO_DISPLAY for EGLDisplay args
in traces. After the EGLSyncMap was added this caused error
messages in Android and Linux playback of some traces. Added
a global EGLDisplay to traces and initialized it with the
proper value.
Test: angle_trace_tests --gtest_filter=infinity_ops
Bug: b/282725258
Change-Id: I1e6522cd4fdfee136c1e296805dac9d9f71256f3
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4534096
Commit-Queue: Cody Northrop <cnorthrop@google.com>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
|
|
c687078a
|
2023-05-01T16:45:19
|
|
FrameCapture: Add GLES1 case for BlendFunc state init/reset
A recent frame capture change added state init/reset for
glBlendFunc/glBlendFuncSeparate calls and combined them to
avoid complexity, but this caused crashes in GLES1 native
trace playback. This CL separates handling of the two calls.
Test: angle_trace_tests --gtest_filter=TraceTest.street_fighter_iv_ce
Bug: b/280329971
Change-Id: I34d674e2fc051f5af70a60a24e5b65c5ce54fd49
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4494261
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Reviewed-by: Roman Lavrov <romanl@google.com>
Commit-Queue: Mark Łobodziński <mark@lunarg.com>
|
|
fbff065c
|
2023-05-03T22:19:07
|
|
Replace GetResourceFromHashSet with map lookup
Function GetResourceFromHashSet had linear time complexity
because it was sweeping through the set until a resource with a
matching ID was found. This change replaces hash sets with hash
maps to get constant time lookup. This solves, among other things,
O(N^2) time complexity for rendering scenes containing a large
number of surfaces.
Function GetResourceFromHashSet was consuming over 50% of all CPU time
on the main thread of Chrome's GPU process while running the MotionMark
1.2 Images test. With this change, the benchmark score increases by
70% on an M1 MacBook running a PGO official build of Chrome.
Bug: chromium:1435066
Change-Id: I895ac0141a91d324c63adec2c0efb8e030d9675b
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4505950
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Justin Novosad <junov@chromium.org>
Reviewed-by: Igor Nazarov <i.nazarov@samsung.com>
|
|
73f9cf00
|
2023-03-31T00:00:00
|
|
GL: Implement polygon mode extensions
* Implemented polygon mode extensions
on the OpenGL backend
* Supported capture and serialization
of the new commands and state
* Added PolygonModeTest end2end tests
Bug: angleproject:1791
Bug: angleproject:8132
Change-Id: I3bc08546a02f110dd739950129bee25ccc507bf6
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4492683
Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
cd6a58f2
|
2023-04-18T12:45:10
|
|
Vulkan: Make eglPrepareSwapBuffersANGLE less special
This function now uses the UnlockedTailCall mechanism so it doesn't
require as much special-case code generation.
This change does not fix the bug that this function is doing too much
work without holding any locks. That will be done in a follow up.
Bug: angleproject:6851
Bug: angleproject:8133
Change-Id: I77f4d514ff4aeef85bc1cc59214f7caa23aca7df
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4443186
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
|
|
1810995c
|
2023-04-25T13:09:27
|
|
Capture/Replay: Initialize MEC alpha test state
Fixes Street Fighter IV CE rendering issues when capturing.
Test: angle_trace_tests --gtest_filter="*street_figher_iv_ce*"
Bug: b/278606770
Change-Id: Ifb44c45b19514e4cabed1e81be99bce5706ac4d3
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4475732
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Mark Łobodziński <mark@lunarg.com>
|
|
e975f9dc
|
2022-11-09T06:44:06
|
|
Capture/Replay: handle paletted textures
Add a method for recompressing paletted textures on
capture.
Bug: angleproject:7710
Change-Id: I11af0c1cd7c3b63850c5daf96eafcd3efce65f16
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4178311
Commit-Queue: Cody Northrop <cnorthrop@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
|
|
e809e7bd
|
2023-03-13T00:00:00
|
|
Reland "Implement EXT_depth_clamp"
This is a reland of commit f8c1418319ac2aef4b3101e322005b1d0f73120f
Host GPU bugs are observable in iOS Simulator
Original change's description:
> Implement EXT_depth_clamp
>
> * Added depthClamp to the RasterizerState
> * Added DepthWriteTest end2end tests covering
> both clipped and clamped depth writes
>
> Capture
> * Updated serialized rasterizer state
> * Updated CaptureMidExecutionSetup
>
> OpenGL
> * Requires GL 3.2 or ARB_depth_clamp
> on desktop contexts
> * Maps to EXT_depth_clamp on ES
>
> D3D11
> * Maps to the opposite of
> D3D11_RASTERIZER_DESC.DepthClipEnable
> * The new tests uncover several edge cases where
> a workaround is needed to implement unextended
> OpenGL semantics on top of D3D
>
> Metal
> * Maps to the setDepthClipMode command
>
> Bug: angleproject:8047
> Bug: angleproject:8077
> Change-Id: I1b3448e5b84443e4be18af9bc22d2f8495ac8267
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4347753
> Reviewed-by: Geoff Lang <geofflang@chromium.org>
> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Bug: angleproject:8047
Bug: angleproject:8077
Change-Id: I8c5f8304276c97c51b2c3382cd2764592ee0c3fe
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4349938
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
|
|
4a77b0f5
|
2023-03-18T00:16:24
|
|
Revert "Implement EXT_depth_clamp"
This reverts commit f8c1418319ac2aef4b3101e322005b1d0f73120f.
Reason for revert: This change breaks angle_end2end_tests on Metal backend: https://ci.chromium.org/ui/p/chromium/builders/ci/ios-angle-intel/26035/overview
Original change's description:
> Implement EXT_depth_clamp
>
> * Added depthClamp to the RasterizerState
> * Added DepthWriteTest end2end tests covering
> both clipped and clamped depth writes
>
> Capture
> * Updated serialized rasterizer state
> * Updated CaptureMidExecutionSetup
>
> OpenGL
> * Requires GL 3.2 or ARB_depth_clamp
> on desktop contexts
> * Maps to EXT_depth_clamp on ES
>
> D3D11
> * Maps to the opposite of
> D3D11_RASTERIZER_DESC.DepthClipEnable
> * The new tests uncover several edge cases where
> a workaround is needed to implement unextended
> OpenGL semantics on top of D3D
>
> Metal
> * Maps to the setDepthClipMode command
>
> Bug: angleproject:8047
> Bug: angleproject:8077
> Change-Id: I1b3448e5b84443e4be18af9bc22d2f8495ac8267
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4347753
> Reviewed-by: Geoff Lang <geofflang@chromium.org>
> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Bug: angleproject:8047
Bug: angleproject:8077
Change-Id: I829add68c006c72b7b4acf03aee3efa8a9a16fac
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4350876
Reviewed-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Commit-Queue: Yuxin Hu <yuxinhu@google.com>
|
|
f8c14183
|
2023-03-13T00:00:00
|
|
Implement EXT_depth_clamp
* Added depthClamp to the RasterizerState
* Added DepthWriteTest end2end tests covering
both clipped and clamped depth writes
Capture
* Updated serialized rasterizer state
* Updated CaptureMidExecutionSetup
OpenGL
* Requires GL 3.2 or ARB_depth_clamp
on desktop contexts
* Maps to EXT_depth_clamp on ES
D3D11
* Maps to the opposite of
D3D11_RASTERIZER_DESC.DepthClipEnable
* The new tests uncover several edge cases where
a workaround is needed to implement unextended
OpenGL semantics on top of D3D
Metal
* Maps to the setDepthClipMode command
Bug: angleproject:8047
Bug: angleproject:8077
Change-Id: I1b3448e5b84443e4be18af9bc22d2f8495ac8267
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4347753
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
|
|
bf5e9dbc
|
2023-03-09T00:00:00
|
|
GL: Reset clip origin before scissored clears
Clip origin must not affect scissor box but
some drivers flip it for clear operations.
Added capture/replay support for ClipControl.
Bug: angleproject:8066
Change-Id: I9292cb4945b49c56c80da4c5813e89df3453b6b6
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4328267
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
|
|
a8ba5112
|
2023-02-10T10:04:41
|
|
Capture/Replay: Deal with swap called in different contexts
Move recording the context setup of the main context to the
same location where all other context setups are recorded and
drop the assertion that checks that swap is always called from
the same context.
Invoke the context setup at the time the secondary contexts are set
up, and make sure the main context is correctly mapped.
Bug: angleproject:7911
Change-Id: I327bce318b1a0e26ffdbf096343f99cedd78c116
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4236541
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Commit-Queue: Cody Northrop <cnorthrop@google.com>
|
|
0e9b8f36
|
2023-02-08T13:39:09
|
|
Capture/Replay: Drop context ID from file and frame func names
This is needed when we want to be able to deal with swap called
from different contexts.
Bug: angleproject:7911
Change-Id: I83023308109852179f434be2290b33b7844ddcda
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4236540
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Commit-Queue: Cody Northrop <cnorthrop@google.com>
|
|
a52c0a6c
|
2023-02-06T16:01:27
|
|
Capture/Replay: Add and handle new resource type for EGLSync
So far calls involving EGLSync were not tracking the actual
sync objects, and this may lead to race conditions in
multi-threaded and multi-context scenarios.
This CL adds the type EGLSyncID and some specialized code
handling of egl::Sync to distinguish EGLSync from the already
existing GLSync objects in order to track them separately.
Bug: angleproject:7911
Change-Id: I91b188a41069bc0620f51c55ee516d23b55bdd38
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4200095
Commit-Queue: Gert Wollny <gert.wollny@collabora.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
|
|
111aca40
|
2023-02-15T14:06:15
|
|
Capture/Replay: Emit NULL instead of nullptr in trace
When created C traces the value "nullptr" is not defined, so
emit NULL instead, because this is supported in both, C and C++.
Bug: angleproject:8018
Change-Id: I77584c462b1b02df39871929c1979d7ee7624361
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4254388
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Commit-Queue: Cody Northrop <cnorthrop@google.com>
|
|
91bd7e6e
|
2023-01-09T15:57:35
|
|
Capture/Replay: VertexArrayState: also track binding index too
We have to capture the case when only the binding index is not
at the default value.
Bug: angleproject:7912
Change-Id: Id08b20788422694db60f38c6e0b8b4a9191890c0
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4143841
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Commit-Queue: Gert Wollny <gert.wollny@collabora.com>
|
|
a77e8e3a
|
2023-02-06T16:24:06
|
|
Limit logging when invalid calls are not captured.
An app was crashing during capture due to a huge volume of such calls:
% adb logcat -d | grep 'Not capturing invalid call' | wc -l
20609
There are a couple of cases where validation silently ignores "benign"
invalid calls, such as glUniform*(-1, ...):
https://crsrc.org/c/third_party/angle/src/libANGLE/validationES.cpp;drc=0c4306fc554c80506eb0f9b833a5d2a5fdd452d5;l=2815
Limit to (separately for active and inactive capture so that we still
see these after triggering mid-execution capture).
Example log after this CL:
02-07 11:54:45.869 7657 7749 I ANGLE : INFO: FrameCapture (capture inactive): Not capturing invalid call to glUniform1f
02-07 11:54:45.874 7657 7749 I ANGLE : INFO: FrameCapture (capture inactive): Not capturing invalid call to glUniform1f
02-07 11:54:45.882 7657 7749 I ANGLE : INFO: FrameCapture (capture inactive): Not capturing invalid call to glUniform1f (will no longer repeat for this entry point)
... (then I triggered capture) ...
02-07 11:55:13.049 7657 7749 I ANGLE : INFO: FrameCapture (capture active): Not capturing invalid call to glUniform1f
02-07 11:55:13.049 7657 7749 I ANGLE : INFO: FrameCapture (capture active): Not capturing invalid call to glUniform1f
02-07 11:55:13.050 7657 7749 I ANGLE : INFO: FrameCapture (capture active): Not capturing invalid call to glUniform1f (will no longer repeat for this entry point)
Bug: b/267795212
Change-Id: I2f150cfa5b4c74fc1ebe5abeb1201cc4caad80e3
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4224875
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Commit-Queue: Roman Lavrov <romanl@google.com>
|
|
0931b679
|
2023-01-26T13:20:22
|
|
FrameCapture: Update shader capture for CRLF
Shaders with CRLF were breaking the way we capture strings after the
move to C format, causing compile failures.
To fix, strip out carriage returns ("\r") before splitting the string.
See previous patchsets on this CL to see other approaches we tried.
Test: LIMBO and Pokemon Masters EX traces
Bug: angleproject:7945
Bug: angleproject:7953
Change-Id: Ia15d3a098cb4fcad85a7d7dbd365acdbff8346ce
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4159055
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Cody Northrop <cnorthrop@google.com>
|
|
ef0fe638
|
2023-01-16T00:00:00
|
|
Implement EXT_polygon_offset_clamp
* Added polygonOffsetClamp to the RasterizerState
* Adjusted State::setPolygonOffsetParams
* Added PolygonOffsetClampTest end2end tests
* Added StateChangeTestES3.PolygonOffsetClamp test
* Suppressed the affected dEQP test as it has a bug
Capture
* Updated serialized rasterizer state
* Updated CaptureMidExecutionSetup
OpenGL
* Rely on the EXT extension defined both
for desktop and ES contexts
* On desktops, might as well use the ARB extension
or GL 4.6 once ANGLE supports them
D3D11
* Requires FL10_0 or higher
* Maps to D3D11_RASTERIZER_DESC.DepthBiasClamp
* Drive-by cleanup of extensions init code
Vulkan
* Requires depthBiasClamp physical device feature
* Maps to the depthBiasClamp parameter
of the vkCmdSetDepthBias command
Metal
* Maps to the clamp parameter
of the setDepthBias command
Bug: angleproject:7957
Change-Id: If6b28df4084f0a81db29f75fb434e75d394c8730
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4169945
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
|
|
dfcdae3b
|
2023-01-23T15:59:49
|
|
FrameCapture: Add blend state updates to resetCalls.
Adds calls to ResetReplay if modified during capture, for example:
glBlendEquationSeparate(GL_FUNC_ADD, GL_FUNC_ADD);
glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE, GL_SRC_ALPHA, GL_ONE);
glBlendFunc and glBlendFuncSeparate need to be "merged" into a single
path to avoid both being tracked while using the same underlying state,
so I mapped them both to glBlendFuncSeparate.
Also handling glBlendEquation the same way, previously only
glBlendEquationSeparate calls were tracked.
Test: Bubble Shooter with Friends MEC
Bug: b/266244734
Change-Id: I02c4a0da46f35aa496308bf9df6ac15f3297de27
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4189035
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Commit-Queue: Cody Northrop <cnorthrop@google.com>
|
|
2c582dcb
|
2023-01-03T10:27:03
|
|
Trace Interpreter: Support Manhattan trace.
Adds the following fixes and features:
- support transform feedback varying strings
- support infinity and NaN constants
- support for sampler and query resources
Bug: angleproject:7887
Change-Id: Ib01afe66e4fda9bc77d0cb5eed52fa83a694a7d6
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4126885
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
f7b5d5d1
|
2022-12-15T10:52:07
|
|
Capture/Replay: Remove inline variable declarations.
This makes parsing easier for the "simplified C" interpreter.
We introduce a resource ID buffer as a way to manage a list
of resource IDs to replace the inline resource lists.
Turns on the Among Us trace in the interpreter tests.
Bug: angleproject:7775
Change-Id: I1bb9c0e9b087965a18691bc99b2e9947610b9eaf
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4128719
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
fdada9ee
|
2022-12-13T14:52:53
|
|
Re-land: "Make SyncIDs a packed type."
This re-land fixes the sync map size tracking.
This prepares syncs to use a simple resource map like other
types, which will make life easier in the trace interpreter.
Bug: angleproject:7775
Change-Id: If2114c51d5b68503890eacbf549182823667fedc
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4178012
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
8971a592
|
2023-01-18T14:35:09
|
|
Revert "Make SyncIDs a packed type."
This reverts commit 9de913077a5fcc3d2f2e327b56bbe30efe2fde96.
Reason for revert: Fails win-trace, somewhat flakily.
Original change's description:
> Make SyncIDs a packed type.
>
> This prepares syncs to use a simple resource map like other
> types, which will make life easier in the trace interpreter.
>
> Bug: angleproject:7775
> Change-Id: Ic2867f6133256f5ce2320eb2b322c1059266b201
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4103720
> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
> Commit-Queue: Jamie Madill <jmadill@chromium.org>
> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Bug: angleproject:7775
Change-Id: I29534b14c973fa34a4cb7457d534cd6156f33cd2
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4178010
Auto-Submit: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
|
|
9de91307
|
2022-12-13T14:52:53
|
|
Make SyncIDs a packed type.
This prepares syncs to use a simple resource map like other
types, which will make life easier in the trace interpreter.
Bug: angleproject:7775
Change-Id: Ic2867f6133256f5ce2320eb2b322c1059266b201
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4103720
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
|
|
56eb961f
|
2023-01-17T17:03:39
|
|
Revert "Capture/Replay: Capture the attr locations as set by the program"
This reverts commit 585d2a9e5c546c7aa59b987da6c70d310cccd3ee.
Reason for revert: glBindAttribLocation calls added by frame capture, even when location was not set explicitly, are currently necessary for replay stability across different platforms. Example from a trace:
glGetAttribLocation(gShaderProgramMap[24], "position");
...
glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 112, nullptr);
Note how "0" is hard-coded instead of using the value returned by glGetAttribLocation above, and that can be different on a different platform. This was resolved before this CL by calling glBindAttribLocation to map "position" to 0, and after this CL glBindAttribLocation calls are missing from the trace and we end up with inconsistent native replays (found in Android b/265429003)
Original change's description:
> Capture/Replay: Capture the attr locations as set by the program
>
> Setting the attribute location based on the input declaration
> results in a discrepancy with MEC when recording the context state,
> because if a location was never set explicitely, the captured
> context state will hold no attribute location information, but
> since calls were recorded to set the default attribute locations,
> the context state recorded during replay will contain these extra
> entries.
>
> To avoid this, only record the attribute locations that were
> explicitely set.
>
> Bug: angleproject:7564
> Change-Id: Ib9d6c7b098935d199921e0fe5c0ef985e6187f1b
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3827345
> Commit-Queue: Gert Wollny <gert.wollny@collabora.com>
> Reviewed-by: Jamie Madill <jmadill@chromium.org>
> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Bug: angleproject:7564
Bug: angleproject:7964
Bug: b/265429003
Change-Id: I4f97c8162601cc1b749bbc8a06851561654205e6
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4172756
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Roman Lavrov <romanl@google.com>
|
|
4194dab4
|
2023-01-09T12:03:47
|
|
Capture/Replay: Test the correct context ID when emitting setup
Fixes: b432c84c2b8cb6d20873e2b33b6684bee76db90d (origin/chromium/5455)
Capture/Replay: Fix collecting the initialized contexts
Bug: angleproject:7805
Bug: angleproject:7938
Change-Id: Ia321179bef8fd33c7968177ffcb4da78103a99fc
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4143840
Commit-Queue: Gert Wollny <gert.wollny@collabora.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
18950e64
|
2023-01-05T11:33:59
|
|
Capture/Replay: Fix unpack alignment inconsistency.
We were checking the current value of the unpack alignment in
the replay when we should have been comparing vs the set value
in the context.
Bug: angleproject:7816
Change-Id: Ib7e6ed785e07e06a7f55f4b727f640912b75b7a6
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4139299
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Commit-Queue: Cody Northrop <cnorthrop@google.com>
Auto-Submit: Jamie Madill <jmadill@chromium.org>
|
|
b354667e
|
2022-12-24T12:21:17
|
|
FrameCapture: Fix tracking of glCopyImageSubData
When tracking texture updates during glCopyImageSubData, choose
an enum supported by PackedEnum when looking up the textureID.
Also add a test for a common pattern used by the Unreal Engine that
trips up FrameCapture.
Test: CopyImageTestES31.CubeMapCopyImageSubData/*
Bug: angleproject:7913
Change-Id: I6c0fee69064cc6dc81177093ec9461dd5ccc152a
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4126449
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Cody Northrop <cnorthrop@google.com>
|
|
7fe33996
|
2022-12-02T00:04:28
|
|
Capture/Replay: Regen/Restore shaders and programs
Add missing functionality that can recreate shaders and programs
that are deleted during the run.
Test: Plants vs. Zombies Heroes MEC
Bug: angleproject:5968
Bug: angleproject:7848
Change-Id: I2d41ebe9df1e2ad1beef831acd72fd3f06f4eb1f
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4060241
Commit-Queue: Cody Northrop <cnorthrop@google.com>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
f7cf3226
|
2022-12-08T10:08:56
|
|
Capture/Replay: Only create active secondary contexts in MEC
This finalized the fix attempted in
b432c84c2b8cb6d20873e2b33b6684bee76db90d
Capture/Replay: Fix collecting the initialized contexts
Bug: angleproject:7858
Change-Id: Ie2bbcdb3f23fe4970ce3a9bb46df6f60fe6c8ab6
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4084926
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Gert Wollny <gert.wollny@collabora.com>
|
|
384ce5cf
|
2022-11-29T14:18:34
|
|
Capture/Replay: Corretly reset the UnpackAlignment at end of MEC
Direcly setting the value doesn't set the relevant dirty state,
use the appropriate setter call instead. This fixes the reported
difference between the UnpackAlignment value stored in the trace
and the one recorded ruring validation for MEC.
Bug: angleproject:7564
Bug: angleproject:7180
Change-Id: Ic931cac9b7e33519e992ae55ee5cab2adb2958ca
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4063892
Commit-Queue: Gert Wollny <gert.wollny@collabora.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
|
|
0790a807
|
2022-12-01T23:58:36
|
|
Capture/Replay: Add ResourcesToDelete
For resources that are deleted but not recreated by the app,
we need to skip the delete call we've been making for
ResourcesToRegen. To support this, track which resources need
to be deleted.
We've gotten by without this for so long because most apps
will immediately recreate a resource after deleting it. When
they simply delete starting resources, we can't try to delete
them again.
Test: MEC of multiple apps
Bug: angleproject:4599
Change-Id: I226ba7887e2b7b31d4ce9a75d6a8d0a24f3f32ac
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4075486
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Cody Northrop <cnorthrop@google.com>
|
|
b432c84c
|
2022-12-01T10:40:03
|
|
Capture/Replay: Fix collecting the initialized contexts
The main context initialization function will be emitted as
"Shared" and not based on the context number, so only add the
secondary contexts to the list of contexts that need additional
setup.
Fixes: b301b82235ca686d036a8d29380da22bb2060060
Capture/Replay: emit context setup for pre-MEC contexts only
Bug: angleproject:7805
Change-Id: I4ac770a303ac93a448c9b46bf8c4cd58900ddd54
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4068124
Commit-Queue: Gert Wollny <gert.wollny@collabora.com>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
b301b822
|
2022-11-07T09:37:14
|
|
Capture/Replay: emit context setup for pre-MEC contexts only
When a context is made current for the first time it is added to
the shared context set. If this happens after the mid execution
capture has started, then the call to the context setup function
is created, but the according function implementations was not
emitted leading to compilation failure of the so created trace.
Since a context that was never current doesn't actually have any
setup that needs to be done when starting a MEC replay. Hence,
there is no need to emit the calls fot SetupReplayContextXX.
So track which context where actually in the shared context set
when MEC started, and only emit the according calls to the setup
functions.
Bug: angleproject:7805
Change-Id: I83f8714733ead5c0d71560013c360b5671f0822a
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4008199
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Gert Wollny <gert.wollny@collabora.com>
|
|
11de5157
|
2022-11-14T14:48:33
|
|
Capture/Replay: Reset Shaders
We've been resetting Programs correctly, but not Shaders. This hasn't
been a blocker so far, but it has been identified as a performance
problem for traces that compile mid-trace. We're not getting cache
hits because the persistent blob cache is not updated until a shader
is deleted.
Part of the challenge here is ShadersIDs and ProgramIDs share a
ResourceIDType, so separating them requires a bit more tracking.
To fix, start tracking which ShaderProgramIDs are actually
shaders and emit the correct glDelete* command.
Test: diablo_immortal MEC
Bug: angleproject:7823
Change-Id: I934f6eee243ab9681dca5fdebdad33ba31457cf5
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4029226
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Cody Northrop <cnorthrop@google.com>
|
|
494640e5
|
2022-11-18T12:02:28
|
|
Capture/Replay: Make secondary contexts current during MEC
When replaying, the context is made current at the beginning of
the context setup function, and is still current when we hot the
validation point at the end of the setup function. When a context
is current is has a valid default framebuffer, and hence, during a
replay of the trace the context serialization will contain this
framebuffer. However, during MEC the secondary contexts were not made
current during capture, and hence they dind't have a default
framebuffer which resulted in a validation error.
Therefore, make the secondary contexts current when they are captured
during MEC to make sure we also capture the default framebuffer.
Bug: angleproject:7812
Change-Id: Iaccc4150e8a71a02286e772882fb150bef1d82a8
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4037982
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Commit-Queue: Gert Wollny <gert.wollny@collabora.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
2fa255da
|
2022-11-09T16:44:02
|
|
FrameCapture: Don't capture trailing zeros in shader strings.
This prevents C build errors like the following when
applications provide incorrect shader string lengths:
error: null character(s) preserved in string literal
Bug: angleproject:7402
Change-Id: Iac7bab58533d152c4b6ed525f0cbcbcb8a7c35ad
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4020417
Commit-Queue: Cody Northrop <cnorthrop@google.com>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
|
|
66fda678
|
2022-11-14T11:10:54
|
|
Capture/Replay: Delete buffer after test support for coherent
The buffer created to test coherent and persistzent mapping is
not used later, so it should be deleted.
Since this buffer is created and deleted before any VAO is created,
we also have to check whether a VAO exists before the buffer may
be detached from it.
Bug: angleproject:7814
Change-Id: I875f845e592325093dd90b48ba9cd3c7228fad47
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4023047
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Commit-Queue: Cody Northrop <cnorthrop@google.com>
|
|
e99e40c9
|
2022-10-11T12:27:18
|
|
FrameCapture: Implement shadow memory for coherent buffers.
On certain devices like the Pixel 6 it is not possible to mprotect
Vulkan allocated memory required for coherent buffer tracking.
To overcome this limitation implement a shadow memory for coherent
buffers when running FrameCapture that is exposed to the app and
syncronized with the Vulkan memory and can be mprotected for coherent
buffer tracking.
Add a test to determine whether memory protection can be used directly
or will require shadow memory. Run this test only on build
configurations with assertions enabled.
Determine the requirement of shadow memory through a deny list of
device manufacturers and models, which is checked against ANGLE's
SystemInfo.
Add ANGLE_CAPTURE_FORCE_SHADOW environment setting and Android
equivalent to force enable shadow memory.
Test: angle_end2end_tests --gtest_filter="BufferStorageTestES3.*/ES3_Vulkan"
Bug: angleproject:7402
Change-Id: I74b7930259d3bc1846ef96fffa782f8bc553b043
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3945018
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Commit-Queue: Lubosz Sarnecki <lubosz.sarnecki@collabora.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
335b5aba
|
2022-11-07T09:28:10
|
|
Capture/Replay: Make CaptureMidExecutionSetup param constant
There is no need for for the context parameter to be non-constant.
Bug: angleproject:7805
Change-Id: I1d998cf40f61a977ebce6d1160a859e082d99688
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4008198
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Gert Wollny <gert.wollny@collabora.com>
|
|
109604b8
|
2022-11-07T09:26:05
|
|
Capture/Replay: remove unused context param from scanSetupCalls
Bug: angleproject:7805
Change-Id: I4e00876ad6174c15aaa9503cf9eeaa6ea041c2a6
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4004416
Commit-Queue: Gert Wollny <gert.wollny@collabora.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
7fa69511
|
2022-11-04T10:10:05
|
|
FrameCapture: Skip glGetActiveUniformBlockName calls.
Since moving to plain C traces removed references to uniform block
indices, this call should also be part of the related skip list.
This fixes capturing traces using the call an not hitting UNREACHABLE
when handling TUniformBlockIndex.
Bug: angleproject:7731
Bug: angleproject:7402
Change-Id: I510aceaa0965c2469367212784b504ea251a2541
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4003222
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Lubosz Sarnecki <lubosz.sarnecki@collabora.com>
|
|
27561f04
|
2022-10-30T09:38:00
|
|
Capture/Replay: Emit always gContextMap2 when capturing traces
Bug: angleproject:7800
Change-Id: I12fc39d709527865a9b248a00c95d281c4e4d743
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3993317
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Commit-Queue: Gert Wollny <gert.wollny@collabora.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
ce62d52f
|
2022-10-27T18:41:11
|
|
Fix Mid Execution Capture for External Texture
How we capture eglCreateImage and eglCreateImageKHR
have changed recently. Fix the code that recreate
eglCreateImageKHR calls for external texture type
in Mid Execution Capture.
Bug: angleproject:7758
Change-Id: I2bd35ec3349f1d4f1aef1bf7f76ac50d4abca53d
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3989645
Commit-Queue: Yuxin Hu <yuxinhu@google.com>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
|
|
dc62b3ee
|
2022-10-10T21:00:16
|
|
Capture/Replay: Add trace interpreter.
Also adds a self-test using the retrace script.
Bug: angleproject:7752
Change-Id: I1985b47250bef99726d2ca2d90bef859208e357e
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3965128
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
|
|
06ecc918
|
2022-10-10T20:59:38
|
|
Capture/Replay: Optionally emit C sources.
This adds an option that controls if we can write out simplified C
replays. Once the work is finished we can remove the option and
only allow emitting C instead of both C and CPP.
Required emitting multi-line strings differently, as well as
conditionalizing a few other language differences.
Bug: angleproject:7713
Change-Id: I3303134316ed3fc1b4286bcd32961e8f7ecfbb06
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3953339
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|
|
596c2acf
|
2022-10-20T18:59:04
|
|
FrameCapture: Fix FenceSync for MEC
Follow up to:
https://chromium-review.googlesource.com/c/angle/angle/+/3957164
Test: MEC for Grimvalor
Bug: angleproject:7758
Change-Id: Ia0895e923d9bee41bcfbff48d15bf9aa86e29d17
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3969519
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
|
|
6193274a
|
2022-10-10T21:00:12
|
|
Capture/Replay: Redesign in-memory call capture replay.
This will allow the replay to use the call captures returned
by the interpreter's parser.
Bug: angleproject:7752
Change-Id: If1b281d9ce7ccfbdc23bea615e1e2258c8a029f9
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3963367
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
|
|
fd45cec3
|
2022-10-10T20:59:58
|
|
Entry Points: Move enum helper to registry_xml.
This will make it accessible to other generators.
Bug: angleproject:7752
Change-Id: I91bc9a4d6c919266ea329f66d271bf881d99d17a
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3963364
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
|