src/libANGLE/capture/FrameCapture.cpp


Log

Author Commit Date CI Message
Jamie Madill 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>
Jamie Madill 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>
Cody Northrop 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>
Jamie Madill 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>
Jamie Madill 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>
Jamie Madill 4bfb749f 2022-10-10T20:59:48 Capture/Replay: Move shared trace code into src/common. This will let them be accessible to the test harnesses. The trace tests interpreter will need direct access to the classes that we move in this CL. This CL also moves the GLenum utils into the common folder, where they were already used by some other tests. Bug: angleproject:7752 Change-Id: I97ad607938ef29bc316f6d40098478e002ea8128 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3963362 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Jamie Madill 5ec6f8dd 2022-10-10T20:59:42 Capture/Replay: Only inline strings. This will simplify the trace code and the parsing logic. Previously we wrote some integer data in the cpp file, e.g.: const GLenum glDiscardFramebufferEXT_attachments_0[] = {...}; glDiscardFramebufferEXT(..., glDiscardFramebufferEXT_attachments_0); Bug: angleproject:7731 Change-Id: If7924b1bf231f584f4677a438232bedc7ea9bd69 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3953338 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Jamie Madill 8403e4c5 2022-10-10T20:59:29 EGL: Resource IDs for Surface, Context and EGL Image. This will make these classes play nicely with resource maps. As these objects are used in a lot of places, and simplified C can't handle unordered_map, it's necessary to index the maps by simple packed IDs in capture/replay code. This indirection will also have increased safety as we validate EGL resource ID handle values before accessing the memory directly. Also hides some of the other EGL capture methods behind helper methods to simplify the C code and hide assignments and other complex maps. Bug: angleproject:7758 Change-Id: Ibc7bb56430d3068bd38877c9dfb011979d4ea234 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3957164 Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Jamie Madill bb420af7 2022-10-10T20:59:24 Capture/Replay: Rewrite map buffer calls. This wraps the map calls into simple helper functions that hide the return value assignment, which in turn will simplify C parsing. Allows us to remove storing the mapped buffer ID in the params. Bug: angleproject:7731 Change-Id: I756574cc0fa3d63cce4e0103b8f2861d093de186 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3953335 Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Jamie Madill 4f85f862 2022-10-10T20:59:19 Capture/Replay: Remove references to uniform block indexes. This removes the references in captured traces to the uniform block index map. Because uniform block indexes use a double indirection, we store them in an unordered map. Moving to plain C precludes all uses for templated types, so we need to funnel the calls through a custom function. Bug: angleproject:7731 Change-Id: I35ae010b880ee669df09d750d5fb26d3baf907cd Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3953334 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill 2265e37b 2022-10-12T09:27:16 Capture/Replay: Auto-generate EGL capture code. Replaces the custom code in the EGL stubs. Skips a few "Get" entry points because this CL doesn't implement pointer capture like we do for all the GL entry points. Includes a new state in the AttributeMap that indicates which type of attribute values we used when initializing the map. Bug: angleproject:4035 Change-Id: I272eac5e4068602ce710ef66c9a1dce5387943a5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3949911 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Jamie Madill 7c4dc253 2022-10-12T08:38:46 Capture/Replay: Clean up EGL capture. This switches the EGL capture types to ANGLE-casted pointers since that's what we receive in the capture layer. Note that even if the capture layer were used as a pure layer, not an EGL implementation, we'd still have these types for state tracking. This also prefixes each EGL class in the entry points with the egl namespace for consistency and for simplifying the ParamType code. Required changing to non-const gl::Context * in a few places. Also changes the gSurfaceMap to be indexed by the raw pointer value, which cleans up the code somewhat. Bug: angleproject:4035 Change-Id: Id800c1ba25e5819ac7ea1df8aab806bc393fe192 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3949910 Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Yuxin Hu c22f091d 2022-09-29T18:58:33 Replace Hard-Coded egl image attribs This change is adapted from https://crrev.com/c/3838866 Added two hash maps to track below information: EGLImage* --> EGLint* attrib TextureID --> EGLImage* During the CaptureShareGroupMidExecutionSetup, when we iterate through all the textures the app created, if the texture is bound to External target, we will refer to the hash map TextureID --> EGLImage* to find the EGLImage* pointer, and then use the result as the key to refer to the other hash map EGLImage* --> EGLint* attrib to find the attributes used to create that EGLImage object. We can then use the attributes to populate eglCreateImage or eglCreateImageKHR calls in the trace calls. Bug: angleproject:7570 Change-Id: I729de4ddea59242ccbe6243e036451f290545185 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3928212 Commit-Queue: Cody Northrop <cnorthrop@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Shahbaz Youssefi 135022e4 2022-10-11T00:03:11 Vulkan: Create robust pipelines based on context state Previously, pipelines were made robust based on whether any context in the share group has so far been made robust. This means that pipelines created on non-robust contexts would still be compiled as robust. Inefficiency aside, this was buggy because robustness was not part of the pipeline cache key, so if a pipeline was created as non-robust first, then recreated in a robust context, it would reuse the non-robust variant. With VK_EXT_pipeline_protected_access, a similar situation arises for context protected-ness. However, it is incorrect in that case to create pipelines as protected unnecessarily. This change makes pipeline robustness a part of the pipeline cache key, in preparation for protectedness to be added similarly. Compute programs may now generate multiple pipelines as a result too. Bug: angleproject:7629 Change-Id: Ie95f10eff878f8c8b221c1018da44385c7aad15e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3943534 Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com>
Gert Wollny f2785e41 2022-10-10T08:21:36 capture/replay: validate after resetting unpack alignment Otherwise validation will fail, because we try to validate the temporary set alignment against the alignment that would be active without MEC. Bug: angleproject:7564 Bug: angleproject:7180 Change-Id: I40cac84be122c779b9beba39f155567f9edbee75 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3936631 Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Gert Wollny <gert.wollny@collabora.com>
Cody Northrop 5bafe449 2022-10-05T20:09:23 FrameCapture: Create default context reset calls Add support for emitting default reset calls for some entrypoints when recording a capture from the beginning. Test: Lineage 2 Revolution MEC Bug: angleproject:7741 Change-Id: I8e4e1184f3e3b68527a65283c459a43d135e95b4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3938442 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Cody Northrop 63c54da3 2022-09-29T22:32:54 FrameCapture: Fix default uniform sampler base loc Follow up to: https://chromium-review.googlesource.com/c/angle/angle/+/3928253 Samplers are handled specially above the previous changes. Test: Darkness Rises MEC Bug: angleproject:7719 Bug: angleproject:7720 Change-Id: I72848eaced4da379fe724aebf61a75616f614e1c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3929328 Commit-Queue: Cody Northrop <cnorthrop@google.com> Reviewed-by: Roman Lavrov <romanl@google.com>
Cody Northrop 6dc30c00 2022-09-29T08:41:53 FrameCapture: Reset default uniform arrays If an application has updated a single uniform in the middle of an array, we need to emit the Reset call for the entire array. We don't track Reset calls per individual location in an array. Test: Life is Strange MEC Bug: angleproject:7711 Change-Id: Idec991ad060eb5e12272713a58aa921c5912f1cc Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3928253 Reviewed-by: Roman Lavrov <romanl@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Lubosz Sarnecki dbb9f38d 2022-09-13T12:08:02 FrameCapture: Capture Texture Environment in MEC. Persist the state of glTexEnv in mid-execution capture for OpenGL ES 1.X contexts. Implement equality operators overload for the TextureEnvironmentParameters struct. Test: angle_end2end_tests --gtest_filter="TextureEnvTest.*" Bug: angleproject:7652 Change-Id: I131eec5c838c9e434e135bd3c6b050fca44c3231 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3892015 Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Lubosz Sarnecki <lubosz.sarnecki@collabora.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Cody Northrop 9393fd54 2022-09-13T20:06:57 FrameCapture: Ignore GetActiveAttrib Similar to how we skip glGetActiveUniform, we also need to skip glGetActiveAttrib. Attribute active status varies based on the underlying shader compiler. More aggresive stacks can find ways to eliminate them. If the application asks about attributes above GL_ACTIVE_ATTRIBUTES, a GL error is thrown, causing a trace to be non-portable. Tested with Eve Echoes and Monster Hunter Stories. Also added an end2end test that showcases a way apps ask about attributes, verified we can capture and replay it across multiple vendors now. Test: VertexAttributeTestES3.UnusedAttribsMEC Bug: angleproject:7215 Bug: angleproject:7557 Bug: angleproject:7402 Change-Id: I3c655bcead0ddb1677f8e1d49cb7d3f3c6b4feba Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3866041 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Cody Northrop 8581e5fa 2022-08-05T14:52:22 FrameCapture: Improve renderbuffer reset Add support for recording calls to regenerate renderbuffers, and track when renderbuffers are deleted. Test: Monster Hunter Stories MEC Bug: angleproject:7557 Bug: angleproject:4599 Change-Id: Ib32abaaf4b5f4767c5c9ede312a29e7f108bd93d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3815224 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Gert Wollny 585d2a9e 2022-08-11T16:45:54 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>
Cody Northrop 1cac338a 2022-08-30T11:15:16 FrameCapture: Fix GLES1 vertex array state This CL restores the check for default state before binding a vertex array in Setup. When hooking up reset of Vertex Array state, we inadvertently started recording glBindVertexArray, even for default state. This prevented traces from running on GLES1 implementations that don't support GL_OES_vertex_array_object. Test: Wayward Souls MEC Bug: angleproject:7507 Bug: angleproject:7608 Change-Id: I7aea74b7eb66c0e79a04d81c2dce61fa33dde807 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3863877 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Jamie Madill 6ec89510 2022-08-31T11:10:45 Frame Capture: Remove MEC active variable. We only used this in one place, where we can instead use a check for frame capture being active generally. Bug: angleproject:7621 Change-Id: Ic004e3021750a6c43443eb8935b59514e8c06978 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3868931 Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill 64f41972 2022-08-25T11:16:23 Use canonical gl.xml and update enum to string function. This replaces our copy of gl.xml with the upstream canonical copy. Note that one patch is required before we can remove ANGLE's copy: https://github.com/KhronosGroup/OpenGL-Registry/pull/538 Because the upstream version uses a new method of enum groups, we also update our enum-to-string generator to use the new groups. This new code includes many more enums and groups in the mapping. Bug: angleproject:6461 Change-Id: I1c0ab44c36afce8db04c9661b377bbe5762c913e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3856649 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Lubosz Sarnecki 68b6206e 2022-08-19T16:39:01 FrameCapture: Fix capturing glBindRenderbuffer on GLES1. Use FramebufferCaptureFuncs when capturing glBindRenderbuffer calls on GLES1 contexts, since they require the GL_OES_framebuffer_object extension and will otherwise crash on certain native GL drivers. Bug: angleproject:7596 Change-Id: I7be1b0dee38c9186b657489ca76bf769f47caeb1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3849478 Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Lubosz Sarnecki <lubosz.sarnecki@collabora.com>
Gert Wollny b688c909 2022-08-11T13:14:49 Capture/Replay: save and restore UNPACK_ALIGNMENT in MEC MEC replay requires an unpack alignment of one. When creating a trace the call to set this alignment is emitted, but it is not actually set in the context, so that the captured context state records the actual unpack alignment. When replaying, the call to set the unpack alignment to one is executed, and the context state changed, so that comparing the captured context to the replay context will fail if the original alignement was not one. Restore the original alinment in the context setup functions to ensure that the context state holds the same state information when replaying like when the trace was captured. Bug: angleproject:7564 Bug: angleproject:7180 Change-Id: I09d9bf77bc0193bdf9f41b6183f1ee8d66c5e563 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3827346 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Gert Wollny <gert.wollny@collabora.com> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Lubosz Sarnecki 15b1678f 2022-08-19T13:13:42 FrameCapture: Add VertexArrayCaptureFuncs. Analogously to FramebufferCaptureFuncs, append OES suffixes to vertex array related functions on GLES1 contexts. These functions require the GL_OES_vertex_array_object extension and will crash on certain native drivers without the OES suffix. This resolves the following validation error when replaying GLES1 traces captured using MEC on ANGLE: glBindVertexArray: GL error: HIGH: OpenGL ES 3.0 Required. Bug: angleproject:7596 Bug: angleproject:7608 Change-Id: I603efae4a8d61b84b7711effb2e7e1d8d52e3d83 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3849477 Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Lubosz Sarnecki <lubosz.sarnecki@collabora.com>
Cody Northrop 94a23a4e 2022-08-21T19:52:50 FrameCapture: Fix separable shader uniform locs Uniform locations are tracked by traced program ID, not remapped program ID. This was creating code that used incorrect locations and would immediately crash. For instance, the following code: glProgramUniform4fv(gShaderProgramMap[92], gUniformLocations[gShaderProgramMap[92]][12], 1, reinterpret_cast<const GLfloat *>(&gBinaryData[0])); gShaderProgramMap[92] happens to remap to 54 during replay. But if you look in UpdateUniformLocation, we track uniform locations based on the trace program (92): // Example call: UpdateUniformLocation(92, "fullmatrix", 0, 1); void UpdateUniformLocation(GLuint program, const char *name, GLint location, GLint count) { ... gUniformLocations[program] = programLocations.data(); } So when gUniformLocations[gShaderProgramMap[92]] is used, it tries to look up uniform locations for 54, which don't exist, and returns nullptr. To fix, don't use gShaderProgramMap when looking up locations of uniforms. This only affects separable programs. Normal glUniform calls use gCurrentProgram which is already the trace program (92). The new code looks like this: glProgramUniform4fv(gShaderProgramMap[92], gUniformLocations[92][12], 1, reinterpret_cast<const GLfloat *>(&gBinaryData[0])); Test: Antutu Refinery MEC Bug: angleproject:7590 Change-Id: I079923ec8d938356e72e929d61f80c7fc371a95b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3844642 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Cody Northrop 429a7cab 2022-08-21T19:50:32 FrameCapture: Fix cube face as framebuffer This fix is required for Antutu Refinery benchmark, which has cube faces mapped as framebuffer attachments. Test: Antutu Refinery MEC Bug: angleproject:7590 Change-Id: I5eec5fcbe12ac7486499b047a4b7564b3bc2690f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3844641 Commit-Queue: Cody Northrop <cnorthrop@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Sean Risser 266d0a83 2022-08-09T22:08:03 Skip glObjectLabel in replay capture Similar entry points are also skipped, so it's likely the list was just missing this one. Bug: angleproject:7567 Change-Id: I1d7e37b35960fd71fdec9143d9193dee6f97e1f1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3824777 Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Faye Zhang 4c941149 2022-08-12T11:42:07 External Texture Support In MEC Bug: angleproject:4964 Change-Id: I5cfbadf515a30fb20d75b2d745fdecdafa12268f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3812378 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Auto-Submit: Faye Zhang <ffz@google.com> Commit-Queue: Faye Zhang <ffz@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Eddie Hatfield 2ebd5100 2022-08-11T10:43:32 Add gl::Context as a parameter to Shader::resolveCompile This prepares us to access the Context's shader cache in resolveCompile in the next commit. Bug: angleproject:7036 Change-Id: I7995c54b290a5a48f0c8985cb56ea0048598ab2f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3827642 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Peng Huang a2ad517f 2022-08-06T07:54:16 Replace std::vector with angle::FixedVector in FramebufferState. Using std::vector causes heap allocation for all new framebuffers, so change it to angle::FixedVector. Bug: chromium:1336126 Change-Id: I2e059324d14d59ba2a42b2bb4cd5c569a439a87a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3812563 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Peng Huang <penghuang@chromium.org> Auto-Submit: Peng Huang <penghuang@chromium.org>
Cody Northrop 88dd868f 2022-07-25T06:44:38 FrameCapture: Fix and optimize multi-context reset Follow on to fd89020c This CL: - Fixes missing eglMakeCurrent calls when switching contexts to reset container state - Optimizes when those calls are made, so we only call eglMakeCurrent in Reset when we absolutely have to - Moves MaybeResetContextState to the end, after any per-context reset work has been done Test: Asphalt 9 MEC Bug: angleproject:4599 Bug: angleproject:7507 Change-Id: I52912aa13e3a11735ed3ec93080a21e9cbff113a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3784728 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Cody Northrop fd89020c 2022-07-18T20:26:38 FrameCapture: Reset VertexArray state This change includes three things: - Tracking resources by context - Resetting VertexArray state - Splitting ResetReplay into per-context All three are needed to properly Reset Vertex Array objects. Vertex Arrays are considered container objects, which means they are not shared with other contexts. We've had a hole in Reset where we did not take multiple contexts into account. To address this, we now also track which contextID was used to modify a resource. For objects that need to know which context they are bound to, we track them in a map and return the correct index when getTrackedResource is called. To generate the calls to reset Vertex Array state, we are able to mirror what has been done for other ResourceTypeIDs. In order to properly Reset resources in multiple contexts, we have to bind the correct context before emitting the Reset calls. This has been done for Setup already, so we have a template to follow. With this CL, we now emit multiple functions to Reset state, similar to the following: void ResetReplayContextShared() { // Reset shared objects ... } void ResetReplayContext5() { // Bind the right context eglMakeCurrent(EGL_NO_DISPLAY, EGL_NO_SURFACE, EGL_NO_SURFACE, context5); // Reset container objects for context5 ... } void ResetReplayContext6() { // Bind the right context eglMakeCurrent(EGL_NO_DISPLAY, EGL_NO_SURFACE, EGL_NO_SURFACE, context6); // Reset container objects for context6 ... } void ResetReplay() { EGLContext context = eglGetCurrentContext(); ResetReplayContextShared(); ResetReplayContext5(); ResetReplayContext6(); eglMakeCurrent(EGL_NO_DISPLAY, EGL_NO_SURFACE, EGL_NO_SURFACE, context); } Test: Ni no Kuni MEC Bug: angleproject:4599 Bug: angleproject:7507 Change-Id: Ic585534f07172474aab0ce1d0396b0b064379f88 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3761874 Commit-Queue: Cody Northrop <cnorthrop@google.com> Reviewed-by: Lubosz Sarnecki <lubosz.sarnecki@collabora.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Gert Wollny eb88a2ac 2022-07-11T17:16:49 Capture/Replay: Handle the case when there is no context in eglCreateImageKHR, when target is EGL_NATIVE_BUFFER_ANDROID then the context must be EGL_NO_CONTEXT, so handle this case. Bug: angleproject:4964 Change-Id: I945d2af546f3f3a14be966e5cac795b58aa3c89f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3755785 Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Gert Wollny <gert.wollny@collabora.com> Reviewed-by: Faye Zhang <ffz@google.com>
Geoff Lang 785353fd 2022-05-24T12:40:16 Support Desktop OpenGL context creation in end2end tests Validation of Desktop GL versions and profile masks is unimplemented. Bug: angleproject:7360 Change-Id: Ifae94215b6aada895c2b02318a1d05c9515e9b96 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3664916 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Gert Wollny fd9301c1 2022-06-17T12:25:10 Capture/Replay: Capture egl surface related calls Creation from a pbuffer and generalized destruction are implemented, as well as binding and releasing a TexImage and making the context current with explicit draw and read surfaces given. Bug: angleproject:4964 Bug: angleproject:6180 Bug: angleproject:6512 Change-Id: Id8be6486125d45341905f3aabdbae4366cd568b7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3711741 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Gert Wollny <gert.wollny@collabora.com> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Cody Northrop ce78f5f8 2022-05-10T09:10:30 Capture/Replay: Reset default uniforms Extend resource tracking to include default uniforms. They are tracked per location, per program. Setup for defaulft uniforms is unchanged, but Reset now includes a section like this: glUseProgram(gShaderProgramMap[6]); UpdateCurrentProgram(6); glUniform1uiv(gUniformLocations[gCurrentProgram][0], 1, reinterpret_cast<const GLuint *>(&gBinaryData[30518768])); glUniform1uiv(gUniformLocations[gCurrentProgram][1], 1, reinterpret_cast<const GLuint *>(&gBinaryData[30518784])); glUseProgram(gShaderProgramMap[9]); UpdateCurrentProgram(9); glUniform4fv(gUniformLocations[gCurrentProgram][1], 15, reinterpret_cast<const GLfloat *>(&gBinaryData[30518960])); glUniform4fv(gUniformLocations[gCurrentProgram][16], 3, reinterpret_cast<const GLfloat *>(&gBinaryData[30519200])); glUniformMatrix4fv(gUniformLocations[gCurrentProgram][20], 2, GL_FALSE, reinterpret_cast<const GLfloat *>(&gBinaryData[30519248])); ... Test: Animal Crossing MEC, Star Wars KOTOR MEC Bug: angleproject:7307 Bug: angleproject:7353 Change-Id: Ic344767f5dd4ffc38c15ed6bf81a7d1daf274a7b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3657474 Reviewed-by: Lubosz Sarnecki <lubosz.sarnecki@collabora.com> Commit-Queue: Cody Northrop <cnorthrop@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org>
Cody Northrop aac68adc 2022-05-21T22:27:22 Capture/Replay: Track dirty state per EntryPoint for Reset This CL introduces a new concept of tracking whether an entry point has been called. If so, emit Reset calls designed specifically for that entrypoint. This will likely only be useful for one dimensional state binding calls that can easily be tracked and set back. Only support for EntryPoint::GLUseProgram is added at the moment, but any entry point can be added. Reset will now set the active program back to what it was in Setup. For example: void ResetReplay() { ... glUseProgram(gShaderProgramMap[2]); UpdateCurrentProgram(2); } Test: Animal Crossing MEC, Star Wars KOTOR MEC Bug: angleproject:7307 Bug: angleproject:7353 Change-Id: I19d238ca13bbfb619e1cf8ed86f15ed6c4255a61 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3656827 Commit-Queue: Cody Northrop <cnorthrop@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Lubosz Sarnecki <lubosz.sarnecki@collabora.com>
Gert Wollny bbf67e2e 2022-05-16T12:04:34 Capture/Replay: support capturing eglCreateImage/eglDestroyImage Because we support only a few functions the supporting code is not autogenerated. We don't capture the actual value of the display variable, because we assume that there is only one display, and the actual pointer to it is provided by the EGLWindow. The rest of the capturing works just like with the GLES calls. Bug: angleproject:4964 Bug: angleproject:5822 Bug: angleproject:6180 Bug: angleproject:6286 Bug: angleproject:6578 Bug: angleproject:7111 Change-Id: I385aa9648f93bf74706e9860e2aee5775eeba220 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3636062 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Gert Wollny e55990e3 2021-10-20T19:32:59 Capture/Replay: Handle arrays with uniform block indices When we update the uniform block indices we have to take into accountg that there may be arrays and that the indices of array elements can be retrived by querying with an index. Consider a layout layout(std140) uniform Data { vec4 plainData; vec4 arrayData[3]; } buffers; Then the loop for updating the uniform block indices will see [ "plainData", "arrayData", "arrayData", "arrayData" ] and we have to take care to add the array indices if they are greaten than zero, otherwise we would always query the index of the first array element. Bug: angleproject:6180 Change-Id: I21f96ab49c1c33bc4024711b72df961377afea4e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3198881 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Gert Wollny <gert.wollny@collabora.com>
Peng Huang 445bf9bd 2022-04-09T08:42:12 Use the real max vertex attrib index instead of MAX_VERTEX_ATTRIBS Bug: chromium:1258869 Change-Id: I7de23353fc6922be9b3201c87d33e0cfdc427569 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3580578 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Peng Huang <penghuang@chromium.org>
Cody Northrop 808f754c 2022-04-04T17:53:48 Capture/Replay: Use glFramebufferTexture2D for cubes In GLES 3.2, you can use glFramebufferTexture2D or glFramebufferTextureLayer to bind a cube face as an attachment. Not all drivers support glFramebufferTextureLayer because the wording of the spec is confusing. Instead use the more portable glFramebufferTexture2D. Test: Aztec Ruins High MEC Bug: angleproject:7168 Bug: angleproject:7169 Change-Id: Ie1a7d06f817750ddf8e6e707814380e306f5ee29 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3570242 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Lubosz Sarnecki f8ddca00 2022-03-03T15:34:15 FrameCapture: Use getCompressedTextImage. Replace retrieveCachedTextureLevel with getCompressedTexImage. Remove compressed texture shadow copy code. Treat GLCopyImageSubData calls as texture updates by handling them in trackTextureUpdate. Bug: angleproject:5592 Bug: angleproject:5604 Bug: angleproject:6104 Bug: angleproject:6177 Bug: b/181797364 Change-Id: Ic6b2a41ce536e3e4b66497048954efdafa556d1e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3516377 Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Lubosz Sarnecki <lubosz.sarnecki@collabora.com>
Cody Northrop 04680183 2022-03-24T11:09:39 Capture/Replay: Fixes for Car Chase This CL contains two fixes: * Add GL_PATCHES to list of PrimitiveMode names * Use FramebufferTextureLayer for 3D and Cube textures Bug: angleproject:3662 Bug: angleproject:7125 Bug: b/218314686 Change-Id: Ia97d8221cb78ef6e895156b5a474483d570d6ab5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3551096 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Lubosz Sarnecki ed590dc8 2022-03-11T12:54:44 FrameCapture: Add override for Glsizei* types. Fix capturing glGetSynciv with null lengths on Linux. When calling the default WriteParamValueReplay handler with a nullptr, ostream on Linux will write `(nil)`. This fixes retracing all traces containing glGetSynciv calls with null lengths. Add a NullLength test to FenceSyncTests that used to fail in the capture_replay_tests. Test: capture_replay_tests.py --gtest_filter=FenceSyncTest.NullLength/* Bug: angleproject:7071 Bug: angleproject:6808 Change-Id: I0a2bd4db744ce2a026cd932ba0f2f4747672fcc8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3526653 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Lubosz Sarnecki <lubosz.sarnecki@collabora.com>
Lubosz Sarnecki 70af5ff0 2022-02-18T14:35:59 FrameCapture: Skip invalid VertexAttribPointer calls in MEC. In CaptureVertexArrayState when a non-default VAO is bound and no GL_ARRAY_BUFFER is bound, VertexAttribPointer calls with a non-null offset are invalid and will produce: "Client data cannot be used with a non-default vertex array object." Add a test that leaves a vertex array with an invalid vertex attribute pointer and used to produce an invalid trace with MEC. Test: angle_end2end_tests --gtest_filter="VertexAttributeTestES3.InvalidAttribPointer/*" Bug: angleproject:7042 Bug: angleproject:7098 Change-Id: Iaf91fe7f191c44df79db47bb5455e5df922f2ed5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3475353 Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Lubosz Sarnecki <lubosz.sarnecki@collabora.com>
Cody Northrop 7b202392 2022-03-02T17:32:45 Capture/Replay: Fix capture on Linux Need to add support for printing "const GLint *" types. We've been falling into the default handler and getting lucky with how other platforms handle ostream with a null value. We use this extensively with glShaderSource(). Test: MEC of an existing trace on Linux Bug: angleproject:7071 Change-Id: I7e4f1fbf2876dddac49ea6583918dbc534070d75 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3501201 Reviewed-by: Gert Wollny <gert.wollny@collabora.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Gert Wollny 5118002e 2021-11-29T21:01:03 Capture/Replay: test and handle texture gen-on-bind Bug: angleproject:6425 Change-Id: Ieb4c0a7a6ffdbf0690c07c10e001835a0dcbb6e1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3295620 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Gert Wollny <gert.wollny@collabora.com>
Gert Wollny bc20e55b 2021-11-29T21:00:45 Capture/Replay: test and handle renderbuffer gen-on-bind Bug: angleproject:6425 Change-Id: I591bf0fdfe2e7f83d7e02f63c8265234f7b85df6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3295618 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Gert Wollny <gert.wollny@collabora.com>
Gert Wollny efb951e8 2021-11-29T21:00:02 Capture/Replay: test and handle buffer gen-on-bind Bug: angleproject:6425 Change-Id: If8b573d0d77192befe6db82498158c535bd3b104 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3295619 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Gert Wollny <gert.wollny@collabora.com>
Cody Northrop c80c7ae3 2022-02-24T10:43:15 Capture/Replay: Merge Deletes in Reset Before this CL, when regenning resources, we would iterate through each resource ID and issue a delete followed by a gen. The delete is required to get resources back to their original state, often caused by applications recreating them during the run. This ran into problems when our resource maps had stale data in them, i.e. a texture that had been deleted by the app but remained in our gTextureMap. We could inadvertently delete a resource we had just genned. For example, in ResetReplay(), say we have two textures to delete: // gTextureMap[1] start with 5 const GLuint glDeleteTextures_texturesPacked_1[] = { gTextureMap[1] }; glDeleteTextures(1, glDeleteTextures_texturesPacked_1); // We just deleted texture 5, now create a new one glGenTextures(1, reinterpret_cast<GLuint *>(gReadBuffer)); // The driver returned 15, which was unused at this time UpdateTextureID(1, 0); // gTextureMap[1] now contains 15 ... // gTextureMap[2] happens to start with 15, which was in use in // the trace, but was deleted and is no longer in use. The // deleted value is not cleared from gTextureMap (which is // another possible way to solve this). const GLuint glDeleteTextures_texturesPacked_2[] = { gTextureMap[2] }; glDeleteTextures(1, glDeleteTextures_texturesPacked_2); // Whoops! We just deleted our brand new texture 15, even though // it no longer maps to the original texture. glGenTextures(1, reinterpret_cast<GLuint *>(gReadBuffer)); UpdateTextureID(2, 0); // Now gTextureMap[2] contains whatever came back from the driver ... // The first use of gTextureMap[1] will fail on loop because // texture 15 no longer exists! To avoid this problem we delete all resources up front before genning any new ones. const GLuint deleteTextures[] = {gTextureMap[1], gTextureMap[2]}; glDeleteTextures(2, deleteTextures); // Now we no longer have any deletes in the create sequence glGenTextures(1, reinterpret_cast<GLuint *>(gReadBuffer)); UpdateTextureID(1, 0); glGenTextures(1, reinterpret_cast<GLuint *>(gReadBuffer)); UpdateTextureID(2, 0); This is applied to all the resources we regen right now. This CL: * Merges the deletion of new resources (that didn't exist when the trace starts) with resources that are being regenned. That means there is just one big delete. * Removes Delete from the call sequences we track for each resource since we no longer need to keep them around. * Adds a formatting helper to avoid code duplication. Test: Blade&Soul Revolution MEC (UE4) Bug: angleproject:4599 Bug: angleproject:7053 Change-Id: Ida3b7e1ad5d94c5e9860447d5cf959278f37ad47 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3492849 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Gert Wollny <gert.wollny@collabora.com> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Lubosz Sarnecki d98f4812 2022-02-17T15:22:22 FrameCapture: Capture empty buffer generation. This avoids emitting VertexAttribPointer with non-null offsets when the array buffer is empty and a vertex array is bound in MEC. When no buffer is bound, which was also the case if the buffer was empty, non-null offsets are not allowed in VertexAttribPointer and will result in: "Client data cannot be used with a non-default vertex array object." Add EmptyArrayBuffer test to VertexAttributeTestES3. Test: angle_end2end_tests --gtest_filter="VertexAttributeTestES3.EmptyArrayBuffer/*" Bug: angleproject:7026 Change-Id: I0cb02a5588f5d2bbc85f58b75fd14493b644d52b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3468524 Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Lubosz Sarnecki <lubosz.sarnecki@collabora.com>
Cody Northrop 9e323299 2022-02-02T18:09:36 FrameCapture: Regen framebuffers on Reset Regenerate framebuffers that have been deleted and recreated during the run. This required changing the order of how resources are updated during Reset. Textures need to come before framebuffers so they can be regenerated before being bound. Test: MEC of genshin_impact trace frames 2-100 Bug: angleproject:6893 Change-Id: I0d14e09a5e378e7553dec54f4608eefe1bf397dd Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3435112 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Lubosz Sarnecki 287057b3 2022-01-25T17:01:43 FrameCapture: Don't track coherent buffers before capture starts. Even though coherent buffer storages were only captured after capture was activated, the buffer tracker was incorrectly initialized with the first call to glMapBufferRange, even though capture was not active. This fixes corrupted rendering in War Planet Online due to all coherent buffer storages being tracked at initialization of the app, when FrameCapture was enabled but not active. Introduce mMidExecutionCaptureActive, which exposes if MEC is currently executed. Bug: angleproject:5857 Bug: angleproject:6774 Change-Id: I4849d6497e8e08aefc60e68bae027915e9b2912f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3416227 Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Lubosz Sarnecki <lubosz.sarnecki@collabora.com>
Lubosz Sarnecki c5498b95 2022-01-21T13:33:49 FrameCapture: Reset immutable buffers correctly. Restore immutable buffers using UpdateClientBufferData. Regenerate immutable buffers using CaptureBufferStorageEXT. Bug: angleproject:4599 Bug: angleproject:5857 Bug: angleproject:6774 Change-Id: I8e80e9e32633b1303855e5a6ba7ac62941929645 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3406755 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Lubosz Sarnecki <lubosz.sarnecki@collabora.com>
Lubosz Sarnecki 8474c8e1 2022-01-21T12:30:15 FrameCapture: Add Renderbuffers to mStartingResources. This prevents Renderbuffers being deleted in Reset when they were captured with MEC and added to the Setup function. Bug: angleproject:5857 Bug: angleproject:4599 Change-Id: Ie61f75f69e3a3846877b1e8f5d9c98d5d0cecb2a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3406754 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Lubosz Sarnecki <lubosz.sarnecki@collabora.com>
Lubosz Sarnecki 526c93dd 2022-01-05T17:21:34 FrameCapture: Detect GL_MAP_COHERENT_BIT_EXT correctly. In MEC, look for GL_MAP_COHERENT_BIT_EXT in getStorageExtUsageFlags as it will never occur in getAccessFlags. GL_MAP_COHERENT_BIT_EXT will also never occur in glMapBuffer access flags, so just pass false. Bug: angleproject:5857 Change-Id: I9bc2a5d334d3b90653d33439d4055965593de5b8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3406753 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Lubosz Sarnecki <lubosz.sarnecki@collabora.com>
Lubosz Sarnecki 515f60bd 2022-01-20T17:39:48 FrameCapture: Keep MEC Setup resources in Reset. This fixes a regression in Reset when using MEC introduced by 462cdb08e395edbf5bace1408715e35239a0b1fa. Don't call MaybeCaptureUpdateResourceIDs in maybeCapturePostCallUpdates before capture starts, since it's adding resource IDs to mNewResources. Don't add resources to mNewResources if they are already in mStartingResources in CaptureUpdateResourceIDs. Add FrameBuffers to mStartingResources before MaybeCaptureUpdateResourceIDs is called. Add Buffers to mStartingResources before calling MaybeCaptureUpdateResourceIDs. Add VertexArrays to mStartingResources in CaptureMidExecutionSetup. Bug: angleproject:4599 Bug: angleproject:6870 Change-Id: If428cbbdbcfa17c221b9e110a990cf6ebc9107c2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3404087 Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Lubosz Sarnecki <lubosz.sarnecki@collabora.com>
Tim Van Patten 462cdb08 2022-01-06T18:46:21 Capture/Replay: Reset FBOs, RBOs, VAOs Add resetting framebuffers, renderbuffers, and vertex arrays to MaybeResetResources(). This is required to prevent leaks in app launch traces, such as Angry Birds 2 (com.rovio.baba). Bug: angleproject:4599 Change-Id: I34b45ecb1a1b5144f1e23b6bc56315f7713fed94 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3371881 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Tim Van Patten <timvp@google.com>
Lubosz Sarnecki c984dad5 2021-12-03T16:02:49 FrameCapture: Don't remove protection from shared pages. Don't remove protection from pages that are shared when a persistent coherent buffer storage is unmapped. The shared page can still be relevant when the the other buffer is kept and written to. Add a PageSharingBuffers test that produces this behaviour. Test: angle_end2end_tests --gtest_filter="BufferStorageTestES3.PageSharingBuffers/*" Bug: angleproject:5857 Change-Id: I6927f25229d2dfe9f68ba9a993e9d3e994bc7ce0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3306623 Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Lubosz Sarnecki <lubosz.sarnecki@collabora.com>
Gert Wollny 5f53268c 2021-11-04T17:56:48 Capture/Replay: Gather Program sources directly from call With CreateShaderProgramv the sources were collected from the attached shaders, wich gave complications, because normally the the shaders were detached right after program linking and a different handling was needed when capture was enabled, handling that let the replay tests fail. To overcome this gather the shader source directly from the call parameters instead of pulling it from the attached shaders. Bug: angleproject:6180 Bug: angleproject:6659 Change-Id: I248c1aa0f58b61519b938fce1a77fb25dc0a7cfc Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3262133 Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Gert Wollny <gert.wollny@collabora.com>
Cody Northrop 2ebd583e 2021-12-22T11:24:43 Android: Remove setenv from common path In Android production stress testing, the setenv call was causing a race condition. To fix, only use setenv in the paths that need it as a performance optimization. Specifically, FrameCapture makes use of it every frame. Bug: angleproject:6822 Change-Id: I452f1ef8607ca9baf15d69246932c47454a3ce46 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3353893 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Ian Elliott <ianelliott@google.com> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Jamie Madill ab288fea 2021-07-09T13:02:08 Upgrade restricted traces. (Re-land) Includes removing capture to temporary ResourceMaps, and including all source files in the JSON. Bug: angleproject:5133 Change-Id: I0508dd46a9f613a96ca3635f82b6904c0f2523a7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3345222 Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill c1f478fe 2021-12-20T12:37:33 Frame Capture: Allow for no FBO when running MEC. Multi-context captures use the surfaceless context extension. That was crashing MEC because we were assuming the context would have a Framebuffer. Bug: angleproject:5133 Change-Id: I6be12d332f4754f80c088d88973219327eca251a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3352084 Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill eba2e620 2021-12-15T12:29:12 Capture/Replay: Fix uniform program indexing. We were using the "native" version of the program ID in the update call, which could overflow the bounds of our fixed-size program maps. Instead use the captured (and upper-bounded) version of the ID and only get the mapped ID when calling GetUniformLocation. Bug: angleproject:6431 Bug: angleproject:6816 Change-Id: I807bd07c9dcff6ba5a50991e28b0a58d16f7bc63 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3345220 Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Lubosz Sarnecki d4b8cd5e 2021-09-14T16:34:31 FrameCapture: Implement capture of coherent bufferstorages. Track buffers with the GL_MAP_COHERENT_BIT_EXT access flag in a CoherentBufferTracker on a per page basis using the PageFaultHandler and protection functions from system_utils. Check for dirty memory and capture it on draw calls. Bug: angleproject:5857 Change-Id: Ib098f96952db7583d3e6517570c179e7754f54b2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3168629 Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Lubosz Sarnecki <lubosz.sarnecki@collabora.com>
Jamie Madill f60b152c 2021-12-06T10:19:53 Frame Capture: Merge small frames into single sources. By buffering up the replay functions before writing them out into sources, we can reduce the number of replay files by a large margin. Bug: angleproject:5133 Change-Id: I0a556fd1a3a5f2dcc8a26b761e885c9b7e464cf5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3316200 Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill e8b186c9 2021-12-09T09:45:20 Frame Capture: Don't unmap regenned buffers in reset. These buffers are deleted and recreated, so unmapping them gives a "resource not mapped" error during replay. Found when working on the "world_war_doh" trace. Bug: angleproject:5133 Change-Id: Id1e6318c44a2a09fa643ef0a72f1d03d8396e5fb Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3327862 Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill a24919e7 2021-12-09T10:04:25 Frame Capture: Clear array buffer binding in MEC. This should allow us to properly reset buffer state when capturing vertex attribute pointer state in the per-context (not shared) setup function. Also adds a missing replay state buffer binding update. Fixes a state serialization difference in "badland". Bug: angleproject:5133 Change-Id: I8509dbf7211726ff47f4e7e5ff86a0eb8726d75c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3327861 Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill 9b23be91 2021-12-08T13:55:22 Frame Capture: Fix client buffers in MEC. In some cases we would neglect to reset the currently bound array buffer to "null" before capturing a client array buffer in MEC. Noticed in the "badland" trace context setup. Bug: angleproject:5133 Change-Id: I693edce763b449720a7f2123dcaf460854142e91 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3323683 Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill d02d6a40 2021-12-06T09:26:14 Frame Capture: Track written files in ReplayWriter. This means we don't need to recreate the list of written files in the JSON where we list the trace files. It will allow for more flexibility when we change what trace files we output. Bug: angleproject:5133 Change-Id: I651b6a281c50040d32361a5a020ba3eaa4241bf0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3316199 Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill 0f09d378 2021-12-07T13:32:39 Frame Capture: Track return value in max resource IDs. This adds handling for return value processing when it comes to maximum resource IDs. Specifically for glCreateShader and glCreateProgram. Fixes MEC with re-capture with the blockman_go and probably other traces that call CreateShader as the final operations during setup. Bug: angleproject:5133 Change-Id: I799dfec776ca8c80a0b89c7f0c7c23423ef3896a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3320887 Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill dcadfa87 2021-12-07T10:34:56 Frame Capture: Fix missing header include in shared setup. This could produce undefined string errors in some traces. Bug: angleproject:5133 Bug: angleproject:6772 Change-Id: I336369a035e30fc7d73530084b5e192d60afee1b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3320865 Reviewed-by: Lubosz Sarnecki <lubosz.sarnecki@collabora.com> Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill 8313ffe2 2021-11-29T15:46:25 FrameCapture: Add ReplayWriter helper class. This centralizes all of the replay file I/O into a single point. Each function is stored separately in this class. Right now there's some small file format changes: - the namespaces for the capture label are gone. these had no functional impact now that each trace was a separate module. - the header is cleaned up into private and public functions. this cleans up a few things like defining non-existent functions. - inline variables are tracked through the replay. they are now global instead of anonymous, and string sets get reused instead of duplicated between frames. There should be no functional changes with the naming of the trace files or the trace behaviour. This change sets the stage for the ReplayWriter buffering multiple frames into a single cpp file on disk, which can potentially reduce the number of object files in the compilation by a great deal. It could also be extended to work with buffered I/O so we don't block and hitch when we're writing large trace files. Bug: angleproject:5133 Change-Id: Ib96685e1202ac8101a4b828fa79642236af2120a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3311940 Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill 6f96a189 2021-12-01T11:14:33 FrameCapture: Clean up 'WriteCppReplayFunctionWithParts'. This function was using two extra temporary streams that it didn't need. Clean this up and remove the extra streams and repeated code. Bug: angleproject:5133 Change-Id: I8065a189211ba9030fee523dc7145dc5daf71d92 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3311577 Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Gert Wollny 3b6f80b7 2021-11-23T10:07:43 Capture/Replay: eliminate redundant parameters in GenOnBind The template parameter already defines the parameter value name and the parameter value type, so add some traits to simplify the call interface of the function. Bug: angleproject:6425 Change-Id: I037bed8e5cc2e7367d8faa3af5d4fba2bfbb52c3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3295617 Commit-Queue: Gert Wollny <gert.wollny@collabora.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Cody Northrop ce854632 2021-11-29T10:48:48 FrameCapture: Fix Gen on Bind for MEC The logic for detecting whether a resource has been generated was not accounting for starting resources, which would only be populated if using MEC. We also weren't tracking framebuffer creation correctly in CaptureMidExecutionSetup. Test: Asphalt 9 MEC Bug: angleproject:5883 Bug: angleproject:6425 Change-Id: I8a7dfa4736c4d735dec8cd26ffa329f051927de6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3307778 Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Cody Northrop 440e5458 2021-11-27T19:55:06 FrameCapture: Integer attribs in MEC If the component type of a vertex attribute is integer, we need to use the appropriate VertexAttribI* functions to set it up. Test: Asphalt 9 MEC Bug: angleproject:5883 Change-Id: I2ab2248e5a36cc6636b081acf6474b5dbe2484db Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3305057 Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Gert Wollny 1d555687 2021-11-09T11:16:24 Capture/Replay: Set FBO ID when generated on bind GLES allows FBO ID's to be reserved on bind, so if a FBO is bound with and ID that was not yet reserved by a glGenFramebuffers call, update the resource tracking and the resource map to account for this resources that was created on bind. Bug: angleproject:6425 Change-Id: I343fc17bfbbfd9c8c47d6fe207a4f3817acb835d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3190970 Commit-Queue: Gert Wollny <gert.wollny@collabora.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Gert Wollny 71bffb8a 2021-11-09T11:16:07 Capture/Replay: Handle newly generated FBOs in tracker Bug: angleproject:6425 Change-Id: I39d22a6770290a0c407ac358b1c059c6a2ddeefa Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3269886 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Gert Wollny <gert.wollny@collabora.com>
YuxinHu a514df08 2021-10-27T01:25:11 Add detachShader capture calls in MEC This change adds a capture call to detach shader object before deleting the shader object in function GenerateLinkedProgram(), if that is also what the app does. GenerateLinkedProgram() is part of the Mid Execution Capture (MEC), and the purpose of the MEC is to setup a program that more closely mirrors the original app. The game World Cricket Championship2 detaches the shader object before deleting the shader object. With this change, we can follow the same behavior in GenerateLinkedProgram(). This ensures that the Shader Object refcount is decremented to 0 before the CaptureDeleteShader call is applied, and the ShaderProgramID handle assigned to the Shader Object will be released and can be reused for subsequent glCreateShader calls. The total number of ShaderProgramID we need will be consistent between SetupReplayContextShared() and the game uses. We are allocating memory slots for gUniformLocations2 array based on the total number of ShaderProgramID the game uses. Keeping the ShaderProgramID counts the same between trace replay and the game ensures we allocate the right amount of memory for the trace replay. Bug: angleproject:6621 Bug: b/194508692 Change-Id: Ib2810b486a6e9108db2a32f084d650a25f14bebd Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3246533 Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Yuxin Hu <yuxinhu@google.com>
Gert Wollny f020c713 2021-10-12T20:29:15 Capture/Replay: Allow capturing Gen/Delete with zero elements This is allowed, and hence the capture/replay should also work. Bug: angleproject:6558 Change-Id: Iae40e2870f9ff121c8396ee4c0caf0905d3fd84c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3220632 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Gert Wollny <gert.wollny@collabora.com>
Gert Wollny 8b627444 2021-10-13T10:58:40 Capture/Replay: capture program with ActiveShaderProgram too Here the program parameter is the second parameter, so UpdateCurrentProgram needs some refactoring too, to support specifying the parameter position. Bug: angleproject:6560 Change-Id: Iea08e1c0b7271bcd82aba64898cec76c09edefbb Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3220690 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Gert Wollny <gert.wollny@collabora.com>
Cody Northrop 5a682795 2021-10-19T18:10:43 Capture/Replay: Fix glAttachShader filtering Dota Underlords capture was filtering shaders that should be active. It is using a pattern that creates shaders in advance, then attaches them in later frames. This requires MEC to setup the shader, but not the program. We were failing to set those active because glAttachShader refers to two ShaderProgramIDs, and we've only been scanning for the first in any given API call: glAttachShader(gShaderProgramMap2[1], gShaderProgramMap2[2]); This CL fixes it by scanning for all ShaderProgramIDs in each call. Test: Dota Underlords MEC Bug: angleproject:5857 Change-Id: I1f76ad3345178cdfeb00479a84489dd363858e13 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3233875 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Jamie Madill d8c18ac6 2021-10-08T13:00:19 Re-land: "Isolate commit_id.h from other code." Re-land limits the angle_version deps to Windows to fix an iOS visibility rule violation in GN. Instead of recompiling multiple source files, we can seal off the files that include commit_id to prevent recompilations when the commit changes and source files don't change. Bug: angleproject:2551 Change-Id: I033f00ec7afe4bfd01e29e0eea8848eea27747a0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3233899 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Shahbaz Youssefi 7defdb60 2021-10-19T14:07:07 Revert "Isolate commit_id.h from other code." This reverts commit 6d7ebf656d06f1152967aa5f4457d3787a24732c. Reason for revert: Suspected reason for failing ANGLE roll into Chromium Original change's description: > Isolate commit_id.h from other code. > > Instead of recompiling multiple source files, we can seal off the > files that include commit_id to prevent recompilations when the > commit changes and source files don't change. > > Bug: angleproject:2551 > Change-Id: I98800c5a8e04ec7d4c3e57ea0eb3b636d3b224bb > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3212895 > Commit-Queue: Jamie Madill <jmadill@chromium.org> > Reviewed-by: Geoff Lang <geofflang@chromium.org> > Reviewed-by: Jonah Ryan-Davis <jonahr@google.com> Bug: angleproject:2551 Bug: angleproject:6588 Change-Id: I19f41141f57d0683efb9a4ec043e078a9f7dc925 No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3226056 Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Jamie Madill 6d7ebf65 2021-10-08T13:00:19 Isolate commit_id.h from other code. Instead of recompiling multiple source files, we can seal off the files that include commit_id to prevent recompilations when the commit changes and source files don't change. Bug: angleproject:2551 Change-Id: I98800c5a8e04ec7d4c3e57ea0eb3b636d3b224bb Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3212895 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
Gert Wollny bb5dbd49 2021-10-05T11:57:44 Capture/Replay: Handle TvoidPointer in specialization Bug: angleproject:6521 Change-Id: I863ad5307498e6394f5fbe3e650ce29c821083b1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3204960 Commit-Queue: Gert Wollny <gert.wollny@collabora.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Cody Northrop 8770cefc 2021-10-04T13:47:23 Capture/Replay: Store enums to JSON as hex We're storing some enums in the per-trace JSON as decimal. This makes them difficult to read, i.e.: "DisplayDeviceType": 12810, "DisplayPlatformType": 13392, "DrawSurfaceColorSpace": 12425, If we instead convert them to hex, they are much easier to read and grep the source for. "DisplayDeviceType": "0x320A", "DisplayPlatformType": "0x3450", "DrawSurfaceColorSpace": "0x3089", Since JSON doesn't actually support hexadecimal values, this CL stores them as strings. Ideally we could take this a step farther and store the enum directly in JSON, but we have no facilities for converting a string back to an enum. Bug: angleproject:5133 Bug: angleproject:6515 Change-Id: I7b5d4dc8958d43c611da1fe98887e089f3d855b2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3204135 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Jamie Madill 043120ee 2021-09-29T15:56:46 Capture/Replay: Allow disabling program trimming. The ANGLE_CAPTURE_TRIM_ENABLED variable disables program trimming when set to 0. This is useful for trace validation, which expects the GL state vectors to be identical. Bug: angleproject:5133 Change-Id: I3ab41de80af7b223c4cb8a1b7e14f049717305fc Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3193417 Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Jamie Madill 0004ecc2 2021-09-22T13:39:55 Write GL info to test artifact in end2end_tests. These will show up as glinfo.json in the "cas outputs" of the shard that runs these tests. We currently have information for Pixel 4, NVIDIA and Intel Win/Linux, and SwiftShader Windows. GLES 1.x extensions are treated separately. Some WebGL/Mac-only/D3D-only extensions show as unsupported anywhere. In order to capture artifacts on Android, we use a render test output parameter. Bug: angleproject:6379 Change-Id: I560b219b5a586cdbb68d272090f38eedc76aba20 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3176780 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Ian Elliott <ianelliott@google.com> Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
Jamie Madill b930b9d3 2021-09-08T09:08:28 Capture/Replay: Remove redundant "capture" from label old: trex_200_capture_context1_frame001.cpp new: trex_200_context1_frame001.cpp The 'capture' word wasn't really adding any useful information. Take it out so the filenames are a bit shorter. Bug: angleproject:5133 Change-Id: Ibd7d47df2aa1f24a641c5d5b2a6dd14d6ce240e1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3149370 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Cody Northrop 5db7885f 2021-09-28T17:16:40 FrameCapture: Fix GLES1 VertexArrayState Broke recently when adding support for ES3.1 semantics. GLES1 traces are hitting the loop below, generating BindVertexBuffer. Test: Zillow MEC (GLES 1) Bug: b/199919700 Change-Id: Ibe83d1b4009b00f891903cae889449d42e9f510b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3192990 Reviewed-by: Tim Van Patten <timvp@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
Cody Northrop 3719c172 2021-09-20T17:33:14 FrameCapture: Filter program setup calls This CL adds filtering to shared setup calls based on whether a resource is used during the frame capture. Calls that are filtered out will not be written to SetupReplayContextShared. This eliminates setup for unused resources. This has become critical for apps like Fortnite that compile tens of thousands of programs before running any frames. This can take multiple minutes to perform before rendering a frame. To achieve this, we do the following: - Add an active status to every call (default to TRUE). - Mark setup calls for tracked resources to FALSE during MEC. - During the run, track for any use of the resource, and mark its setup calls back to TRUE. - Enable tracking for ShaderPrograms. Test: Fortnite MEC Bug: b/180418810 Bug: angleproject:5658 Change-Id: I5070297d339de3b80f870640e8955077a2bc20aa Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3150387 Commit-Queue: Cody Northrop <cnorthrop@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com>
YuxinHu a09dca68 2021-09-20T23:40:28 Fix app trace heap buffer overflow During runMidExecutionCapture(), we need to update mMaxAccessedResourceIDs[idType] for idType==ShaderProgram, so that we have enought slot in gShaderProgramMap2 to store the temp shader we create in GenerateLinkedProgram(). Changes in this CL: 1.Renaming Jamie's mMaxAccessResourceIDS array update function updatePreCallResourceCounts() to updateResourceCounts(). 2. Adding updateResourceCounts() to Cody's setup call post processing function scanSetupCalls(). In GenerateLinkedProgram(), we add the temp shader create call with its' tempShaderID into the shareGroupSetupCalls. After that we will run the function scanSetupCalls(), where we will be able to loop through the tempShaderID and update the mMaxAccessResourceIDS[ShaderProgram] with the correct count. Bug: angleproject:6398 Change-Id: Iee78b3b7c1908a90ee8456476902f5e52e4615dc Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3172005 Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Yuxin Hu <yuxinhu@google.com>
Cody Northrop 0babcb08 2021-09-14T10:49:06 FrameCapture: Scan Setup instructions The ability to add calls from a multitude of locations rather than a centralized spot has become a useful feature. But some locations were updating the max read buffer size via updateReadBufferSize, while others weren't. Rather than force everything to call a central spot for tracking, add post process scanning of Setup calls to handle updates. This is already done for frame calls in maybeCapturePreCallUpdates. Test: Fortnite MEC Bug: b/180418810 Bug: angleproject:5658 Change-Id: I51d3a39ea40073d2dca50339ef4b38712b81f4ca Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3160500 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Jamie Madill 1af5c46c 2021-09-14T14:40:49 Move JsonSerializer from libANGLE to common. This lets us use the serializer from outside of libANGLE. The plan is to use it to serialize a list of supported extensions from the tests. Bug: angleproject:6379 Change-Id: Ib7b64cca32e733e342b80f893d3752318089f0c2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3163361 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>