src/libANGLE/renderer/d3d/d3d11

Branch


Log

Author Commit Date CI Message
Le Hoang Quyen 715e935d 2025-10-08T21:16:08 D3D11: Add UMA metrics for Create*Shader's timing Bug: chromium:399642827 Change-Id: Iaf22b598305d8c11ec0ea9bafa6cd1361db571f5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/7022089 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Quyen Le <lehoangquyen@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org> Commit-Queue: Quyen Le <lehoangquyen@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Tingwei Guo 94777428 2025-08-08T10:36:22 Shading rate should be {1,1} when enabled PER_SAMPLE According to spec, if FETCH_PER_SAMPLE_ARM is enabled, the fragment shading rate is set to {1,1}. Bug: angleproject:437957110 Change-Id: I3ea6958f1aaec5f13923f62001906c7c6c71e09e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6839957 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Tingwei Guo <tingwei.guo@arm.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com>
Alexander Ovchinnikov 9530a896 2025-09-05T18:02:42 Don't use DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT A swap chain for Windows.UI.Composition is created with DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT flag, but is resized without it. This leads to an error, because according to MSDN, this flag cannot be changed by a call to ResizeBuffers. In fact, this flag is never used by any code in ANGLE, so we should remove it. Bug: angleproject:442600654 Change-Id: I3eecd96abd243433b402780c30634abf2528c323 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6919163 Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Amirali Abdolrashidi ad7ee7fa 2025-09-08T11:53:57 Fix RGB565/BGR565 loading functions The BGR565-related loading functions seem to have been defined based on D3D11, especially since D3D11 only has format support for B5G6R5. However, if other backends, such as Vulkan, try to use BGR565, the loading functions do not work as intended. This change aims to correct the loading functions in order to have a single loading methodology for all backends, and to prepare for the future changes that allow the proper usage of B5G6R5 for Vulkan. * Updated the component order in the loading functions related to RGB565 and BGR565. * Updated D3D function map and data related to BGR565 for consistency. * Reverted the PackPixels() exception for RGB565 in Renderer11. * Fixed typo in D3D format data. Bug: b/441803462 Bug: b/409867243 Change-Id: I4d3e497a9435bd65bdf64b527b094267a0353cb8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6916353 Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com>
Amirali Abdolrashidi e04b7198 2025-08-28T14:58:08 Fix BGR565 pixel functions It seems that the B5G6R5 read/write pixels switch the red and blue components due to them being based on D3D11, which does not seem to have native support for R5G6B5, instead using B5G6R5 and using the related loading functions to switch the two components. However, Vulkan supports both native R5G6B5 and B5G6R5, and using the latter format (e.g., using BGR565 in the backend instead of RGB565) causes errors in the tests. * e.g., the test BlendPackedTest.RGB565/ES2_D3D11 would fail if the readColor() for B5G6R5 is changed to switch red and blue, although the test is regarding RGB565. This does not affect Vulkan, but if BGR565 is used in Vulkan, the test would fail without this switch. * Fixed the order of the component values in B5G6R5 read/write functions. * Updated packPixels() in D3D11 renderer to use R5G6B5's functions when the internal format is GL_RGB565 and the texture's format is BGR565. Bug: b/441803462 Bug: b/409867243 Change-Id: Ia4883f6dfb5d96e77bbdc087f48e7ffca42a5657 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6847283 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Rafael Cintron 2207a0a2 2025-09-04T17:32:12 Remove multisampledRenderToTextureEXT from D3D Partial implemented was never completed, nor utilized for XR scenarios. CL removes the implementation Bug: chromium:443111620 Bug: angleproject:433462527 Bug: angleproject:42261786 Bug: angleproject:42263509 Bug: angleproject:42263677 Change-Id: If95581d5f9b0e43be96ef6913fe73f547e0b5501 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6915970 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Rafael Cintron <rafael.cintron@microsoft.com>
Yang Gu a3505ae6 2025-08-28T13:47:05 Prefer non-WARP device for angle_end2end_tests When we have both WARP and a real GPU, but WARP comes first, angle_end2end_tests always shows the active GPU is 0, and always uses WARP for tests. This CL prefer the non-WARP device instead. Bug: angleproject:441816895 Change-Id: I787b25f9ff6ad0a98e5fbc445b580b897bd52033 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6896220 Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Tom Sepez a4e0bacc 2025-08-28T16:41:09 Avoid dangling pointer in Context11::popGroupMarker(). Fortunately, the pointee is unused, but move the string from the marker stack before destroying it during a pop() of the stack, so that its c_str() may live through a call to endEvent(). -- Do the same for Context9::popGroupMarker(). Bug: b/441729484 Change-Id: Id05aa92529ecc8938282273e68d95ac51966d229 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6896927 Auto-Submit: Tom Sepez <tsepez@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Tom Sepez a02670d6 2025-08-26T20:41:16 Move unsafe buffers inside header guard macros While this is exactly opposite of what Chromium has chosen to do, there is an issue with clang-format trying to indent preprocessor directives four spaces relative to include guard. This is because Angle's .clang-format file specifies IndentPPDirectives: AfterHash but Chromium's does not. The current placement is sufficient to throw off clang-format's guard detection since the guard macro no longer covers the entire file. Bug: b/436880895 Change-Id: Ic6b99c8cef6213939cdf9b42af8730e1eb423065 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6885892 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org> Auto-Submit: Tom Sepez <tsepez@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Tom Sepez 25390156 2025-08-21T00:13:19 Suppress unsafe buffers on a file-by-file basis in src/ [1 of N] In this CL, we suppress many files but stop short of actually enabling the warning by not removing the line from the unsafe_buffers_paths.txt file. That will happen in a follow-on CL, along with resolving any stragglers missed here. This is mostly a manual change so as to familiarize myself with the kinds of issues faced by the Angle codebase when applying buffer safety warnings. -- Re-generate affected hashes. -- Clang-format applied to all changed files. -- Add a few missing .reserve() calls to vectors as noticed. -- Fix some mismatches between file names and header comments. -- Be more consistent with header comment format (blank lines and trailing //-only lines when a filename comment adjoins license boilerplate). Bug: b/436880895 Change-Id: I3bde5cc2059acbe8345057289214f1a26f1c34aa Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6869022 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao b4d84458 2025-05-23T18:08:19 Move Buffer from VertexBinding to VertexArray In later CL we will not taking shared context lock for certain VertexArray API calls. VertexArray itself is per context, so this sounds reasonable to do. The main challenge here is a lot of VertexArray function end up accessing gl::Buffer object, which could be modified by other shared contexts. In order to safely not taking the shared context lock, we need to separate out Buffer object out of VertexArray itself so that these lockless APIs will take VertexArray that does not have access to buffer. In this CL, VertexArray is split into two classes: VertexArrayPrivate is everything in VertexArray except buffers. VertexArray is a subclass of VertexArrayPrivate and owns all the buffers. Buffer is removed from gl::VertexBinding class. In order to let back end access to buffers, VertexArrayImpl holds a weak reference to VertexArray::mVertexArrayBuffers (which is a vector of buffers). Further, VertexArrayBufferBindingMask mBufferBindingMask is moved from VertexArrayState into VertexArray class well, since it tracks which index has a non-null buffer. The bulk of change are due to the VertexARrayImpl constructor change, since it now takes vertexArrayBuffers argument. Other bulk of changes are due to VertexBinding no long has the buffer, but you need to get it directly from VertexArray or VertexArrayImpl. This CL also reverts some of the change in crrev.com/c/6758215 that mVertexBindings no longer contains kElementArrayBufferIndex. BYPASS_LARGE_CHANGE_WARNING Bug: b/433331119 Change-Id: I15f4576f7c5c8d8f4d9c9c07d38a60ce539bfeea Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6774702 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Charlie Lao <cclao@google.com>
Charlie Lao 8dca0efe 2025-07-21T15:29:10 Replace VertexArray::DIRTY_BIT_LOST_OBSERVATION with API call This dirty bit was added so that back end can inspect buffers and set proper VertexArray::DirtyBitType. The same thing can achieved by add a virtual function on VertexArrayImpl class. The advantage of virtual function on VertexArrayImpl is that all back end essentially have the same implementation and we can just implemented in VertexArrayImpl instead of duplicate in each back end. The other advantage is after this CL DIRTY_BIT_BINDING_n and DIRTY_BIT_BUFFER_DATA_n will be well aligned instead of offset by 1 caused by DIRTY_BIT_LOST_OBSERVATION. The other motivation of this change is in later CL I want to move mBufferBindingMask out of VertexArrayState, which means back end will not have access to it. By using VertexArrayImpl API, I can pass mBufferBindingMask directly to the back end via function parameter. So, this CL removed DIRTY_BIT_LOST_OBSERVATION, added VertexArrayImpl::checkBufferForDirtyBits(). Bug: b/433331119 Change-Id: I5c8cbc9bace63db416e86c2ae3631f74a12b20b8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6775986 Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao 2ac49bb6 2025-07-01T12:11:12 Reland "Vulkan: Move VertexArray::ElementBuffer away from observer" This reverts commit 79ac1a8cd767a32cce6401203e20c4bd4ca4d539. Reason for revert: the regression bug is fixed in PS6 The regression bug with the original CL is caused by when we bind a vertex array without element buffer rebind, we missed to reset mIndexRangeInlineCache. The other bug is that VertexArray::mDiryBits is 64 bit but VertexArrayBufferBindingMask is 16 bit, in VertexArray::setDependentDirtyBits(), bufferBindingMask.to_ulong() << DIRTY_BIT_BUFFER_DATA_0 is only producing the 32 bit value on windows platform due to unsigned long is 32 bit value. bits() is used and bit shift is operated on to uint64_t here to avoid dropping high bits on windows. Two tests are added that reproduce the regression bug caused by the original CL. Bug: angleproject:400711938 Original change's description: > Revert "Vulkan: Move VertexArray::ElementBuffer away from observer" > > This reverts commit 3f012a43ee2c101543785720eedfeaa80708479d. > > Reason for revert: https://issues.chromium.org/427064102 > > Bug: angleproject:400711938 > Original change's description: > > Vulkan: Move VertexArray::ElementBuffer away from observer > > > > Right now, VertexArray's element buffer is always observing buffer's > > change. In previous CLs, we have moved vertex array away from > > subject/observer usage. This CL moves element buffer away from > > subject/observer as well. Since the gl::Buffer tracks buffer's binding > > to each context's current vertex array's binding point, > > kElementArrayBufferIndex is added to VertexArrayBufferBindingMask bits > > so that the element buffer is tracked exactly the same as other vertex > > array buffer bindings. The VerextArray code has been modified to handle > > this special bit, since element buffer has its own binding point > > VertexArrayState::mElementArrayBuffer as opposed to > > VertexArrayState::mVertexBindings. After this CL, VertexArray object > > should be completely off subject/observer usages. > > > > Bug: angleproject:400711938 > > Change-Id: I662ddfabc95034bdc7734939c944ab033f41801c > > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6552160 > > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > > Reviewed-by: Geoff Lang <geofflang@chromium.org> > > Commit-Queue: Charlie Lao <cclao@google.com> > > Bug: angleproject:400711938 > Change-Id: I9487ba8b108baaeda1c8a27189dba64f77616774 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6663539 > Commit-Queue: Charlie Lao <cclao@google.com> > Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Bug: angleproject:400711938 Change-Id: I3f47ad1238c41f12b5cbd7a59b84be3fce1e9562 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6664004 Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Charlie Lao <cclao@google.com>
Zhuang Xu 3c8b492e 2025-06-26T09:39:29 Add histogram for DirectX device removal Bug: dawn:423964507 Change-Id: I22d40ede209797e759f4b4f9e4b86785df33dbe5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6665860 Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
Alexey Knyazev 392dc591 2025-05-15T00:00:00 Remove GL_CHROMIUM_sync_query Fixed: angleproject:420627279 Change-Id: I26dac7c55a7cf6b04121658144e1387be65d2569 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6593552 Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Charlie Lao ad18dc93 2025-04-02T16:23:50 D3D11: Remove the message from Buffer11 to gl::Buffer This CL removes the D3D back end's usage of Subject/Observer from Buffer11 to gl::Buffer. BufferFeedback argument has been added to various functions and directly applied to gl::Buffer object (which will propagate to VertexArray and texture/XFB if needed). gl::Buffer::mImplObserver is removed in this CL, and no longer a Observer. Bug: angleproject:400711938 Change-Id: Idf4d423904d057ab3a1e52acf8e2496df606cb89 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6514288 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao f5f6704c 2025-03-27T13:58:14 Vulkan: Remove mArrayBufferObserverBindings Right now VertexArray observes gl::Buffer change. Buffer change will end up with many virtual function calls on VertexArray. GL spec says that when buffer changes, only the current context's vertex array have to pick up the changes without any GL API call. All other context's vertex array must issue bind calls to pick up the buffer's state change. This CL removes VertexArray::mArrayBufferObserverBindings as gl::Buffer's observer. The Buffer's change is directly applied to current context's vertexArray (Note that gl::VertexArray still have mContentsObservers which is not touched in this CL. Once the content observer also removed, there will be no observer calls into gl::VertexArray which allows us to do further optimizations on vertex arrays.) In order to further reduce the overhead, we also tracks vertex array's binding index in the buffer. When a buffer is bound to current vertex array, the bit is set at that index and bit is removed when buffer is unbound. When vertex array becomes un-current, all bits are cleared. Since a buffer could be bound to multiple context's current vertex array, that bitmask is tracked for multiple contexts with the contextID. Bug: angleproject:400711938 Change-Id: I9ad91573e101d7bf11a742a3d823bd8965f43395 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6419663 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Alexey Knyazev 64888cb8 2025-04-24T00:00:00 Align multiview extensions usage with the specs As per the specs, the OVR_multiview2 extension requires and implicitly enables the OVR_multiview extension. Cleaned up the extension state checks and added dependency tests. No functional changes. Fixed: angleproject:417173927 Change-Id: I67d2c19f4ed2f2450bf7fe2a92625cc9525ca020 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6535750 Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Charlie Lao 3bbdee0f 2025-03-28T11:55:24 Vulkan: Remove Subject/Observer from BufferImpl Right now the gl::Buffer back end send message to the front end and then gl::Buffer propagate the message to the observers (vertex array, textures, transform feedback). We are seeing many of these kind of message passing (mainly to vertexArray), and each message is a virtual function call. The message call also lacks of context information that we can not do certain optimizations. This CL adopts the new API feedback argument approach for buffer APIs from the back end to the front end. The only difficulty I ran into is D3D backend where the message could be delivered from draw calls. For now the subject/observer code path is still kept in the gl::Buffer, but no back end will use it except D3D11. That will be removed in the later CL when D3D11 switch to use feedback mechanism. BYPASS_LARGE_CHANGE_WARNING Bug: angleproject:400711938 Change-Id: I5fb3b660fd4260b9ba691239ad777b575b31e2ab Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6408892 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Junji Watanabe f6e1d4d7 2025-05-02T12:02:09 Fix include header case mismatches This CL fixes the include header names to be aligned with the actual file names. It's problematic for cross compile on Linux, where file system is case sensitive. Context: Goma/Reclient's deps scanner was able to handle those case mismatches. But, Siso's builtin remote execution doesn't resolve them automatically. Bug: b/401959048 Change-Id: I98282899e31ea801058f82d4cad770413634f4f3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6508684 Reviewed-by: Charlie Lao <cclao@google.com> Auto-Submit: Junji Watanabe <jwata@google.com> Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
Xin Yuan cdcf6a63 2025-04-22T10:19:33 Add R10X6G10X6B10X6A10X6 support on angle Bug: angleproject:409355677 Change-Id: I8115ca73a038360f673552532e9d9b87ff846867 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6438114 Commit-Queue: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Alexey Knyazev 408f5853 2025-04-04T00:00:00 Make gl::Version data members private * Further simplified gl::Version implementation by making data members private and merging them. * Used proper version struct comparisons instead of accessing individual version components. * Moved known version constants to Version.h for broader availability. * Removed no longer used helpers: * PrivateState::getClientMinorVersion() * State::getClientMinorVersion() * Context::getClientMinorVersion() Bug: angleproject:408843436 Change-Id: I3ae8f495269d649253fa2381ecbfc018a184fa20 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6460787 Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Kimmo Kinnunen 78048112 2025-01-15T15:13:14 Fix IndexRange::vertexIndexCount calculation Use only one loop. Avoid redundant primitive restart index parameter. Avoid calling GetPrimitiveRestartIndexFromType() because the algorithm relies on the value being numeric_limits<T>::max(). Fixes a bug where primitive restart case would process the value after first primitive restart twice, once in both for loops. This would result in incorrect vertexIndexCount. Fix by removing IndexRange::vertexIndexCount, and instead using IndexRange::mCount == 0 to signify empty range. Bug: angleproject:401284933 Change-Id: Ifaeb9949f2e852fb7c5ef80bc47f72bfabba21a6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6333541 Reviewed-by: Geoff Lang <geofflang@chromium.org> Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com> Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com>
Kimmo Kinnunen c2679dbc 2025-03-10T12:15:08 Key vertex array index range cache on restart Key vertex array index range cache on primitive restart enablement. Add the test to WebGLCompatibilityTest as otherwise the VertexArray::getIndexRange() is not testable. Currently WebGL compatibility contexts allow changing primitive restart. Bug: angleproject:401284933 Change-Id: I48a53770d7dcb2276b89fd743f4834c53c8d8d1e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6333538 Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com> Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org>
Geoff Lang b9567391 2025-03-20T14:10:21 Prefer Device type requests over adapter LUID in D3D11. When the user requests both a non-hardware device type and a specific DXGI adapter LUID, prefer to honor the device type request. Chrome always requests LUIDs of the first available GPU to make sure that it prefers integrated GPUs over discreet. It only requests non-hardware device types when software rendering is desired. This behaviour change satisfies Chrome's intentions in both cases. Bug: chromium:402163834 Change-Id: Idc714498260591cafc37d810c83de08a364a72f6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6377165 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Cody Northrop db48967f 2025-03-05T09:07:10 Reland "Add GL_BGRA_EXT as a sized renderable format" This reverts commit 4bfb9da6f98b3e28905cc759a77bff750dfe3ff7. Reason for revert: More mapping fixes for GL backend Original change's description: > Revert "Reland "Add GL_BGRA_EXT as a sized renderable format"" > > This reverts commit 8f2fbbd1a0d16471596afad57c88f950a1ee3032. > > Reason for revert: http://anglebug.com/399913714 > > Original change's description: > > Reland "Add GL_BGRA_EXT as a sized renderable format" > > > > This reverts commit 22dfe435daa7c680c07bb8d4f1d98ab765e60ad0. > > > > Reason for revert: Fixed mapping back to BGRA_EXT for GL backend > > > > Original change's description: > > > Revert "Add GL_BGRA_EXT as a sized renderable format" > > > > > > This reverts commit 80093a7d8f850c3ab551ddb4972c2f1f27511433. > > > > > > Reason for revert: suspect for blocking rolling ANGLE into Chroimum > > > https://chromium-review.googlesource.com/c/chromium/src/+/6283973 > > > https://ci.chromium.org/ui/p/chromium/builders/try/chromeos-amd64-generic-rel-gtest/372754/overview > > > > > > Original change's description: > > > > Add GL_BGRA_EXT as a sized renderable format > > > > > > > > dEQP tests were updated to cover GL_BGRA_EXT as a sized renderable > > > > format. It was apparently always supposed to be, based on the > > > > wording of the spec. > > > > > > > > This CL adds that support and updates expectations, along with a few > > > > extra tests. > > > > > > > > Includes contributions from Robic.Sun@arm.com. > > > > > > > > Test: angle_end2end_tests, angle_deqp_*_tests > > > > Bug: b/42267264 > > > > Bug: angleproject:394384906 > > > > Change-Id: Ia10bcd61f66c5d99a3d27a2cfd6008c991ddcaa7 > > > > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6235444 > > > > Reviewed-by: Geoff Lang <geofflang@chromium.org> > > > > Commit-Queue: Cody Northrop <cnorthrop@google.com> > > > > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > > > > > > Bug: b/42267264 > > > Bug: angleproject:394384906 > > > Change-Id: I64572361cfed33b4ea17eabf278f580471d045c2 > > > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6285628 > > > Auto-Submit: Yuly Novikov <ynovikov@chromium.org> > > > Commit-Queue: Yuly Novikov <ynovikov@chromium.org> > > > Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> > > > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > > > > Bug: b/42267264 > > Bug: angleproject:394384906 > > Change-Id: I1bd9df904d93fd54286cbfce53fe89db89e842b9 > > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6310699 > > Commit-Queue: Cody Northrop <cnorthrop@google.com> > > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > > Reviewed-by: Geoff Lang <geofflang@chromium.org> > > Bug: b/42267264 > Bug: angleproject:394384906 > Bug: angleproject:399913714 > Change-Id: I9f79f39a6d9cba3b23c261005bc3e012d70cd1cf > No-Presubmit: true > No-Tree-Checks: true > No-Try: true > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6312977 > Auto-Submit: Cody Northrop <cnorthrop@google.com> > Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> > Commit-Queue: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Bug: b/42267264 Bug: angleproject:394384906 Bug: angleproject:399913714 Change-Id: Ifc98fcbb0883dc4a55ad358825e9c1935fa26eaa Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6330036 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Kimmo Kinnunen 62bf97d9 2025-03-10T14:23:31 Metal: Fix line loop indexes for primitive restart Use the existing code to generate line strips from line loops. Bug: angleproject:401284933 Change-Id: Ie131199c23b93364fabb8f0dc6766f7e8d5f2b8d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6333539 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org> Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com> Reviewed-by: Kenneth Russell <kbr@chromium.org>
Cody Northrop 4bfb9da6 2025-02-28T12:49:28 Revert "Reland "Add GL_BGRA_EXT as a sized renderable format"" This reverts commit 8f2fbbd1a0d16471596afad57c88f950a1ee3032. Reason for revert: http://anglebug.com/399913714 Original change's description: > Reland "Add GL_BGRA_EXT as a sized renderable format" > > This reverts commit 22dfe435daa7c680c07bb8d4f1d98ab765e60ad0. > > Reason for revert: Fixed mapping back to BGRA_EXT for GL backend > > Original change's description: > > Revert "Add GL_BGRA_EXT as a sized renderable format" > > > > This reverts commit 80093a7d8f850c3ab551ddb4972c2f1f27511433. > > > > Reason for revert: suspect for blocking rolling ANGLE into Chroimum > > https://chromium-review.googlesource.com/c/chromium/src/+/6283973 > > https://ci.chromium.org/ui/p/chromium/builders/try/chromeos-amd64-generic-rel-gtest/372754/overview > > > > Original change's description: > > > Add GL_BGRA_EXT as a sized renderable format > > > > > > dEQP tests were updated to cover GL_BGRA_EXT as a sized renderable > > > format. It was apparently always supposed to be, based on the > > > wording of the spec. > > > > > > This CL adds that support and updates expectations, along with a few > > > extra tests. > > > > > > Includes contributions from Robic.Sun@arm.com. > > > > > > Test: angle_end2end_tests, angle_deqp_*_tests > > > Bug: b/42267264 > > > Bug: angleproject:394384906 > > > Change-Id: Ia10bcd61f66c5d99a3d27a2cfd6008c991ddcaa7 > > > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6235444 > > > Reviewed-by: Geoff Lang <geofflang@chromium.org> > > > Commit-Queue: Cody Northrop <cnorthrop@google.com> > > > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > > > > Bug: b/42267264 > > Bug: angleproject:394384906 > > Change-Id: I64572361cfed33b4ea17eabf278f580471d045c2 > > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6285628 > > Auto-Submit: Yuly Novikov <ynovikov@chromium.org> > > Commit-Queue: Yuly Novikov <ynovikov@chromium.org> > > Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> > > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > > Bug: b/42267264 > Bug: angleproject:394384906 > Change-Id: I1bd9df904d93fd54286cbfce53fe89db89e842b9 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6310699 > Commit-Queue: Cody Northrop <cnorthrop@google.com> > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Reviewed-by: Geoff Lang <geofflang@chromium.org> Bug: b/42267264 Bug: angleproject:394384906 Bug: angleproject:399913714 Change-Id: I9f79f39a6d9cba3b23c261005bc3e012d70cd1cf No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6312977 Auto-Submit: Cody Northrop <cnorthrop@google.com> Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Commit-Queue: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Cody Northrop 8f2fbbd1 2025-02-27T13:33:06 Reland "Add GL_BGRA_EXT as a sized renderable format" This reverts commit 22dfe435daa7c680c07bb8d4f1d98ab765e60ad0. Reason for revert: Fixed mapping back to BGRA_EXT for GL backend Original change's description: > Revert "Add GL_BGRA_EXT as a sized renderable format" > > This reverts commit 80093a7d8f850c3ab551ddb4972c2f1f27511433. > > Reason for revert: suspect for blocking rolling ANGLE into Chroimum > https://chromium-review.googlesource.com/c/chromium/src/+/6283973 > https://ci.chromium.org/ui/p/chromium/builders/try/chromeos-amd64-generic-rel-gtest/372754/overview > > Original change's description: > > Add GL_BGRA_EXT as a sized renderable format > > > > dEQP tests were updated to cover GL_BGRA_EXT as a sized renderable > > format. It was apparently always supposed to be, based on the > > wording of the spec. > > > > This CL adds that support and updates expectations, along with a few > > extra tests. > > > > Includes contributions from Robic.Sun@arm.com. > > > > Test: angle_end2end_tests, angle_deqp_*_tests > > Bug: b/42267264 > > Bug: angleproject:394384906 > > Change-Id: Ia10bcd61f66c5d99a3d27a2cfd6008c991ddcaa7 > > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6235444 > > Reviewed-by: Geoff Lang <geofflang@chromium.org> > > Commit-Queue: Cody Northrop <cnorthrop@google.com> > > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > > Bug: b/42267264 > Bug: angleproject:394384906 > Change-Id: I64572361cfed33b4ea17eabf278f580471d045c2 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6285628 > Auto-Submit: Yuly Novikov <ynovikov@chromium.org> > Commit-Queue: Yuly Novikov <ynovikov@chromium.org> > Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Bug: b/42267264 Bug: angleproject:394384906 Change-Id: I1bd9df904d93fd54286cbfce53fe89db89e842b9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6310699 Commit-Queue: Cody Northrop <cnorthrop@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Yuly Novikov 22dfe435 2025-02-20T06:46:07 Revert "Add GL_BGRA_EXT as a sized renderable format" This reverts commit 80093a7d8f850c3ab551ddb4972c2f1f27511433. Reason for revert: suspect for blocking rolling ANGLE into Chroimum https://chromium-review.googlesource.com/c/chromium/src/+/6283973 https://ci.chromium.org/ui/p/chromium/builders/try/chromeos-amd64-generic-rel-gtest/372754/overview Original change's description: > Add GL_BGRA_EXT as a sized renderable format > > dEQP tests were updated to cover GL_BGRA_EXT as a sized renderable > format. It was apparently always supposed to be, based on the > wording of the spec. > > This CL adds that support and updates expectations, along with a few > extra tests. > > Includes contributions from Robic.Sun@arm.com. > > Test: angle_end2end_tests, angle_deqp_*_tests > Bug: b/42267264 > Bug: angleproject:394384906 > Change-Id: Ia10bcd61f66c5d99a3d27a2cfd6008c991ddcaa7 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6235444 > Reviewed-by: Geoff Lang <geofflang@chromium.org> > Commit-Queue: Cody Northrop <cnorthrop@google.com> > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Bug: b/42267264 Bug: angleproject:394384906 Change-Id: I64572361cfed33b4ea17eabf278f580471d045c2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6285628 Auto-Submit: Yuly Novikov <ynovikov@chromium.org> Commit-Queue: Yuly Novikov <ynovikov@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Cody Northrop 80093a7d 2025-02-03T08:50:21 Add GL_BGRA_EXT as a sized renderable format dEQP tests were updated to cover GL_BGRA_EXT as a sized renderable format. It was apparently always supposed to be, based on the wording of the spec. This CL adds that support and updates expectations, along with a few extra tests. Includes contributions from Robic.Sun@arm.com. Test: angle_end2end_tests, angle_deqp_*_tests Bug: b/42267264 Bug: angleproject:394384906 Change-Id: Ia10bcd61f66c5d99a3d27a2cfd6008c991ddcaa7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6235444 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Cody Northrop <cnorthrop@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Roman Lavrov cfb430c8 2025-02-10T13:19:05 Remove angle::ErrorStream helper Most uses of the helper either use just the code or a fixed string, which compiles to a few instructions. Using this helper adds 200+ bytes of assembly to each use, due to the unneeded instantiation of ostringstream which allocates a buffer etc. The combined effect of this CL on an Android perf build is ~12KB (0.2%) reduction in size. The cases where the message is actually formatted are converted to an explicit use of ostringstream. Removing the helper so that the new code is explicit about the intent to use ostringstream, or an alternative way to format the message. Discovered accidentally while looking into size reduction due to __builtin_unreachable() Semi-automated code change, risk of copy-paste mistakes should be minimal. Bug: angleproject:394129077 Change-Id: I47c2642d750d31416b08a1cfa435d5463c294e35 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6250078 Commit-Queue: Roman Lavrov <romanl@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com>
Roman Lavrov c24468c9 2025-02-06T19:04:19 Fix "fallthrough annotation in unreachable code" in release d3d builds The same issue I ran into in https://crrev.com/c/6231111 but on d3d Bug: angleproject:394129077 Change-Id: I90faa01fa66c514162a1d5e4cbe56a2bfd85085e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6237859 Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Cody Northrop <cnorthrop@google.com> Auto-Submit: Roman Lavrov <romanl@google.com>
Shahbaz Youssefi 47c64ce2 2025-01-24T16:15:26 Vulkan: Fix driver version parsing Bug: chromium:371512561 Change-Id: I469c4ae71613fdfdfd7e58602b5a7262342acba7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6199184 Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Roman Lavrov <romanl@google.com>
Panfeng Hou a504b6a2 2024-11-25T15:59:05 Support GL_OES_required_internalformat Enable GL_OES_required_internalformat GLES extension. Bug: angleproject:364069034 Change-Id: Ia57548469abff189472aa20b13ca99179c45f2c0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6038448 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Panfeng Hou <panfeng.hou@arm.com>
Gowtham Tammana fa70c4cb 2024-02-02T13:59:06 CL/Vulkan: Implement the buffer rect enqueues This change implements the buffer rect copy using a series of memcopies. The CL buffer rect doesn't map cleanly to the Vulkan copy buffer command due to the presence of pitches, and implementing as such will introduce more barriers in the command stream. For now we do process this command at call entry point. Bug: angleproject:379764609 Change-Id: I89a9032a4bbfa48899c448eb131a5ce048e8fd60 Signed-off-by: Gowtham Tammana <g.tammana@samsung.com> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6034035 Commit-Queue: Austin Annestrand <a.annestrand@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Amirali Abdolrashidi f0f65290 2024-09-10T15:30:30 Translator: Add check for atomic counter offset For GLSL shaders, atomic counter offset should not exceed the maximum atomic counter buffer size. This issue was seen on a dEQP test when increasing the LimitToInt() limitation from INT_MAX/2 to INT_MAX+1 or INT_MAX. * Added check to the translator to make sure the offset does not go beyond the max atomic counter buffer size. * Packed the existing checks into a single function. * (checkAtomicCounterOffsetIsValid()) * Added mMaxAtomicCounterBufferSize to TParseContext for the check. * Also added the related cap (maxShaderStorageBlockSize) for D3D11. * Increased the limitation in LimitToInt() to (INT_MAX / 2 + 1). * Added test based on dEQP test that failed on some platforms as a result of updating said limitation. * From KHR-GLES31.core.shader_atomic_counters.negative-large-offset Bug: angleproject:361369308 Change-Id: Id6128c75e12445b2a0029f4a2eb2bdb379cad48d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5851650 Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Rafael Cintron 6655e94f 2024-09-09T15:41:09 Remove Feature Level 9_3, part 2 Remove all of the remaining feature level 9_3 code. Bug: angleproject:355462523 Change-Id: Ifd15d8f5486d3e7f8f2e134f23872abf4a8ea51c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5847452 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Rafael Cintron <rafael.cintron@microsoft.com>
Rafael Cintron d1a4b0ff 2019-05-04T17:15:42 Remove Feature Level 9_3 code Feature Level 9_3 was originally added for developers creating apps for devices which did not have the DirectX 9 API and are no longer supported. Hence, we can remove the corresponding code in the 11 backend. Bug: angleproject:355462523 Change-Id: I22db15640b435c61db4d82a815edbc65cecc4e12 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5824661 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Rafael Cintron <rafael.cintron@microsoft.com>
Alexey Knyazev a93476a1 2024-07-11T00:00:00 D3D11: Pass 3D slice index to Image11::copyWithoutConversion 3D slice range is passed in a D3D11_BOX structure for CopySubresourceRegion. Fixed: angleproject:352467349 Bug: angleproject:352496176 Change-Id: Ie96d9567cf73b0612bfb1cbd7fbacc6c0f01dec4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5697425 Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Kenneth Russell <kbr@chromium.org>
Alexey Knyazev 1dd3a4c4 2024-07-04T00:00:00 D3D11: Use built-in position for gl_FragCoord.z on SM 4.0+ If supported, used built-in pixel position input for the gl_FragCoord.z value. Exposed GL_EXT_clip_control only on feature level 10_0 or higher. Fixed: angleproject:347737886 Change-Id: I272ccce04cf6ad7921aa6cd5dc13f0de2f9ae561 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5679787 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Shahbaz Youssefi 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>
Alexey Knyazev 479c950e 2024-06-06T00:00:00 D3D11: Implement fragment shader image2D layout updates Checked for updated image2D bind layout when triggering program recompilation. Included image2D bind layout variants into D3DPixelExecutable cache. Added tests for binding 2D array texture layers. Fixed: angleproject:8124 Change-Id: I228a29b5bb175bbf0f8b13e70d1f09e8eb4ebb2f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5630654 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Alexey Knyazev decaefc9 2024-06-06T00:00:00 D3D11: Generalize shader image2D layout cache Ensured that mImage2DBindLayoutCache exists for vertex and fragment shaders. Changed the dirty bit used for image binding updates because they use the ShaderConstants11::updateBuffer function, which is called only for driver uniform updates of vertex and fragment shaders. Bug: angleproject:8124 Change-Id: Ifdfc18f28598b636a1019f53af7617a60c12412e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5621178 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Alexey Knyazev 57524dc9 2024-06-06T00:00:00 Fix shader image level rebinding Added a test that interleaves two draw calls with rebinding the texture level of a shader image; fixed surface init. Vulkan: Fixed subresource serial generation. D3D11: Fixed dirty bit setting. Fixed: angleproject:7647 Bug: angleproject:8124 Change-Id: I4b5d095a1714f31a4f7b63f96dedb366faa17a03 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5611298 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Amirali Abdolrashidi 1db5581d 2024-05-21T13:07:44 Implement KHR_robustness * Added implementation for the validation layers for the added functions, and updated some of the existing ones. * The core functions require GLES 3.2. * The KHR functions have been limited to GLES 2.0+. * KHR_robustness requires GLES 2.0 and removes support for GLES 1.1 for logistical reasons. * Some functions require GLES 3.0 with this extension, which become core in GLES 3.2. * glGetnUniformuivKHR() * Enabled robustnessKHR on several platforms. * Added unit tests similar to ContextLostTest.BasicUsage for the new cases. * Added ContextLostTestES32 for the core usage in GLES 3.2. Bug: angleproject:42262244 Change-Id: Id1425c39d9a1a66ae1a90048b673cb1ae391c0ef Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5555985 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Geoff Lang ccd9a43b 2024-05-22T11:15:39 Split EGL_ANGLE_device_d3d into D3D9 and D3D11 versions. Add EGL_ANGLE_device_d3d9 and EGL_ANGLE_device_d3d11 which make it possible to know what type of device can be queried ahead of time without generating EGL errors. Refactor the DeviceD3D class into Device9 and Device11. Remove the getType method now that it's not needed for internal validation. Keep EGL_ANGLE_device_d3d for backwards compatibility. Bug: angleproject:342096132 Change-Id: Ib950abad58e46a5be269891ea7afd0cb8534cbe8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5559163 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Shahbaz Youssefi 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>
Peng Huang 7e065b6f 2024-03-07T13:52:47 Fix SRV and RTV confliction Bug: chromium:324422644 Change-Id: Id0f8fd1183938f3077e97fd6904fbfbad7efda85 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5354106 Auto-Submit: Peng Huang <penghuang@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Shahbaz Youssefi f044aaf8 2024-03-02T00:51:33 Vulkan: Create instance/device without access to Display The feature overrides are now encapsulated in a struct, a reference to which is passed around until features are initialized. Additionally, some window system information needed to decide which extensions to use or workarounds to apply are passed around. This is a step towards decoupling RendererVk from egl::Display for direct use with OpenCL. Bug: angleproject:8564 Change-Id: Id6c5d1c3b38aafcd4397e54cc6cad32bf849eeda Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5335823 Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 4e6fe5e0 2024-02-29T15:01:06 Vulkan: Cache ImageLoadContext in context This avoids the need to requery this from the display every time. Bug: angleproject:8564 Change-Id: Ied650e7789741f59b7662c0f97c55132b105778d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5332074 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Gregg Tavares 0afcac60 2024-02-22T11:21:15 Handle count = 0 in DrawElementsIndirect Bug: angleproject:8554 Change-Id: I9618061edf71c3d9a03ea14dfe65b54c58ee98de Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5319131 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Gregg Tavares <gman@chromium.org>
Saifuddin Hitawala 275e6f4f 2024-02-02T16:46:14 D3D: Add multiplanar support to d3d11 glTexSubImage2D Add multiplanar format support to Angle's D3D11 glTexSubImage2D. This is needed with multiplanar shared images, where we write all planes of a d3d shared image through WritePixelsYUV in raster decoder and need to do this via an intermediate texture for d3d11. This change checks for multiplanar format supported by Image11 and then goes through TextureD3D::commitRegion and performs copyTexture and then copySubResource. Added necessary test that tests for full texture copy and a subregion copy and reads back and verifies. Bug: chromium:40262482 Change-Id: I74c9978e62339375f6623f7f0a609bcb16c4b970 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5263039 Reviewed-by: Vasiliy Telezhnikov <vasilyt@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Saifuddin Hitawala <hitawala@chromium.org>
Matthew Leibowitz a70b6f56 2024-01-26T20:37:07 Add support for WinUI3/Windows App SDK Adds the necessary build args and code changes to support building ANGLE for WinUI 3 (aka Windows App SDK). To reduce the set of changes, and because it is functionally the same, a Windows App SDK build is basically a UWP build, but with an extra define so that the code can make a few changes to the namespaces and includes used. The main changes to the code are: - ICoreWindow is no longer used - Dispatcher has a few changes in naming and args - ISwapChainPanel is now in a different namespace Bug: angleproject:8490 Change-Id: Ibb298e3e86e8298dac12c2019eac7996a8185c51 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5230637 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 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>
Matthew Leibowitz 36013d99 2024-01-24T01:21:10 Improve build for UWP/Windows 10 These changes update the code for more modern compilers. The changes include: A) Not using deprecated APIs When Windows 8.1 was removed in commit 39b110184e2675afbfda1fd70b10ca112127ae74 the code was not updated to use the new APIs and still use the things that should not be used: > DisplayProperties may be altered or unavailable > for releases after Windows 8.1. Instead, use > DisplayInformation. B) Use correct casting There was also some changes in commit 5eadaf85b42ab1cbb1efcda558db58a3fe5a446a to properly cast from EGLNativeWindowType to IInspectable*, but this was not all of the cases. C) Prepare for WinUI3 There is another change that moves types into a using to reduce verbosity as well as make it easier/cleaner to build for WinUI/Windows App SDK. Bug: angleproject:8496 Change-Id: Ia11b7f92cb4abc524ab8316125e80a22898a8f6b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5232157 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi b007c74d 2024-01-23T14:17:54 GL: Separate dirty bits leading to glUniformBlockBinding The GL backend is special in that it needs to make actual calls (native glUniformBlockBinding) in response to (application) glUniformBlockBinding calls. The other backends just remap the bindings based on that information when creating descriptor sets. Previously, an optimization to track which bindings have changed used the same dirty bits that were used to signify when the GL backend needs to make these native calls. That ended up as a source of bugs. In a previous change [1], the context DIRTY_BIT_UNIFORM_BUFFER_BINDINGS is set when these mappings change, which fixes some of these issues. That change obviates the need for an actual backend sync of programs, except for GL programs that need to make these native calls. This change splits the dirty bits maintained for the purposes of the GL backend, moves them to that backend and removes the program backend sync. [1]: https://chromium-review.googlesource.com/c/angle/angle/+/5228599 Bug: angleproject:8493 Bug: b/318806125 Change-Id: I73c6514e88a116f1cd701cb06da0d8c38f07f7f6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5230137 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Alexey Knyazev 5c8cb8a6 2023-12-07T00:00:00 Update WebGLReadOutsideFramebufferTest tests Enabled robust resource init for these tests as they access out-of-bounds values. This flag is required to pass some of the tests on Vulkan backend. WebGL clients always set it. Fixed subresource index computation on D3D11 to pass CopyTexSubImage3D with 3D textures there. Added a similar test for 2D array textures. Bug: angleproject:4092 Fixed: angleproject:4136 Change-Id: I191c6df3c672e583568aadecac5885da015cfa8b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5106511 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Sergey Kataev 058a2fd6 2023-11-28T17:38:28 Clear active queries before Begin Bug: angleproject:8415 Change-Id: I97dfd904d65933a66f25cd168c50fe150ef9c765 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5068525 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Sergey Kataev <sergeyka@chromium.org>
Alexey Knyazev 7b62e4f5 2023-11-06T00:00:00 D3D11: Avoid GLenum conversions in GetBlendStateKey Bug: b/300968773 Change-Id: Ia41f77e686e0f1afc91381e29334f73859868129 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5009815 Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 5a71be90 2023-11-03T15:07:06 D3D: Make non-constant loop indexing limitation a feature flag ... instead of exposing it as a front-end limitation only to set a shader flag in the front-end. Bug: angleproject:1130 Change-Id: Idbd9a1b7b79d231bd9fc1c0061c768df4aaab92d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5004847 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Shahbaz Youssefi e7ce481f 2023-11-01T22:44:22 Consolidate parallel compilation in front-end This cleans up the multiple compilation task implementations in the backends and consolidates them in the front-end. The front-end is then able to do the compilation in an unlocked tail call instead if desired (in a future change). This change is in preparation for having the program link tasks directly wait on the shader compilation tasks. As a result, the "shader resolve" should not be needed to access the shader compilation results; it should be enough to wait for the compilation job. This change therefore moves post-processing of results to the compilation job itself as they did not need to actually be done after compilation is done (merely after translation is done). As a side effect, shader substition and other debug features should now work for the GL backend as they are now done before back-end compilation. Bug: angleproject:8297 Change-Id: Ib9274b1149fadca7545956a864d6635b6cba5c3a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4994655 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Roman Lavrov 8b4901d0 2023-11-06T10:43:14 Avoid GLenum conversion in BlendStateExt blend and equation The following functions now return value as is without ToGLenum conversion (that is often unnecessary): getEquationColorIndexed getEquationAlphaIndexed getSrcColorIndexed getDstColorIndexed getSrcAlphaIndexed getDstAlphaIndexed (at least) getEquationColorIndexed is on the hot path with noticeable performance impact; this CL also moves the implementation to the header to allow inlining. Bug: b/300968773 Change-Id: Ie223abe14b12afd7844686863ee5806945d10e45 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5008031 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Roman Lavrov <romanl@google.com>
Geoff Lang 36f41997 2023-10-30T15:14:09 D3D11: CopySubTexture: Handle sRGB source with D3D11 Use typeless formats for sRGB textures that can be reinterpreted as linear. Add a parameter to SRV creation to request samplers that do not do sRGB for copying sRGB textures. Bug: angleproject:7907 Change-Id: I3d94dfa5b25a1c2c531cd9bef4247097aa4bfb61 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4986290 Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Cody Northrop 1ea49a22 2023-10-13T11:28:41 Move uniform dirty bits to ProgramExecutable Rather than try to funnel them through Program and ProgramPipeline to the executable in the backend, just move them to ProgramExecutable in the front end. This fixes Dota Underlords at the same time due to not needing to set the Program dirty to propagate bits. Test: Dota Underlords Test: ProgramPipelineTest31.ProgramPipelineBindBufferRange Bug: b/299532942 Change-Id: Ic73c45608e22f89ca400ebf684f8cd287ed2f43a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4922969 Reviewed-by: Yiwei Zhang <zzyiwei@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Shahbaz Youssefi 97a48912 2023-09-26T10:31:58 Turn is-link-thread-safe feature into a positive condition Chrome's --disable-gpu-driver-bug-workarounds currently sets every feature to false, which breaks the GL backend. Bug: angleproject:8297 Change-Id: I284d0699e356d7c1a362eb992cdc0d052f9ea7c2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4887598 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Roman Lavrov <romanl@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao 9ca025d2 2023-09-18T15:50:48 Flatten BufferVariable/ShaderVariableBuffer/InterfaceBlock struct InterfaceBlock inherits from ShaderVariableBuffer, ShaderVariableBuffer is not a trivially copyable struct, this made InterfaceBlock not trivially copyable. InterfaceBlock is being used by some app traces for uniform blocks. BufferVariable inherits from sh::ShaderVariable which is very complicated and not trivially copyable. This CL flattens all of these three structs to simple structs without inheritance, and wraps all trivially copyable data into one POD struct, thus load/save are cheaper. Bug: b/275102061 Change-Id: I96f89176ce3d3131cb1d3ea3280c3c36c257560f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4874610 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Roman Lavrov <romanl@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 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>
Shahbaz Youssefi 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>
Shahbaz Youssefi 1bd9fc24 2023-09-07T00:21:13 D3D: Remove more usages of program instead of executable Only usage of getProgram() and getLinkedProgram() in the d3d backend remains for multidraw, which will be fixed separately as it involves setting uniforms (currently done through the program). Bug: angleproject:8297 Change-Id: I48b3ec66837888c8ebf58f43a6d8a2f483dd4659 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4846954 Reviewed-by: Shahbaz Youssefi <syoussefi@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Shahbaz Youssefi 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>
Steven Noonan 0b20cd6a 2023-08-28T17:45:00 d3d11: avoid exit-time-destructor warning Applies to use_custom_libcxx=false on Windows builds. On MSVC's C++ runtime, std::mutex has a destructor. Bug: angleproject:8327 Change-Id: I6118753569ce0529015e82673571c961a38f30e6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4819793 Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Steven Noonan <steven@uplinklabs.net> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Charlie Lao 519d330c 2023-08-28T15:41:18 Add GL_RGBX8_SRGB_ANGLEX and GL_BGRX8_SRGB_ANGLEX formats If app creates AHB with sRGBX format, and then create a EGLImage, Image::initialize() will retrieve the sized format from AHB, which is GL_RGBX_ANGLE, and then try to convert to sRGB color space. The bug here is that GetNonLinearFormat will pick GL_SRGB8 for all these formats :GL_RGB8, GL_BGRX8_ANGLEX, GL_RGBX8_ANGLE. This means that different AHBS with these three different format will end up createing a tetxure with same format which sRGB. I think the reason somone did it this way initially simply because there is no sRGB corresponding format available for BGRX8 and RGBX8. This CL adds sRGB internal version of these two formats, thus make it straight forward to pick the correct sRGB format. The other change here is for AHBs, right now we are always force mRequiredImageAccess to be Renderable. This actually workedaround the bug that mentioned earlier that we are picking the wrong format. Because of forced renderable, we end up with SRGB fallback to SRGBA. But external images should not fallback, we should use its existing format as is since it can be accessed via AHB interface directly. Bug: b/298037344 Change-Id: I6119c4015cc5bf0effdf0530cb756b6c4656c38f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4819053 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Shahbaz Youssefi 3822ea3a 2023-08-24T22:42:43 D3D: Move program state to ProgramExecutableD3D Bug: angleproject:8297 Change-Id: Ieead87d2f0ebe5937f262f598443a00504ea1492 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4812139 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi bb135f0e 2023-08-24T15:29:11 Make ProgramExecutableImpl managed by ProgramExecutable This change allows both parts of the program executable to be safely backed up and swapped on link. Bug: angleproject:8297 Change-Id: I17e4b6c05e4e481a66a227d6047dbf943d2c2603 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4812138 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Shahbaz Youssefi 44b5715c 2023-08-15T15:06:25 D3D: Remove link job dependence to context The part of link that needs the context is moved up. Usage of gl::Context and gl::State is eliminated from the rest of the link. Bug: angleproject:8297 Change-Id: I2064b21a6724d602f6a84f53a8ae5fe42fe4e837 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4781566 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Li Hao aaeeea0c 2023-08-17T14:28:12 D3D11: Add device id to the render string To get device id from GL_RENDER string when using D3D11 backend. Bug: angleproject:3026 Change-Id: Ied666a481575ece077126c3e1177b150e7358a01 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4786902 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Charlie Lao 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>
Alexey Knyazev aa8d60aa 2023-08-14T00:00:00 D3D11: Normalize blend state for MIN/MAX operations Use default blend factors for MIN/MAX operations to reduce the number of unique keys and to avoid D3D11 state allocation failures. Fixed: angleproject:8305 Change-Id: I6abcf93240653de8d7d8e174c1f8109d12de63e6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4776071 Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Alexey Knyazev 6092e0b7 2023-08-10T00:00:00 D3D11: Ensure that clip depth mode is synced Syncing clip depth mode driver uniform should not depend on a viewport state. Bug: angleproject:6554 Change-Id: I6ff2549a88fe3795eef20acfc48d0e945f19c4e0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4775599 Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Kenneth Russell <kbr@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Steven Noonan f395f34b 2023-08-03T13:58:43 features: frontload feature overrides This allows us to have features that depend on the state of other features more reliably. For example, let's say you have two features: ANGLE_FEATURE_CONDITION(&mFeatures, allowX, (benefitsFromX || isSpecificHardware) && !isBadHardware); ANGLE_FEATURE_CONDITION(&mFeatures, supportsX, hardware.featureXSupported && mFeatures.allowX.enabled); Before this change, if you overrode allowX, the override would be applied too late for the supportsX test. This also helps with disabling dependent features via overrides. For example, if you disable "supportsRenderpass2", it will also disable features depending on it, such as "supportsDepthStencilResolve" and "supportsFragmentShadingRate". By frontloading the feature overrides, we can have cross-dependencies between "feature supported on this platform" and "allow this feature by policy". Bug: angleproject:8291 Change-Id: Id6da2c89428fa896d677fe8d5a41369277a21b31 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4749524 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Steven Noonan <steven@uplinklabs.net> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Alexey Knyazev 335c6b86 2023-08-02T00:00:00 D3D11: Do not specialize HLSL for multisampled rendering Pass the required state as a driver uniform instead of triggering fragment shader recompilation at draw calls. Bug: angleproject:8097 Bug: angleproject:8131 Fixed: chromium:1468993 Change-Id: I15825c0522b29d48eb2c3b341ba96f139ef26460 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4742579 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Steven Noonan 613eefa3 2023-06-23T03:28:14 D3D11: fix invalidation of depth/stencil attachments This caused a crash when invalidating the depth/stencil attachments of the default framebuffer. But for non-default framebuffers, discarding depth/stencil just did nothing because "rtv.valid()" would be false. Bug: angleproject:8228 Change-Id: Ic22a29f521256af0ed4fc9c203cd6d750fcc00e6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4639494 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Kenneth Russell <kbr@chromium.org> Auto-Submit: Steven Noonan <steven@uplinklabs.net>
Saifuddin Hitawala a64537f9 2023-07-14T17:06:37 Angle: Copy multiplanar d3d11 texture for readPixels This change performs a copy to an intermediate texture for multiplanar d3d11 textures before reading from the source texture. This is needed as we cannot read a plane directly from a multiplanar d3d11 texture. It also passes the correct format for the plane for multiplanar formats when initializing the texture instead of getting the format using the internal format. We also add a unittest performing glReadPixels for NV12/P010/P016 formats. Bug: angleproject:7998, chromium:1463924 Change-Id: I9a1708f5a846ace28ac3b6593ea80f1863348333 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4688118 Commit-Queue: Vasiliy Telezhnikov <vasilyt@chromium.org> Auto-Submit: Saifuddin Hitawala <hitawala@chromium.org> Reviewed-by: Vasiliy Telezhnikov <vasilyt@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Shahbaz Youssefi 927410a8 2023-07-13T15:02:58 Prevent accidental misuse of ANGLE_ENABLED ... by removing it altogether. This macro was only available when features.h was included. If that header was not included, the preprocessor would automatically consider it 0, which has the opposite effect from what was desired. Bug: angleproject:8256 Change-Id: Ia141573c0c8b44eef1388f4c3ec73ef770cd2854 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4685226 Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Oliver Wolff 6473008c 2018-08-22T13:12:07 winrt: Fix initialization of zero-sized window The clientRect might be empty when creating a window of zero size. The side effect of a division by zero is that matrix transformation fails and hence the swapchain gets into an invalid state. See: https://code.qt.io/cgit/qt/qtbase.git/tree/src/angle/patches/0005-ANGLE-Fix-initialization-of-zero-sized-window.patch?h=5.15 Signed-off-by: L. E. Segovia <amy@amyspark.me> Bug: None Change-Id: Idbaed72deadb7b87052ac27e194a40d1810e6f7a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4661674 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Oliver Wolff 5922b83b 2018-08-22T13:01:10 D3D11: Fix Windows Store D3D Trim and Level 9 requirements Due to additional validation not covered in previous patches, the Windows Store certification compatibility had regressed. These changes ensure that the required D3D behaviors are met. See: https://code.qt.io/cgit/qt/qtbase.git/tree/src/angle/patches/0003-ANGLE-Fix-Windows-Store-D3D-Trim-and-Level-9-require.patch?h=5.15 Co-authored-by: L. E. Segovia <amy@amyspark.me> Signed-off-by: L. E. Segovia <amy@amyspark.me> Bug: None Change-Id: If8bc2f8cd4b2f84e1d92a1627951da2537212125 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4661673 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Alexey Knyazev b57d5638 2023-06-29T00:00:00 Reland "Cleanup multiview support" This is a reland of commit 9a7c0b88ba68e328d3f5f7991a6df0ab5de92311 Original change's description: > Cleanup multiview support > > * Removed remaining mentions of ANGLE_multiview > > * Removed AST transformations used only in > the side-by-side multiview implementation > > * Changed the type of the internal ViewID_OVR > variable to use the dedicated qualifier > > * Removed side-by-side multiview support > from the D3D11 renderer > > * Removed an unused helper for side-by-side > multiview support from the OpenGL renderer > > * Removed obsoleted test suppressions Fixed: angleproject:3341 Change-Id: I3ce9304c79c0873462c73e8cf02b85f7a1aaf874 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4669604 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Shahbaz Youssefi fede75ff 2023-07-06T11:38:35 Fix multi-draw's gl_DrawID in non-multi-draw draws The uniform value for gl_DrawID was never reset, so if a program was first used with multi-draw and then without it, gl_DrawID would not contain zero. Test credit info-tibo@orange.fr Bug: angleproject:8245 Change-Id: I73a613ab2858cde4633fadf6a1a523e462167eb0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4662137 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Steven Noonan <steven@uplinklabs.net> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Shahbaz Youssefi f0deadab 2023-07-06T15:19:03 Revert "Cleanup multiview support" This reverts commit 9a7c0b88ba68e328d3f5f7991a6df0ab5de92311. Reason for revert: Suspected cause of crash on Canary Original change's description: > Cleanup multiview support > > * Removed remaining mentions of ANGLE_multiview > > * Removed AST transformations used only in > the side-by-side multiview implementation > > * Changed the type of the internal ViewID_OVR > variable to use the dedicated qualifier > > * Removed side-by-side multiview support > from the D3D11 renderer > > * Removed an unused helper for side-by-side > multiview support from the OpenGL renderer > > * Removed obsoleted test suppressions > > Fixed: angleproject:3341 > Change-Id: I5e0706cbf26ea820b51400124ddbf2624b738f17 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4660046 > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Bug: chromium:1462504 Bug: chromium:1462505 Bug: chromium:1462506 Bug: chromium:1462478 Bug: chromium:1462531 Change-Id: Ie0e76b1c6823db19f68bb67fdfc8abc00cc62f88 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4666209 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Commit-Queue: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Alexey Knyazev 9a7c0b88 2023-06-29T00:00:00 Cleanup multiview support * Removed remaining mentions of ANGLE_multiview * Removed AST transformations used only in the side-by-side multiview implementation * Changed the type of the internal ViewID_OVR variable to use the dedicated qualifier * Removed side-by-side multiview support from the D3D11 renderer * Removed an unused helper for side-by-side multiview support from the OpenGL renderer * Removed obsoleted test suppressions Fixed: angleproject:3341 Change-Id: I5e0706cbf26ea820b51400124ddbf2624b738f17 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4660046 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Alexey Knyazev 20cc4a9b 2023-06-26T00:00:00 D3D11: Fix non-trivial blits for snorm buffers Bug: angleproject:8048 Change-Id: Ifec7ea71e0ab88f545ae088b0faae4b95512a207 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4654315 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Shahbaz Youssefi 5f581f87 2023-06-27T20:38:03 Pass dirty bits by value Split CL from follow up change where the dirty bits need to be passed by value as they are calculated from two sets. Many cached dirty bits are turned to constexpr as a result. Bug: angleproject:8224 Change-Id: Ibdb3090d6ee93788e1502b72bce55f4677937c58 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4650074 Reviewed-by: Roman Lavrov <romanl@google.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Steven Noonan 113f847b 2023-06-26T12:07:52 centralize basic OS/platform detection functions We had multiple different places that defined these, and with varying naming schemes. Centralize them to be defined in platform_helpers.h. Also renaming the IsApple(uint32_t) functions to IsAppleGPU(uint32_t) to avoid ambiguous meaning: "IsApple" should mean "is Apple-vended OS" while "IsAppleGPU" should mean "is Apple GPU vendor ID". Bug: angleproject:8229 Change-Id: If4e3fc5ac1b5b8ad416663950a1b2ee912ccad99 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4647291 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Steven Noonan <steven@uplinklabs.net> Auto-Submit: Steven Noonan <steven@uplinklabs.net> Reviewed-by: Roman Lavrov <romanl@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 2e209516 2023-06-26T11:58:50 Move state dirty bits definitions out of the class This is in preparation for a follow up change that splits the state class. Bug: angleproject:8224 Change-Id: Ic9b253583e40fcc93ff37605b6b6e1deb55a6e55 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4631843 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Steven Noonan 04965dde 2023-06-23T02:54:24 D3D11: identify D3D11on12 in renderer string The renderer string didn't previously give any indicator of whether the context was created as D3D11 or D3D11on12. Bug: angleproject:8233 Change-Id: Iee8ae4698c1e08d1826249d92f232a153cd0ee4c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4639492 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Steven Noonan 7a38d614 2023-06-23T01:56:43 remove ScheduleYield, replace with std::this_thread::yield Instead of hand-rolling this function, just use std::this_thread::yield, which has the advantage of being cross-platform and using an underlying implementation that's actually more correct on Windows[1][2]. [1] https://github.com/microsoft/STL/blob/40640c6df9754ea031f8df7c720b89714d19df97/stl/src/cthread.cpp#L84-L86 [2] https://joeduffyblog.com/2006/08/22/priorityinduced-starvation-why-sleep1-is-better-than-sleep0-and-the-windows-balance-set-manager/ Bug: angleproject:8232 Change-Id: I9053fa362f328dc45b7c13f5f70818adf89a290f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4639490 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Steven Noonan 262784f4 2023-06-19T17:56:04 D3D11: unbreak instanced indirect multidraw with ushort indices The baseInstance parameter was not being passed in the unsigned short index case. Bug: angleproject:8216 Change-Id: If660c6d4125bfd2aff8f4fd3a9171194635d21c6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4627281 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Roman Lavrov 21f16cb1 2023-06-09T17:30:38 Disable clang-format on ANGLE features autogen outputs Updates the script to produce reasonably formatted code without clang-format. Autogen files moved to autogen/ sub-directories because clang-format does not support per-file settings ;( This allows to run this codegen very quickly (~50ms on my machine) Bug: angleproject:8193 Change-Id: Ie84282090d574ebb4debe3edcfd82f983f27a5ff Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4604578 Commit-Queue: Roman Lavrov <romanl@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Rafael Cintron 4500079d 2023-05-30T17:01:10 Refactor D3D device creation to make adapter selection explicit To prepare for future changes which require that angle features be parsed before device creation, we must rearrange device creation such that driver version can be retrieved from the adapter BEFORE the device gets created. Bug: angleproject:8180 Change-Id: I08855b9df318d0a6234231f1e52d3c17cfaa8a30 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4575653 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Rafael Cintron <rafael.cintron@microsoft.com>