src/libANGLE/renderer


Log

Author Commit Date CI Message
Kimmo Kinnunen eb614d7e 2024-11-11T13:24:35 Metal: Avoid leaking library and binary sources Reland: Fix build with metal_internal_shader_compilation_supported = false Fix leak of dispatch_data during binary load. The dispatch object was not released. Dispatch objects are Obj-C objects, so hold with AutoObjCPtr. Fix leak of MTLLibrary objects when creating the objects. The method newLibraryWithData returns +1 due to being "new" type method. This ref must be adopted. Avoid using autoreleased objects, use AutoObjCPtr. Some leaks regressed in commit c5ab1cebccaab0f8de466e5f797faa3d5a84bea5. Bug: angleproject:351165323 Change-Id: I08bc6bcb787cdc3f71e9487d80a44e24b01b6b4c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6017845 Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Solti Ho b2d84a66 2024-11-12T20:14:48 Revert "Metal: Avoid leaking library and binary sources" This reverts commit 6359ec111595c57e6be04b0468ca866f91593f2f. Reason for revert: https://chromium-review.googlesource.com/c/angle/angle/+/6011208/comments/c1453ef2_2c6a5e49 Original change's description: > Metal: Avoid leaking library and binary sources > > Fix leak of dispatch_data during binary load. The dispatch object > was not released. Dispatch objects are Obj-C objects, so hold with > AutoObjCPtr. > > Fix leak of MTLLibrary objects when creating the objects. > The method newLibraryWithData returns +1 due to being "new" type > method. This ref must be adopted. > > Avoid using autoreleased objects, use AutoObjCPtr. > > Some leaks regressed in c5ab1cebccaab0f8de466e5f797faa3d5a84bea5. > > Bug: angleproject:351165323 > Change-Id: If23859fbddd21693d923f66f6fb015eed494f06e > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6011208 > Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com> > Commit-Queue: Geoff Lang <geofflang@chromium.org> > Reviewed-by: Geoff Lang <geofflang@chromium.org> Note: the revert merges the changes of https://crrev.com/c/6011902 Bug: angleproject:351165323 Change-Id: Iec1a14c8043e0883190723edf7302127c27f2de4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6013090 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Matthew Denton 4a835cf2 2024-11-01T13:31:00 WebGPU: send uniforms to GPU for use in shader Basic uniforms should now be accessible in the shader during a draw call, rather than just via glGetUniform*(). This is unoptimized and creates a new GPU-side copy of all the uniforms, every time any uniform changes. This sets up the bind group layout for a pipeline and sets the bind groups in the renderer pass. Right now these bind groups only contain the default uniform blocks, but in the future will need to contain textures, samplers, and non-default uniform blocks (UBOs). Bug: angleproject:376553328 Change-Id: I50891b81ab2ee374d674213257f76319c0222120 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5980972 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Liza Burakova <liza@chromium.org> Commit-Queue: Matthew Denton <mpdenton@chromium.org>
Gowtham Tammana 267a3daf 2024-11-05T19:51:58 CL/Vulkan: Use enums for cmd exec status instead of bools Setup the `createEvent()` interface to take the initial state of the event using an enum, instead of boolean for better readability. Bug: angleproject:377997556 Change-Id: Ib5a23cf2034e61e90b345bb432af59d96338b707 Signed-off-by: Gowtham Tammana <g.tammana@samsung.com> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6004063 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Kimmo Kinnunen f5b9e0ed 2024-11-11T16:06:30 Metal: Query MSL print env var with bool getter Use angle::GetBoolEnvironmentVar. Bug: angleproject:378404988 Change-Id: I45778690e215325e9e4eb67c6feefa9b17941f49 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6011902 Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com>
Yuxin Hu e5619a5c 2024-10-15T18:27:00 Use EGL sync global lock for all EGL*sync entrypoint calls To free EGL sync operations from waiting for other EGL calls to finish, we use a separate global lock for EGL*sync entrypoints. Below angle::SimpleMutex are added to protect resources that may have race condition due to being accessed by EGL*sync calls and non EGL*sync calls at the same time: 1. Display::mContextMapMutex that protects Display::mState.contextMap 2. static angle::base::NoDestructor<angle::SimpleMutex> anglePlatformDisplayMapMutex that protects static angle::base::NoDestructor<ANGLEPlatformDisplayMap> displays 3. static angle::base::NoDestructor<angle::SimpleMutex> devicePlatformDisplayMapMutex that protects static angle::base::NoDestructor<DevicePlatformDisplayMap> displays EGL_Terminate() entry point takes both global lock and global egl sync lock. This is to protect Display::mSyncMap, Display::mSyncPools, and Display::mSyncHandleAllocator being get cleared by thread 1 calling eglTerminate, while they are still accessed by thread 2 through a call such as eglCreateSync. So that we won't have thread 2 finish validating the sync object with syncID exists in Display::mSyncMap, but then find the mSyncMap.find(syncID) returns a nullptr due to the mSyncMap is cleared by thread 1. Same applies to EGL_LabelObjectKHR(), EGL_ReleaseThread(), ThreadCleanupCallback(). EGL_Initialize() writes to Display::mInitialized. This is read by EGL Sync API validation functions. EGL_Initialize() also takes both global lock and global sync lock to prevent race conditions between EGL_Initialize() and EGL Sync APIs. When ANGLE_CAPTURE_ENABLED is enabled, fall back to global lock, as the CaptureEGLCallToFrameCapture() touches many resources (e.g. mMaxAccessedResourceIDs, mFrameCalls) that could lead to race conditions without a global lock. Bug: b/362604439 Change-Id: Ic0d54a4cd66743bcd0f48f41f247dd223cff2f5e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5933570 Reviewed-by: Roman Lavrov <romanl@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Igor Nazarov <i.nazarov@samsung.com> Commit-Queue: Yuxin Hu <yuxinhu@google.com>
Austin Annestrand f198e807 2024-10-16T17:47:17 CL/VK: Serialize cmds when queue profiling enabled When queue profiling is enabled by user (opt-in) we should serialize/finish each cmd. Bug: angleproject:377942756 Change-Id: I7809df073c0a6de0e4d5338bec2fa2032ebc1577 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6003807 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Austin Annestrand <a.annestrand@samsung.com>
Austin Annestrand ac41a84a 2024-10-10T17:35:20 CL/VK: Fix reflection parsing out-of-order cases Some clspv generated binaries cause the SPIR-V Tools parser to parse reflection instructions out-of-order (with respect to what we see in disassembler dump). This fix addresses kernel and kernel args so that order does not matter anymore. Bug: angleproject:377941117 Change-Id: I75da428b6f0a9f155f3faf5db7a0408485d4ebdc Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6003806 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Austin Annestrand <a.annestrand@samsung.com> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Austin Annestrand a4172290 2024-10-08T13:20:40 CL/VK: Initial impl for migrateMemObjects Defer migration handling in multi-device setups. Allow API to return error-free on 1 device cases (nop) for now. Bug: angleproject:377942759 Change-Id: I9bcc238ad4d2965e1281a99ec2782e8cfe6c05a6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6003805 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Austin Annestrand <a.annestrand@samsung.com> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Austin Annestrand 152f8035 2024-10-29T14:14:03 CL/VK: Fix missing default device on contextFromType Bug: angleproject:377941119 Change-Id: Ia75184233a5b0b422425626cbce46a2105b08249 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6003463 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Austin Annestrand <a.annestrand@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Austin Annestrand de287909 2024-08-30T18:38:40 CL/VK: Generalize host transfer sync utility Rework host transfer sync utility to handle multiple non-blocking enqueue transfer ops for buffer/image reads. Bug: angleproject:377545840 Change-Id: Ic382162ded15cb15c900baf724e02592bfd846c9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6001611 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Austin Annestrand <a.annestrand@samsung.com>
Kimmo Kinnunen 6359ec11 2024-11-11T13:24:35 Metal: Avoid leaking library and binary sources Fix leak of dispatch_data during binary load. The dispatch object was not released. Dispatch objects are Obj-C objects, so hold with AutoObjCPtr. Fix leak of MTLLibrary objects when creating the objects. The method newLibraryWithData returns +1 due to being "new" type method. This ref must be adopted. Avoid using autoreleased objects, use AutoObjCPtr. Some leaks regressed in c5ab1cebccaab0f8de466e5f797faa3d5a84bea5. Bug: angleproject:351165323 Change-Id: If23859fbddd21693d923f66f6fb015eed494f06e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6011208 Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com> Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Amirali Abdolrashidi 7fea539c 2024-10-23T11:40:51 Vulkan: Remove extra non-conformant flag checks It may be possible to remove the flag check and simply rely on the checks performed in CanSupportGLES32() to determine support for ES 3.2. The non-conformant flag can remain utilized for certain features until the relevant issues are resolved and this flag is no longer needed. * Removed the checks from getMaxConformantESVersion(). * Removed the flag check in Renderer::getMaxSupportedESVersion(). * Added exception to the blend extension when using the non-conformant flag for Win/Intel. * Skipped the related tests on this platform that now fail. * Added a new feature flag to force-enable ES 3.2 on certain platforms for testing. * exposeES32ForTesting * If the bots are updated to support ES 3.2, it can be removed from using this flag. * Skipped some VVL errors when the flag is enabled. * Skipped end2end ES 3.2 tests on SwS. * Skipped some dEQP tests on P4 and SwS that would use ES 3.2 features that are not available on those platforms. Bug: b/374841339 Bug: b/376899587 Change-Id: Ifd405457ab8bf2076eb8fb5c92c5316f4d520595 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5958147 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Shahbaz Youssefi f44427b5 2024-11-05T15:18:59 Vulkan: Fix MSAA glReadPixels into PBOs The temporary image used to resolve the MSAA framebuffer during glReadPixels did not have the SAMPLED usage bit. Additionally, the image was supposed to be garbage collected afterwards but ImageHelper's release() function was accidentally immediately destroy()ing it. This was not an issue with blocking glReadPixels paths, because the command buffer was immediately flushed and the GPU work was waited on before the image was destroyed in RendererScoped's destructor. Bug: b/377437834 Change-Id: I1dca47172d6f363277059a848fe9446ac2a872d4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5995530 Commit-Queue: Charlie Lao <cclao@google.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Charlie Lao <cclao@google.com>
Gowtham Tammana 644b91f7 2024-02-29T16:37:37 CL/Vulkan: Implement buffer map/unmap Implement the buffer map, for now mapping is performed at the call site. Bug: angleproject:42267077 Change-Id: I16929920be8a49863de514b541ff0a57b6ac4453 Signed-off-by: Gowtham Tammana <g.tammana@samsung.com> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5971713 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Lichen Liu d4420489 2024-10-25T08:53:17 Add check for iOS simulator when initializing caps in metal On Intel-arch MacBook, the system API [supportsFamily:MTLGPUFamilyApple3] returns false on the iOS simulator, causing maxVertexOutputComponents to be set to 60, which is below than the required value of 64, resulting in WebGL2 initialization failure on chromium iOS. Add a TARGET_OS_SIMULATOR check to ensure the values of caps can be set correctly in the siumulator environment. Bug: angleproject:375244081 Change-Id: Iafc44a2aa62130b09127bbec7ea6940506a4165c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5961039 Reviewed-by: Kimmo Kinnunen <kkinnunen@apple.com> Reviewed-by: Corentin Wallez <cwallez@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Austin Annestrand 6df20e5f 2024-08-21T13:29:36 CL/VK: Add missing HostPtr-BufferVk sync on unmap Missing extra copy/sync for enqueueUnmapMemObject routine for USE_HOST_PTR scenario. Bug: angleproject:377366930 Change-Id: Ifcb0ed58beabf5870e00ed47b36cfd08767eba70 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5990104 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Austin Annestrand <a.annestrand@samsung.com> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Shahbaz Youssefi 2a569b2b 2024-11-04T11:41:29 Vulkan: Document that hex can be viewed with spirv-dis Since https://github.com/KhronosGroup/SPIRV-Tools/pull/5870, spirv-dis is able to disassemble SPIR-V given a hex stream. This change indicates this when retrieving shader debug info (a WebGL extension). Bug: angleproject:42266948 Change-Id: Ifab4668d6608093700d3e03ddd7ea675fd2bcf42 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5988173 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Mohan Maiya 17a01469 2024-10-26T06:07:31 Vulkan: Bugfix TextureVk::generateMipmap Add support for generating mipmaps of textures that are EGLImage texture targets with colorspace overrides Bug: angleproject:40644776 Tests: ImageTestES3.SourceAHBTarget2DGenerateMipmap* Change-Id: I9b4ff802f4118a42d54dc8d80ab30e2f9958bfee Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5966623 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: mohan maiya <m.maiya@samsung.com>
Mohan Maiya e2cd9082 2024-11-05T04:07:17 Vulkan: Bugfix in setCurrentImageLayout Make sure to update mLastNonShaderReadOnlyLayout and mCurrentShaderReadStageMask when updating the current layout. Bug: angleproject:40644776 Change-Id: Ie8652099a0d4caca9f9aea5bac38256a513b08e7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5992020 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: mohan maiya <m.maiya@samsung.com>
Gowtham Tammana 7483897c 2024-10-01T17:23:37 CL/Vulkan: Add numeric versioning for extensions With extended versioning support, the version number of extensions need to be reported as well. Using the numeric versioning mode for adding supported extensions. Also, fix the version number for cl_khr_icd and cl_khr_extended_versioning extensions. Bug: angleproject:372085147 Change-Id: I7bf3157227f9579c69c351a63a88b92be7f07d71 Signed-off-by: Gowtham Tammana <g.tammana@samsung.com> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5916159 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Gowtham Tammana 9ce9e678 2024-04-16T10:07:02 CL/Vulkan: Set storage buffer usage for cl buffers clspv is setting all the buffer objects as storage buffers, so removing the distinction on the CL MEM flags for now. Bug: angleproject:365694588 Change-Id: I3bd65457d53a6a2fb5fd5c8f2a0b8c25094ed563 Signed-off-by: Gowtham Tammana <g.tammana@samsung.com> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5916158 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Gowtham Tammana 2f8ad9c1 2024-09-26T20:34:34 CL/Vulkan: Add support for sub-buffer creation Sub-buffer is setup to point to offset location of the parent buffer. The copy buffer interface is updated to account for copies from the same sub-buffer. Bug: angleproject:372157566 Change-Id: I668c7182a8c4c12e265115f1c28d9bfbfe562bb0 Signed-off-by: Gowtham Tammana <g.tammana@samsung.com> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5916156 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Rafay Khurram 3c1e98a3 2024-05-22T01:46:52 CL/Vulkan: Fix clEnqueueMapImage/clEnqueueUnmapMemObject * Updates slice_pitch and row_pitch parameters with relevant values according to the spec. * For mapping, image is copied to staging buffer, then copied to dynamically allocated array * For unmapping, the reverse is done with the array being freed Tests-Passing: OCLCTS.test_cl_copy_images 2D, test_cl_copy_images small_images 2D, test_cl_copy_images max_images 2D, test_cl_copy_images 3D, test_cl_copy_images small_images 3D, test_cl_copy_images max_images 3D, Bug: angleproject:42266936 Change-Id: I0cd778244832ce66e72a58a228ed889a9002171e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5961948 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Rafay Khurram <r.khurram@samsung.com> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Charlie Lao 2b8d6bbe 2024-11-01T11:23:35 Vulkan: Use UpdateFullTexturesDescriptorSet when cache missed DescriptorSetDescBuilder::updateDescriptorSet() relies on the cache key to build descriptorSet. UpdateFullTexturesDescriptorSet() builds descriptorSet directly from state, it does not use cache key. Test shows UpdateFullTexturesDescriptorSet is much faster than updateActiveTexturesForCacheMiss and updateDescriptorSet pair. This CL removes updateActiveTexturesForCacheMiss() function and uses UpdateFullTexturesDescriptorSet for cache miss case. The timing code is added around the cache miss functions to measure the time. Old: asphalt_9 average 7,554 nanosec gl_driver2_off: 20,354 nanosec batman_telltale: 12,992 nanosec New: asphalt_9 average 916 nanosec gl_driver2_off: 1,839 nanosec batman_telltale: 3,437 nanosec Bug: angleproject:372268711 Change-Id: I176d67ed732c3fe3a18a079df7c4973aa926087a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5984893 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao fbe34df7 2024-10-29T16:19:29 Vulkan: More texture descriptorSet code cleanup Removed unused argument `pipelineType` from updateActiveTexturesForCacheMiss(). Removed unused argument `context` from getReadImageView() Rename getBufferViewAndRecordUse() to getBufferView() since there is no "record use" happening. Moved UpdateFullActiveTexturesDescriptorSet() function from vk_cache_utils.cpp to ProgramExecutableVk.cpp anonymous name space, since it is only used in this file. Bug: angleproject:372268711 Change-Id: Ib7240c1063f727fb52588234e79fba349f9aff9e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5977481 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Gowtham Tammana 79b6c7ab 2023-10-09T13:29:07 CL/Vulkan: Add fillWithPattern interface In CL, the buffer can be requested to filled with a pattern. Adding a pattern fill helper routine that fills up the buffer from CPU side. Bug: angleproject:42267074 Change-Id: I144e9b7c6f4d1263f21cabc2491c46e8951e604f Signed-off-by: Gowtham Tammana <g.tammana@samsung.com> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5916157 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Charlie Lao 1a3fadbf 2024-11-01T13:19:43 Vulkan: Enable imagelessFB for recent QualComm drivers Qualcomm recent drivers has the fix for imageless framebuffer bug. Re-enable supportsImagelessFramebuffer for drivers 512.802.0 or newer. Bug: b/369693310 Change-Id: I33a69b8abfefed572880636ff7af2c788cee5688 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5984959 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Rafay Khurram c0a28403 2024-05-06T12:42:28 CL/Vulkan: Enable clEnqueueNDRangeKernel for Images and Samplers * Performs clspv reflection for ArgumentSampler, ArgumentStorageImage, and ArgumentSampledImage * Creates descriptor sets for performing enqueue Tests-Passing: OCLCTS.test_basic readimage, readimage_fp32, readimage_int16, writeimage, writeimage_fp32, writeimage_int16, mri_one, mri_multiple, imagenpot Bug: angleproject:42266936 Change-Id: I2b6c631e76556870c4342d2046c267ff5cf5105d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5955597 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Rafay Khurram c3ff2bbe 2024-05-16T11:31:54 CL/Vulkan: Enable clGetSupportedImageFormats * Returns formats that are supported by physical device from the minimum list of image formats Tests-Passing: OCLCTS.test_api min_image_formats, OCLCTS.test_basic imagearraycopy, arrayimagecopy, OCLCTS.test_computeinfo computeinfo Bug: angleproject:42266936 Change-Id: I2bdb9a793b45f21c12c7c7d6a42e7a63295c2708 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5800266 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Rafay Khurram 9db2e88b 2024-05-14T11:44:01 CL/Vulkan: Add support for required image formats * Included adding cases for CL_DEPTH, CL_DEPTH_STENCIL, CL_sRGBA, and CL_BGRA Bug: angleproject:42266936 Change-Id: Ie7bd3ee6c6413d8fa89357c81d19f4c807883f36 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5800265 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Chris Dalton a05a0e15 2024-09-25T22:33:36 Validate PLS shaders against context state Add shader introspection for PLS uniforms and validate that they match context state during draw calls. Bug: angleproject:40096838 Change-Id: I76cdf8add03de8f8b0b3e772c15c0087c1d97e98 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5893962 Commit-Queue: Kenneth Russell <kbr@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org>
Rafay Khurram a21b7ad0 2024-04-24T02:11:42 CL/Vulkan: Add skeleton for CLSamplerVk * It is setup to be a wrapper for the SamplerHelper interface Bug: angleproject:42266936 Change-Id: Iac7e80c4d5262687d98a8188a60a24a9be190dc2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5801184 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao 5c26ffea 2024-10-29T11:11:38 Vulkan: Optmize descriptorSet cache disable code path Right now the way it works is that it first computes the cache key and then use the cache key to look in the cache. If cache misses, then it builds descriptorSet out of the cache Key. This might make sense if cache is enabled. If cache is disabled then no need to go through the middle man. This CL skip all the cache key build up entirely and directly build descriptorSet out of context state. In this CL, updateFullActiveTextures() and updateDescriptorSet() are merged into one function UpdateFullActiveTexturesDescriptorSet() which updates VkWriteDescriptorSet directly. Bug: angleproject:372268711 Change-Id: I7ba0c60a23b967d1ac903020d04022405c29e354 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5972508 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Charlie Lao <cclao@google.com>
Rafay Khurram 7c99c225 2024-04-03T01:48:57 CL/Vulkan: Implement clEnqueue APIs involving images Review enables the functionality of: - clEnqueueReadImage - clEnqueueWriteImage - clEnqueueCopyImage - clEnqueueMapImage - clEnqueueCopyImageToBuffer - clEnqueueCopyBufferToImage Tests-Passing: OCLCTS.test_basic imagecopy, imagerandomcopy, OCLCTS.test_profiling copy_array_to_image Bug: angleproject:42266936 Change-Id: Ifd4ccd0a9e16bac11dbff74d4634d9ca4c5b4284 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5796530 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Rafay Khurram <r.khurram@samsung.com>
Amirali Abdolrashidi 6b9d3762 2024-08-22T15:29:00 Vulkan: Optimize full texture clears Currently, a full texture clear (glClearTexImageEXT()) is treated as a special case of a partial clear (glClearTexSubImageEXT() with image dims as the input). However, it can be further optimized by treating it as a clear update. * For full clears from EXT_clear_texture, the clear update path is taken. * It leads to a more optimized path, including the usage of the following APIs: * vkCmdClearColorImage() * vkCmdClearDepthStencilImage() * It uses the following enum: ClearTextureMode * If a partial clear uses the extents for the entire image, it is treated as a full clear. * Updated the method to determine if a texture is renderable in clearSubImageImpl(). * Added perf counter: fullImageClears * Added new unit tests * Single 3D texture full clear (Clear3DSingleFull) * 2D RGB SNORM clear (Clear2DRGB8Snorm) * Added Vulkan perf counter test for 2D and 3D color image clear. * Updated the related skipped tests on Pineapple. Bug: angleproject:42266869 Bug: angleproject:375425839 Change-Id: I12ef3002dee190d7f8f43204f7d3f76e05d0b54f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5806207 Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Amirali Abdolrashidi 66701c98 2024-10-31T11:37:44 Vulkan: Remove extra non-conformant flag check In Vulkan, getMaxConformantESVersion() calls another function which already checks which ES version to use (getMaxSupportedESVersion()). It also uses the non-conformance flag to check if it should bypass the ES 3.2 check if the flag is enabled. However, the former uses the flag to cap the version to ES 3.1 if the flag is disabled. This check seems unnecessary, and can cap the version for a device that does have the ability to use ES 3.2. * Removed the non-conformant flag check from getMaxConformant*(). Bug: b/374841339 Change-Id: I377e6ba2fe174aae7e2e1b19407b2acd89749157 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5979643 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi d4a9fa51 2024-10-31T09:37:28 Vulkan: Re-enable dynamic rendering on newer ARM drivers Bug: b/356051947 Change-Id: I03fbed2dbdb8f454ee1c429db4669d13e719b9bd Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5980610 Commit-Queue: Yuxin Hu <yuxinhu@google.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Charlie Lao 2df8d32b 2024-10-25T13:49:40 Vulkan: Tag DescriptorSets properly with every command buffer When descriptorSetCache is disabled, there is a bug that the current descriptorSet is not properly tagged with current ResourceUse. Right now when we get a descriptorSet (from cache or reused or allocated new), we retain to the current command buffer. But if we submit command buffer and get a new command buffer, and draw with the same program/buffer/textures, we will be reusing the current bound descriptorSets, but it is not retained with new command buffer. In theory, we have the same bug for pool eviction as well when cache is enabled. It's just very hard to hit due to pool eviction occur very rare. But with cache disabled, this is very easy to hit with multiple tests. In this CL, the retainResource call is moved from ProgramExecutableVk::getOrAllocateDescriptorSet() call to ProgramExecutableVk::bindDescriptorSets() call. Since bindDescriptorSets is always get called when we get a new descriptorSet, and is always get called when a new command buffer is allocated, this covers all usage case. And even better, with this change we are able to remove commandBufferHelper from arguments of quite a few functions. Bug: angleproject:372268711 Change-Id: I1f21a3e7e9ea34e2842e54025b5eb930dbf6c593 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4743599 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Charlie Lao 1652f8ed 2024-10-17T13:35:39 Vulkan: end2end tests when descriptorSetCache is disabled Some end2end tests are testing specific descriptorSet cache behavior. When cache is disabled, these tests failed. In this CL these perfCounter based tests haven been modified to check total allocation to ensure the descriptorSets are properly reused instead of cache hit/miss. Bug: angleproject:372268711 Change-Id: I1d2f4cfcf622b05cdcb3317c8804416a80e72c48 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3735732 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 0a372f29 2024-10-28T22:59:53 Vulkan: Remove docs about OpenGL line rasterization emulation The code that emulated OpenGL line rasterization has been removed. Bug: angleproject:42265836 Change-Id: Ib1c1d8745b1790e0291a691a6a1c8e9438c34351 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5973239 Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Amirali Abdolrashidi <abdolrashidi@google.com>
Charlie Lao d0a0fd1a 2024-10-17T14:50:51 Vulkan: Skip pool eviction when cache is disabled When cache is disabled, every time a new descriptorSet is allocated and bind to program, the previous descriptorSet will be added to the tail of garbage list, and the new descriptorSet is retrieved from the head of the garbage list, if its GPU usage has been completed. This means there will never have a situation that significant amount of descriptorSets are needed, therefore no need for pool eviction. One possible situation is that at one point you need a lot of descriptorSets and then after a while you only need small amount of descriptorSets. In that case we could delete the excessive unused descriptorSets. But since they are all allocated from a pool, as long as there is still one descriptorSet in the pool is used, you still can't destroy the pool. This means eviction is really not much useful when cache is disabled. Bug: angleproject:372268711 Change-Id: Id77b181b64e122f576ee43d11c39dc75bd681dcf Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5941126 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao af73a7eb 2024-10-18T17:19:29 Vulkan: Add WeakPtr to mirror std::weak_ptr This is a follow up from previous CL crrev.com/c/5938947. Because of pool eviction is based on reference count, there is need to have a weak pointer to the reference counted pool that does not add an extra reference count. This CL adds WeakPtr that works similarly to std::weak_ptr, and replaced direct RefCountedDescriptorPool pointer with WeakPtr wrapper. This is safer than RefCountedDescriptorPool in a way that it does not allow modification of underline reference count. Also the use of WeakPtr has been reduced to minimum in this CL. Bug: angleproject:372268711 Change-Id: Idd6fa77432a9351269c968c961785a7cf5fab50c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5944061 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Kimmo Kinnunen 4397ff2f 2024-10-25T16:55:30 Metal: SeparateCompoundStructDeclarations fails validation Consider GLSL: struct S { int i; } s; s=s; SeparateCompoundStructDeclarations would rewrite this to: struct S { int i; }; S s'; s=s; The interm rewrite would rewrite the specification and declaration of s, but not the use sites. The use sites would use the old type, and thus something that was not in the tree anymore. This would fail the validation. This kind of bug was previously fixed for SeparateDeclarations in commit 18fa02bebf901dd8501de3176f6052ae4ce984be. Fix by adding the logic to SeparateDeclarations, as it is already doing almost the exact task, separating `struct S { ..} a, b`. The separation is tested in GLSLTests.StructInShader and various other draw tests. These pass with MSL, but these would also fail validation if that was enabled. Bug: angleproject:375523825 Change-Id: I1697103d0ba47616dbd3159f36f9e71cb2831c4b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5964899 Auto-Submit: Kimmo Kinnunen <kkinnunen@apple.com> Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Shahbaz Youssefi 08c1724f 2024-10-11T14:29:00 Vulkan: Support GL_ARM_shader_framebuffer_fetch_depth_stencil Bug: angleproject:352364582 Change-Id: I63fd78314fa7ebccbf366c252e309a9c0f09c8c1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5938150 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 65fcf9c4 2024-10-26T10:53:18 Vulkan: Remove redundant dependent feature checks Since [1], when a feature is overriden, the dependent features automatically take the override into account. Tests no longer need to account for dependent features, neither does the logic in the code. [1]:https://chromium-review.googlesource.com/c/angle/angle/+/4749524 Bug: angleproject:42266725 Change-Id: I5440aba4a89cffbe710e26ad7de4cfee783e9bdf Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5967414 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com>
Igor Nazarov a769fad4 2024-10-24T20:46:42 Vulkan: Optimize and fix glFinish for single buffered surfaces Fixed bug: When calling `onSharedPresentContextFlush()` from `ContextVk::finish()` need to also call `finishImpl()` to wait for submitted commands. This bug was introduced in the original commit where `onSharedPresentContextFlush()` was added. Optimization: Skip calling `onSharedPresentContextFlush()` from `ContextVk::finish()` similarly to `ContextVk::flush()` when there is nothing to flush. Bug: angleproject:42265370 Bug: b/229908040 Change-Id: Ide9f9c5d8757257c925970faece1e137acf10dec Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5961290 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Igor Nazarov <i.nazarov@samsung.com>
Gowtham Tammana d9f8fba8 2024-09-27T15:56:36 CL/Vulkan: Fix event queue serials Some of the events are finished at call site, dont set queue serials for them. Bug: angleproject:372157567 Change-Id: I4e0d568b76959be96bc7565bae7cdb5d4549619a Signed-off-by: Gowtham Tammana <g.tammana@samsung.com> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5916155 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi a0586d6e 2024-10-26T00:32:27 Remove feature description / condition strings These strings show up in chrome://gpu so they can marginally be useful, but are otherwise dead weight for most uses of ANGLE / users of ANGLE. While slightly less convenient, the feature name can always be linked back to the source code if needed so the presence of such metadata is not necessary either. This shaves 40KB from the binary size of ANGLE when built with Vulkan only on Android. Bug: chromium:371512561 Change-Id: I3959961bb7de95cc60a85130d0ff38a7fd533fb7 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5968453 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Gowtham Tammana 5b4609de 2024-10-07T14:40:49 CL/Vulkan: Adjust the pushConstant size/offset to multple of 4 The spec[1] requires the push constants size/offset to be multiple of 4. Adjust them as needed. [1]: https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/vkCmdPushConstants.html#_description Bug: angleproject:372157565 Change-Id: I8ea788dbd68e3aea262e12af56e40ac84087ceef Signed-off-by: Gowtham Tammana <g.tammana@samsung.com> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5916154 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Charlie Lao fe99836c 2024-10-25T14:34:23 Vulkan: Use ANGLE_PERF_WARNING when no serial for reserved serial When we run out of OutsideRenderPassCommands' queue serial, we have to call flushCommandsAndEndRenderPass() so that we can get a new set of reserved serials for OutsideRenderPassCommands. The problem is that we call ANGLE_VK_PERF_WARNING macro before calling flushCommandsAndEndRenderPass(), which could insert a CommandID::InsertDebugUtilsLabel command when debug marker is enabled. This end up with mOutsideRenderPassCommands becomes not empty and subsequent call of flushCommandsAndEndRenderPass end up with flushOutsideRenderPassCommands and not able to early out due to command buffer is not empty. This CL simply changes ANGLE_VK_PERF_WARNING to ANGLE_PERF_WARNING to avoid getting into this situation. Assertion is also added to catch the problem at at the spot it happens. Bug: b/375661776 Change-Id: I2434af81b139c6b04d7ef1963f76035d60dfd471 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5967615 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Roman Lavrov <romanl@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Kimmo Kinnunen 12584049 2024-10-21T14:04:55 Make SimplifyLoopConditions testable Add ShCompileOptions::simplifyLoopConditions, so that tests can turn it on. Later edits to simplify loop condition logic are simpler to review when the testing related edits are landed separately. Test the feature by having ESSL as the input and ESSL as the natural output, to reflect how AST changes. To make the test expectations more deterministic across code changes, change SymbolTable::kLastBuiltInId to SymbolTable::kFirstUserDefinedSymbolId. This is simpler as no code needs to know exact last built in id, so we can just ensure that the user defined symbol ids do not clash with the builtin ids. Bug: angleproject:374585769 Change-Id: Iea0efb8ac2878691d0fd5ff5cfe9a49ac754515d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5946724 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Kimmo Kinnunen <kkinnunen@apple.com>
Shahbaz Youssefi f2315dbe 2024-10-23T13:34:39 Reland: Vulkan: Update checks for promoted extensions This relands commit c2219ef9ec03277b6f8ad18d6d1ade41ddf88ba6. Features that depend on promoted extensions are now enabled when the extensions are present, OR the version of Vulkan that they were promoted to is present. This commit checks for Vulkan 1.1 because that is the version currently supported. In the reland, the promoted extensions are not added to the list of extensions to be enabled, because the underlying driver may not have exposed them as extensions at all. Bug: angleproject:374483183 Change-Id: I98e004d3fb4ed673984859ab63d40702f877b535 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5955635 Reviewed-by: Jason Macnak <natsu@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao 2dcc80dd 2024-10-17T13:59:23 Vulkan: allocateDescriptorSet to avoid repeated try on same pool DynamicDescriptorPool::allocateDescriptorSet has a few steps. It first tries to allocate from the same pool. Then tries to allocate from mCurrentPoolIndex and then loops all existing pools. This CL keeps the same basic logic, but avoids repeated tries on the same pool. Bug: angleproject:372268711 Change-Id: Ic3099ac8c68688fe9afe452f808be29ac9063d51 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5926182 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Cody Northrop a05fc2bc 2024-10-23T13:36:54 Revert "Vulkan: Update checks for promoted extensions" This reverts commit 9c1f96b8606a564b565d37208268b9b06efff03e. Reason for revert: Still fails on Cuttlefish (which uses SwiftShader) Bug: angleproject:374975259 Original change's description: > Vulkan: Update checks for promoted extensions > > Features that depend on promoted extensions are now enabled when > the extensions are present, OR the version of Vulkan that they were > promoted to is present. This commit checks for Vulkan 1.1 because > that is the version currently supported. > > Bug: angleproject:374483183 > Change-Id: I17d7956ac8a604f531e020e77c6f532e616b9dd5 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5954316 > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Bug: angleproject:374483183 Change-Id: I1bef03f99b044bca91950a62e4015630a7c91530 No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5956483 Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Commit-Queue: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Auto-Submit: Cody Northrop <cnorthrop@google.com>
Charlie Lao 9a4c7495 2024-10-15T13:05:28 Vulkan: Add feature flag to enable descriptorSet cache So that we can disable it to compare the performance difference. Bug: angleproject:372268711 Change-Id: I02da254e5d58815741080634a2dd005617aa7432 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5936135 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Charlie Lao 31c80bbf 2024-10-17T10:56:16 Vulkan: Avoid redundant work in updateFullActiveTextures ContextVk keeps mActiveTexturesDesc, which gets updated by UpdatePreCacheActiveTextures(). This is only used for cache lookup. When there is a cache miss, we end up call updateFullActiveTextures() which recomputes DescriptorSetDesc again, which is redundant work. This CL removes mActiveTexturesDesc from ContextVk. UpdatePreCacheActiveTextures has been changed to be a DescriptorSetDescBuilder method so that it can directly update the mDesc. updateFullActiveTextures has been renamed to updateActiveTexturesForCacheMiss which avoid mDesc calculation. updateFullActiveTextures is still kept for now which will be used in next CL when cache is disabled. Bug: b/372268711 Change-Id: Ic9a0cdaa7cefca5f72b599d26d079cef14888f07 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5905766 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com>
Charlie Lao dd54eeec 2024-10-11T13:26:46 Reland "Vulkan: Track GPU progress for individual DescriptorSet" This is a reland of commit 292102944add2ab30f4aa12a971cac456cc7726b with the fix of garbage being added back to garbage list. Original change's description: > Vulkan: Track GPU progress for individual DescriptorSet > > Right now ProgramExecutableVk keeps VkDescriptorSet object, and > DescriptorSetHelper is created when a cache entry becomes invalid. > Further, DescriptorSetCache keeps the cache of {VkDescriptorSet, > RefCountedDescriptorPoolHelper} pair. So we are having three different > type of objects at different stages of life: VkDescriptorSet, > DescriptorSetHelper, and {VkDescriptorSet, > RefCountedDescriptorPoolHelper. This CL makes DescriptorSetHelper at > creation and at cache and at garbage. With this change, you have a > reference counted DescriptorSetHelper object (i.e, DescriptorSetPointer) > during entire life cycle and is passed around between cache and program > as is. This CL is preparation for the future CL where we may disable > cache for descriptorSet. The descriptorSet will be added to garbage list > and reused constantly without go through the cache code. We need to > track the individual descriptorSet with ResourceUse so that it won't > reuse until GPU is finished. This CL is making DescriptorSetHelper a GPU > tracking object so that it will still just work when cache is disabled. > > Bug: angleproject:372268711 > Change-Id: I1cfb77cc5069b202d870388fd8809e265cdca90b > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5918586 > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Commit-Queue: Charlie Lao <cclao@google.com> > Reviewed-by: Yuxin Hu <yuxinhu@google.com> Bug: angleproject:372268711 Change-Id: Ic920f99cc78cde1e94690bdbee3b885844fa155b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5954701 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Austin Annestrand 60da450e 2024-09-20T17:56:55 CL: Implicit cmd queue submit on release From OpenCL spec (3.0): https://registry.khronos.org/OpenCL/specs/3.0-unified/html/OpenCL_API.html#_flush_and_finish clReleaseCommandQueue perform an implicit flush of the command-queue. Bug: angleproject:8639 Change-Id: I0a3b0f3c602075fd2a6e1ac0310345b3d568df64 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5410931 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Austin Annestrand <a.annestrand@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao 45cc47af 2024-10-22T21:41:22 Revert "Vulkan: Track GPU progress for individual DescriptorSet" This reverts commit 292102944add2ab30f4aa12a971cac456cc7726b. Reason for revert: Causing bot failure in later CLs Original change's description: > Vulkan: Track GPU progress for individual DescriptorSet > > Right now ProgramExecutableVk keeps VkDescriptorSet object, and > DescriptorSetHelper is created when a cache entry becomes invalid. > Further, DescriptorSetCache keeps the cache of {VkDescriptorSet, > RefCountedDescriptorPoolHelper} pair. So we are having three different > type of objects at different stages of life: VkDescriptorSet, > DescriptorSetHelper, and {VkDescriptorSet, > RefCountedDescriptorPoolHelper. This CL makes DescriptorSetHelper at > creation and at cache and at garbage. With this change, you have a > reference counted DescriptorSetHelper object (i.e, DescriptorSetPointer) > during entire life cycle and is passed around between cache and program > as is. This CL is preparation for the future CL where we may disable > cache for descriptorSet. The descriptorSet will be added to garbage list > and reused constantly without go through the cache code. We need to > track the individual descriptorSet with ResourceUse so that it won't > reuse until GPU is finished. This CL is making DescriptorSetHelper a GPU > tracking object so that it will still just work when cache is disabled. > > Bug: angleproject:372268711 > Change-Id: I1cfb77cc5069b202d870388fd8809e265cdca90b > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5918586 > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Commit-Queue: Charlie Lao <cclao@google.com> > Reviewed-by: Yuxin Hu <yuxinhu@google.com> Bug: angleproject:372268711 Change-Id: I4d3c34058d100112a098144276b52c0faf8d593a No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5955529 Auto-Submit: Charlie Lao <cclao@google.com> Commit-Queue: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Andrew Sumsion 9c1f96b8 2024-10-22T12:58:27 Vulkan: Update checks for promoted extensions Features that depend on promoted extensions are now enabled when the extensions are present, OR the version of Vulkan that they were promoted to is present. This commit checks for Vulkan 1.1 because that is the version currently supported. Bug: angleproject:374483183 Change-Id: I17d7956ac8a604f531e020e77c6f532e616b9dd5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5954316 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Rafay Khurram 99ba07d3 2024-03-26T00:58:57 CL/Vulkan: Implement createImage Enabling functionality of: - clCreateImage Tests-Passing: OCLCTS.test_api get_image<1d|2d|3d>_info Bug: angleproject:42266936 Signed-off-by: Rafay Khurram <r.khurram@samsung.com> Change-Id: I0281f092bff13cdd81b87d596fdd15b33dda7e46 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5796527 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao 29210294 2024-10-11T13:26:46 Vulkan: Track GPU progress for individual DescriptorSet Right now ProgramExecutableVk keeps VkDescriptorSet object, and DescriptorSetHelper is created when a cache entry becomes invalid. Further, DescriptorSetCache keeps the cache of {VkDescriptorSet, RefCountedDescriptorPoolHelper} pair. So we are having three different type of objects at different stages of life: VkDescriptorSet, DescriptorSetHelper, and {VkDescriptorSet, RefCountedDescriptorPoolHelper. This CL makes DescriptorSetHelper at creation and at cache and at garbage. With this change, you have a reference counted DescriptorSetHelper object (i.e, DescriptorSetPointer) during entire life cycle and is passed around between cache and program as is. This CL is preparation for the future CL where we may disable cache for descriptorSet. The descriptorSet will be added to garbage list and reused constantly without go through the cache code. We need to track the individual descriptorSet with ResourceUse so that it won't reuse until GPU is finished. This CL is making DescriptorSetHelper a GPU tracking object so that it will still just work when cache is disabled. Bug: angleproject:372268711 Change-Id: I1cfb77cc5069b202d870388fd8809e265cdca90b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5918586 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Shahbaz Youssefi 47c66901 2024-10-21T12:47:22 Vulkan: Set gl_Layer to 0 if the framebuffer is not layered Bug: angleproject:372390039 Change-Id: I29067c9488e06f6dd2e90f207fecb843267fb77c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5949263 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Cody Northrop e869b426 2024-10-22T10:04:06 Revert "Removed checks for promoted extensions" This reverts commit c2219ef9ec03277b6f8ad18d6d1ade41ddf88ba6. Reason for revert: Possible cause of boot failures on cuttlefish Bug: angleproject:374975259 Original change's description: > Removed checks for promoted extensions > > Removed checks for Vulkan extensions that have been promoted into Vulkan > 1.1, which is already the minimum required version for ANGLE. The > dependent features now work when the extensions are missing because the > extensions are no longer necessary. > > Bug: angleproject:374483183 > Change-Id: Iad92b33a8e724eaa8f4bfcbe406f5b6b8536d6d8 > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5944678 > Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> > Reviewed-by: Charlie Lao <cclao@google.com> > Commit-Queue: Charlie Lao <cclao@google.com> Bug: angleproject:374483183 Change-Id: I92eb6681c6d1b8f7e2d0832bb4e1cbf4597bd1c6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5952279 Commit-Queue: Cody Northrop <cnorthrop@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao 4bdcdf0d 2024-10-16T11:44:49 Vulkan: Switch RefCountedDescriptorPoolBinding to use SharedPtr This mostly a clean up. RefCountedDescriptorPoolBinding is replaced with DescriptorPoolPointer, which is defined as SharedPtr<DescriptorPoolHelper>. It has more intuitive semantics to use. Bug: angleproject:372268711 Change-Id: I0397111b5228e896c1d226e00930851319d955a0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5938947 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Charlie Lao <cclao@google.com>
Charlie Lao c52e8493 2024-10-11T14:21:19 Vulkan: Switch DescriptorPoolPointer to use SharedPtr To make the reference counting easier to maintain, SharedPtr class is added to automatically tracking the reference counting and object creation/destruction. Right now we have BindingPointer class doing similar things except it does not automatically manage the object create/destroy, which makes it less robust as well as redundant code to manage object life cycle. The other problem with BindingPointer is that it does not work with normal assign/copy operator which made it hard to read and use. SharedPtr uses exact same API semantics as std::shared_ptr, which makes the reference counting very easy to use. The main difference of SharedPtr and std::shared_ptr is that it does not use any atomic or lock since it assumes user only uses it under thread safe environment, which ANGLE's backend is. This CL also changes mDescriptorPools to mDynamicDescriptorPools to make it clear that it is dynamic descriptor pool not the descriptor pool. This is also preparation CL for the next CL where we will use SharedPtr to manage DescriptorSetHelper life cycle, which otherwise a bit complicated to manually manage. Bug: angleproject:372268711 Change-Id: I1033d9bf259bbc075a9b374d8a28e1f67d889873 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5926183 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi a19f0947 2024-10-17T22:42:30 Vulkan: Cache depth- and stencil-only views Existing depth/stencil blit and resolve paths created temporary depth- and stencil-only views. For GL_ARM_shader_framebuffer_fetch_depth_stencil, such views are needed as well. In preparation for that extension, this change adds depth- and stencil-only views to ImageViewHelper and allows them to be retrieved through RenderTargetVk. The blit and resolve paths are consequently simplfied as a side-effect. Bug: angleproject:352364582 Change-Id: Ia822efb44ca7c82f63afce904eb19dd1bed02ff5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5938149 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Yuxin Hu <yuxinhu@google.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Andrew Sumsion c2219ef9 2024-10-20T04:49:44 Removed checks for promoted extensions Removed checks for Vulkan extensions that have been promoted into Vulkan 1.1, which is already the minimum required version for ANGLE. The dependent features now work when the extensions are missing because the extensions are no longer necessary. Bug: angleproject:374483183 Change-Id: Iad92b33a8e724eaa8f4bfcbe406f5b6b8536d6d8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5944678 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Charlie Lao <cclao@google.com>
Alexey Knyazev 4aa12e9e 2024-10-07T00:00:00 Metal: Remove macOS 11.0 availability checks Chromium now requires at least macOS 11.0. This also implies MSL 2.3 support. Bug: angleproject:371829506 Change-Id: I6aaf4d9775bfe58747df28173d3931aa11fa8d25 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5912903 Reviewed-by: Kimmo Kinnunen <kkinnunen@apple.com> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Le Hoang Quyen 182aa407 2024-08-14T19:52:30 Reland "Metal: translate IOSurface pbuffer's GL_RGB to RGBX/BGRX format." This is a reland of commit f102d75a39ec8980a617c179034c24f337b12d1c Nothing changed, it's just that the root cause was already fixed in https://chromium-review.googlesource.com/c/angle/angle/+/5937060. Original change's description: > Metal: translate IOSurface pbuffer's GL_RGB to RGBX/BGRX format. > > Currently when IOSurface is bound to a pbuffer with GL_RGB internal > format, we asign angle format=B8G8R8A8_UNORM/R8G8B8A8_UNORM to it. > And then disable alpha write to the respective MTLTexture. > > However, when an implicit MSAA texture is created for the above > pbuffer, it will be assigned B8G8R8A8_UNORM/R8G8B8A8_UNORM angle format > but has no knowledge about alpha write disable. Consequently, when a > render pass uses this implicit MSAA texture, its alpha channel won't be > cleared properly and would contain garbage values. > > In order to avoid the above bug, we should use > B8G8R8X8_UNORM/R8G8B8X8_UNORM angle format for the IOSurface pbuffer. > > This will fix the render corruptions found in chromium:358957665. > > Bug: angleproject:42261786 > Bug: chromium:358957665 > Change-Id: I8aa1e24ace2de80dd08e21711445515ba4b339ff > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5788801 > Reviewed-by: Geoff Lang <geofflang@chromium.org> > Commit-Queue: Quyen Le <lehoangquyen@chromium.org> Bug: angleproject:42261786 Bug: chromium:358957665 Change-Id: I1e090886ed493eafce35d2ba98010c3be7bc16c9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5937061 Reviewed-by: Kenneth Russell <kbr@chromium.org> Auto-Submit: Quyen Le <lehoangquyen@chromium.org> Commit-Queue: Quyen Le <lehoangquyen@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
Le Hoang Quyen 2b329ee4 2024-10-18T01:37:10 Metal: fix memory leaks in Texture::getStencilView The leaks were because we stored a strong ref to the texture itself in mStencilView member if the texture already has a stencil format. This caused a circular reference preventing the texture from being released. This indirectly caused MSRTT's memory leaks in chromium:374072906 due to MSRTT using getStencilView for blitting step. Bug: chromium:374072906 Change-Id: I8ced300c2da2de1282c623780dd1affd9d45fb05 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5937060 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org> Commit-Queue: Quyen Le <lehoangquyen@chromium.org> Auto-Submit: Quyen Le <lehoangquyen@chromium.org>
Alexey Knyazev 78f146e3 2024-10-14T00:00:00 Remove EAGL support Fixed: angleproject:362530620 Change-Id: I6157655a7ad5b1e30c5d0a155d3ae3e8a81997e8 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5938872 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Kimmo Kinnunen <kkinnunen@apple.com>
Geoff Lang 5b96316b 2024-10-17T14:00:41 Revert "Metal: translate IOSurface pbuffer's GL_RGB to RGBX/BGRX format." This reverts commit f102d75a39ec8980a617c179034c24f337b12d1c. Reason for revert: Suspecting this caused an GPU memory regression on Mac. Bug: chromium:374072906 Original change's description: > Metal: translate IOSurface pbuffer's GL_RGB to RGBX/BGRX format. > > Currently when IOSurface is bound to a pbuffer with GL_RGB internal > format, we asign angle format=B8G8R8A8_UNORM/R8G8B8A8_UNORM to it. > And then disable alpha write to the respective MTLTexture. > > However, when an implicit MSAA texture is created for the above > pbuffer, it will be assigned B8G8R8A8_UNORM/R8G8B8A8_UNORM angle format > but has no knowledge about alpha write disable. Consequently, when a > render pass uses this implicit MSAA texture, its alpha channel won't be > cleared properly and would contain garbage values. > > In order to avoid the above bug, we should use > B8G8R8X8_UNORM/R8G8B8X8_UNORM angle format for the IOSurface pbuffer. > > This will fix the render corruptions found in chromium:358957665. > > Bug: angleproject:42261786 > Bug: chromium:358957665 > Change-Id: I8aa1e24ace2de80dd08e21711445515ba4b339ff > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5788801 > Reviewed-by: Geoff Lang <geofflang@chromium.org> > Commit-Queue: Quyen Le <lehoangquyen@chromium.org> Bug: angleproject:42261786 Bug: chromium:358957665 Change-Id: I29238588f78f2d01c77a317b2a22670a8036d2e3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5939455 Reviewed-by: Kenneth Russell <kbr@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Kenneth Russell 831a52f2 2024-10-16T13:46:04 Hold on to error message in LinkTaskMtl as C++ string. Make a copy of the incoming C string because the error message might be dynamically allocated and deallocated by the caller. Bug: angleproject:370425451 Change-Id: If4aaa93a90a1da8bc60f7839e29b705b0d2864e5 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5938484 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org> Auto-Submit: Kenneth Russell <kbr@chromium.org>
Alexey Knyazev 2f644ed8 2024-10-16T00:00:00 Implement NULL translator output Fixed: angleproject:373818287 Change-Id: If862e8e66a043ef968daea91d95717af97e3a0de Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5937827 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi 323187d9 2024-10-11T13:48:51 Vulkan: Fix color attachment limit with framebuffer fetch ANGLE incorreclty assumed that the input descriptor limit is at least as big as the color attachment limit. This is not true on Intel/windows where 8 color attachments are available but only 7 input descriptors. With this change, the color attachment limit is dropped to 7 in such a case so that framebuffer fetch can continue to be supported. Bug: angleproject:372873263 Change-Id: If836563b47399a23b293b74815f6bccb21aaf47c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5919759 Reviewed-by: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org>
Rafay Khurram 3fa74223 2024-03-26T17:13:52 Vulkan: Add check for VK_EXT_external_memory_host extension Tests-Passing: GN Build Bug: angleproject:42266936 Change-Id: Ie30f1cee939bc8a4b98d37f718e4526156916f05 Signed-off-by: Rafay Khurram <r.khurram@samsung.com> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5796524 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
hoonee.cho 2ee914a4 2024-03-04T06:54:29 CL: Add cl_image_format map autogeneration * Added map JSON files containing CL image formats * Updated ANGLE format table generator to include CL foramts Tests-Passing: GN Build Signed-off-by: hoonee.cho <hoonee.cho@samsung.com> Bug: angleproject:42266936 Change-Id: I2967ea6d26f69223ffa3ca12d469c05a3844200f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5798054 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Rafay Khurram <r.khurram@samsung.com>
Shahbaz Youssefi 897a5654 2024-10-16T10:32:16 CL: Rename isSet/isNotSet to intersects/excludes In particular, `isSet` was checking if _any_ bit was set instead of if _all_ bits were set. This was a point of confusion. Bug: angleproject:42266936 Change-Id: I76211a423f304fb4641ceb9cbfbb0bea4ff33ccf Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5937411 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi e40d8581 2024-10-16T10:57:39 Vulkan: Fix render pass revival vs framebuffer fetch and DR Bug: angleproject:352364582 Change-Id: I86548251fc1dec75031a23e3461bf296c852919c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5937412 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Commit-Queue: Yuly Novikov <ynovikov@chromium.org>
Shahbaz Youssefi 7beb008d 2024-10-16T10:04:43 Vulkan: Disable dynamic rendering on Nvidia Bug: angleproject:372883691 Change-Id: I71b45ea67a725a5a55d69b17329866000a1f37e3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5938740 Reviewed-by: Alexey Knyazev <lexa.knyazev@gmail.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Geoff Lang 37dd8e92 2024-09-20T17:49:11 WebGPU: Stream client arrays Add support for vertex attributes and index data without buffer backings. Stream the data to buffers at draw time. Bug: angleproject:368602384 Change-Id: I697b7882cdebf0dfab08fcffabd2d36048920547 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5878137 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Jiaqi Li 0dbe85f3 2024-10-15T13:54:36 Increase the size of vector WriteImages to max ANGLE limits the size of vector which represents the write images when resolving images. So when blit a multisample buffer to mrt, the sum of write images is more than 1 and app will abort while checking the size of the vector. This patch increases the size of vector WriteImages to max. Add end2end test to test blit multisampled framebuffer to MRT framebuffer. Bug: angleproject:361369302 Change-Id: I2d892bcd3411f2bca2ff514f6f0b6055d872668a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5872512 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Amirali Abdolrashidi 91391c06 2024-10-02T16:07:02 Vulkan: Vertex attribute hole crash workaround * Added condition to bypass reading from a streaming attribute if the source pointer is null. * Added unit test that crash if a vertex pointer is not defined for an enabled vertex attribute. * VertexAttribPointerCopyBufferFromInvalidAddress * Credit for the original test: tingwei.guo Bug: angleproject:359729255 Change-Id: I2592fed66f0eba8c7003ec02cc8ca802833f23b3 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5899978 Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com> Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Shahbaz Youssefi a1584f49 2024-10-11T21:17:32 Vulkan: Qualify framebuffer fetch with "Color" In preparation for depth/stencil framebuffer fetch, many framebuffer fetch symbols are affixed with Color to indicate that they pertain to color framebuffer fetch logic. Bug: angleproject:352364582 Change-Id: I86000ada5e6ef47387dec0b6a3fca589d816cdc2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5926593 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Shahbaz Youssefi 1608d0be 2024-10-10T16:53:15 Vulkan: Isolate framebuffer fetch no-RP-break optim from DR Prior to [1], changes to framebuffer fetch usage by shaders caused a render pass break. This was due to a limitation of render pass compatibility rules. It also caused other headache, such as needing to clear the render pass cache, recreating pipelines etc. [1]:https://chromium-review.googlesource.com/c/angle/angle/+/3697308 In [1] an important optimization was implemented for tiling GPUs where ANGLE permanently switched to framebuffer fetch mode on first encountering framebuffer fetch use. From that point on, ANGLE would always make every render pass framebuffer fetch compatible. In reality, the render pass break was unnecessary, which became apparent with dynamic rendering (for example that whether the render pass includes input attachments has no bearing on a pipeline that doesn't use input attachments at all). In [2], dynamic rendering kept the render pass break + permanent switch behavior for simplicity. [2]:https://chromium-review.googlesource.com/c/angle/angle/+/5637155 This change untangles the optimization done for legacy render passes from dynamic rendering, allowing dynamic rendering to start every render pass without framebuffer fetch and enable it later if a framebuffer fetch program is used. This is in preparation for supporting depth/stencil framebuffer fetch, where a perma-switch is troublesome (for example in combination with read-only depth/stencil feedback loops). Bug: angleproject:352364582 Change-Id: I31221cf22a28d58b9b2bf188e9c0b786cd0fe3d2 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5923120 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com>
Mohan Maiya 8f367854 2024-10-13T13:45:17 Vulkan: Refactor ImageCopy shader - Refactor common shader code into "ImageCopy.inc" - Add ImageCopyFloat shader that supports only float src and dst formats - Perform YUV and multisampled image copies with ImageCopyFloat Bug: angleproject:372059358 Change-Id: I34bbaf49f98920494d9ed9e1fd290b413a89ea13 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5927276 Commit-Queue: mohan maiya <m.maiya@samsung.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Aurora Zhang 78a694a1 2024-10-10T14:08:31 Bugfix for ms_to_ss in dynamic rendering VkMultisampledRenderToSingleSampledInfoEXT should be added into VkRenderingInfo.pNext when using dynamic rendering pass. Bug: angleproject:370153437 Change-Id: If9377362d95c60e610ec978eb684918de9807342 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5922915 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Mohan Maiya 68de0042 2024-10-08T05:41:37 Vulkan: Support glCopyTexImage2D from MSAA default framebuffer Add support for glCopyTexImage2D when the source is an MSAA default framebuffer by enhancing UtilsVk::copyImage(...) to support multisampled source images. Bug: angleproject:372059358 Tests: MultisampleTestES3.CopyTexImage2DFromMsaaDefaultFbo* Change-Id: I9b5d39f6f75ca8056f8be18b1e68eb0161c99903 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5914629 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: mohan maiya <m.maiya@samsung.com>
Shahbaz Youssefi b724eb0e 2024-10-10T16:51:11 Vulkan: Fix assert with overlay and not dynamic rendering The render pass started by UtilsVk for the overlay was not marked as belonging to the default framebuffer, causing an incorrect assertion failure where the final image layout was to be set to PRESENT_SRC. Bug: angleproject:42267038 Change-Id: I6e7a9357378d6f9a6e907e0ba25fb64dc8f7540e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5923119 Reviewed-by: Yuxin Hu <yuxinhu@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
Charlie Lao 62f33a5c 2024-10-09T16:06:54 Vulkan: Make retainResource for descriptorSetPool consistent Right now the cache hit and cache miss case are handled differently. This CL makes it consistent. Now Caller of DynamicDescriptorPool::getOrAllocateDescriptorSet will handle this retainResource call regardless of cache hit or miss. Bug: b/372268711 Change-Id: I11e47ab9e56a24eb68a0231c5e553ab6b8833c82 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5921640 Commit-Queue: Charlie Lao <cclao@google.com> Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Shahbaz Youssefi 3e8d09a1 2024-10-08T17:01:02 Vulkan: Enable FRAGMENT_SHADER_FRAMEBUFFER_FETCH_MRT_ARM ANGLE correctly handles MRT with gl_LastFragColorARM, this property should have been set to true. Bug: b/269233744 Change-Id: Iaa554df57292fcc5c12281e2e098b6451f63d5e6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5916770 Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com>
Cody Northrop ba292370 2024-10-08T19:58:29 Vulkan: Disable imageless framebuffers on Qualcomm and PowerVR * Qualcomm with imageless framebuffers, vkCreateFramebuffer loops forever * PowerVR with imageless framebuffer spends enormous amounts of time in framebuffer destruction and creation. ANGLE doesn't cache imageless framebuffers, instead adding them to garbage collection, expecting them to be lightweight. Tests: dead_cells, chrono_trigger, batman_telltale Bug: b/369693310, b/372273294 Change-Id: I43714154661c4415ec10511ed096da7c23a9a8ef Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5918740 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Auto-Submit: Cody Northrop <cnorthrop@google.com> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Cody Northrop <cnorthrop@google.com>
Amirali Abdolrashidi 878e1c92 2024-10-07T16:34:54 Vulkan: Fix line-loop draw arrays after elements Currently, when drawing line-loop arrays in Vulkan, an index buffer is created to assist in drawing (since Vulkan does not natively include a line-loop draw mode). However, when LL array draw calls are mixed with non-LL element draw calls, it can lead to some rendering issues due to the fact that the proper index buffer is not obtained. * In VertexArrayVk::handleLineLoop(), if the cached indices are the same as the last draw, the same index buffer is obtained from the LineLoopHelper object. * (Using the newly added getCurrentIndexBuffer()) * Added unit test in which a triangle element draw is places between two LL array draws. Before the fix, the second LL draw would result in an incorrect line draw. Bug: chromium:40911000 Change-Id: Ibba9a0cb2b77a2b6ae2c1e9230afe3d16b70cb63 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5908694 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Amirali Abdolrashidi <abdolrashidi@google.com>
Geoff Lang 166b72c9 2024-09-30T19:07:26 GL_ANGLE_blob_cache implementation. Bug: chromium:370538323 Change-Id: Ic51a951e78b48b315e36f518bcc39ff2d54660a6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5900761 Reviewed-by: Cody Northrop <cnorthrop@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
Alexey Knyazev cd10ad46 2024-09-30T00:00:00 Metal: Rework allowSamplerCompareGradient feature * AMD drivers may fail when a sample_compare function is used with explicit derivatives. To avoid such failures, the effective level is computed from the texture size, passed derivatives, and texture coordinates, if needed. The level value is then used for sample_compare instead of the explicit derivatives. * Apple2 GPUs do not support setting texture sampler compare state via Metal API. As a result, all sample_compare functions including those without LOD options do not work on Apple2 GPUs. This feature was attempting to incorrectly emulate a subset of sample_compare functions with a hard-coded compare state. There are no plans to support shadow samplers on Apple2 GPUs, as it would require non-trivial emulation, so this feature is no longer relevant for that platform. * Metal on macOS 10.15 only supports constant zero as the level parameter for sample_compare functions. Ignoring the passed derivatives and using zero LOD on old OS versions is a better fallback than dropping the derivatives altogether because many applications use the derivatives to set the level to zero anyway. Bug: angleproject:365066518 Bug: angleproject:368059227 Change-Id: I4028421b785ae49328b72658e0a9783275461779 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5903970 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
Mohan Maiya b3d85cce 2024-09-30T14:28:35 Vulkan: Consolidate write colorspace override states ColorspaceState struct is now used to cache write colorspace related states to determine the colorspace of Vulkan draw image views. ImageViewHelper methods are called during initialization and when colorspace related states are toggled dynamically which in turn process these states and determine the final write colorspace. We can now fully support rendering to EGLImages, with colorspace overrides, via texture or renderbuffer EGLImage targets Bug: angleproject:40644776 Tests: ImageTest*Colorspace*Vulkan MultithreadingTestES3.SharedSrgbTextureMultipleContexts*Vulkan ReadPixelsPBOTest.SrgbUnorm*Vulkan Change-Id: I2be2cd3b5b2b4ac8ecb803c34cde2b846cbd1cbe Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5901256 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: mohan maiya <m.maiya@samsung.com>
Mohan Maiya b38cc7fa 2024-09-30T12:43:09 Vulkan: Consolidate read colorspace override states ColorspaceState struct is now used to cache read colorspace related states to determine the colorspace of Vulkan read image views. ImageViewHelper methods are called during initialization and when colorspace related states are toggled dynamically which in turn process these states and determine the final read colorspace. Bug: angleproject:40644776 Tests: ImageTest*Colorspace*Vulkan SRGBTextureTest.SRGB*TextureParameter*Vulkan SRGBTextureTestES3.SRGBDecodeTexelFetch*Vulkan Change-Id: I16b3666cd80865936b826dc0738fc9210dabeda9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5901255 Reviewed-by: Charlie Lao <cclao@google.com> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: mohan maiya <m.maiya@samsung.com>
Mohan Maiya 605c2f85 2024-09-27T12:00:58 Vulkan: Bugfix in FramebufferVk::blit(...) If any color attachment of GL_DRAW_FRAMEBUFFER is already in use in the currently started renderpass, don't reuse the renderpass for blit. Bug: angleproject:40644776 Tests: Texture2DTestES3.UnitTest_DMSAA_dst_read* Change-Id: Ib4266fc65d0ac7151f362f263e9e706adb1231ce Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5895158 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Charlie Lao <cclao@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>