diff options
author | android-autoroll <android-autoroll@skia-public.iam.gserviceaccount.com> | 2024-04-29 20:05:39 +0000 |
---|---|---|
committer | android-autoroll <android-autoroll@skia-public.iam.gserviceaccount.com> | 2024-04-29 20:05:39 +0000 |
commit | 1db21666b6905e95392de6a45395cdd2c7512089 (patch) | |
tree | 1374bfac6b2bc8de860505edd283f3bdf9626fc7 | |
parent | 0a8f7833f86cdb3a5572b0d1796bb4bbbf451eb3 (diff) | |
parent | f51f2bc55b1f8aa2ef8bd9539adcefcadbe91bb9 (diff) | |
download | angle-1db21666b6905e95392de6a45395cdd2c7512089.tar.gz |
Roll ANGLE from 978cf07b7363 to f51f2bc55b1f (2 revisions)
https://chromium.googlesource.com/angle/angle.git/+log/978cf07b7363..f51f2bc55b1f
Please enable autosubmit on changes if possible when approving them.
If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/angle-android-autoroll
Please CC angle-team@google.com,cnorthrop@google.com,rmistry@google.com on the revert to ensure that a human
is aware of the problem.
To file a bug in ANGLE: https://bugs.chromium.org/p/angleproject/issues/entry
To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622
Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
Test: Presubmit checks will test this change.
Exempt-From-Owner-Approval: The autoroll bot does not require owner approval.
Change-Id: If5188c8b8ba45f87db1f4a78d47db1ec47b6a5d8
22 files changed, 224 insertions, 80 deletions
@@ -938,7 +938,7 @@ deps = { }, 'third_party/vulkan-deps': { - 'url': Var('chromium_git') + '/vulkan-deps@736920240f0bddbee3634f4af0dc683c0902e66a', + 'url': Var('chromium_git') + '/vulkan-deps@74fe7976366424c2e7375c3520fc674cc365ce0b', 'condition': 'not build_with_chromium', }, diff --git a/scripts/code_generation_hashes/GL_EGL_entry_points.json b/scripts/code_generation_hashes/GL_EGL_entry_points.json index 3161e4b2e0..7a619c02ad 100644 --- a/scripts/code_generation_hashes/GL_EGL_entry_points.json +++ b/scripts/code_generation_hashes/GL_EGL_entry_points.json @@ -6,7 +6,7 @@ "scripts/entry_point_packed_gl_enums.json": "57a3a729fd25032bc336f4b6a55bc238", "scripts/generate_entry_points.py": - "c811134a03d12777acd1bb85da21ce92", + "359649efbbc776d91eb29bc1d78c737c", "scripts/gl_angle_ext.xml": "197e07a917d5bba6dfa2840fb1b58e7e", "scripts/registry_xml.py": @@ -130,11 +130,11 @@ "src/libGLESv2/entry_points_cl_autogen.h": "dde2f94c3004874a7da995dae69da811", "src/libGLESv2/entry_points_egl_autogen.cpp": - "7b164c4311aba60564509540b1ed8303", + "8348d52dadf5ad12208a4d93864000c3", "src/libGLESv2/entry_points_egl_autogen.h": "3bc7a8df9deadd7cfd615d0cfad0c6a8", "src/libGLESv2/entry_points_egl_ext_autogen.cpp": - "8fd59c97c30cd561cdecdceaeca065e1", + "0409df0bdbbc0fb32a88d5f23a2cb7a5", "src/libGLESv2/entry_points_egl_ext_autogen.h": "2d005f4cb16dcdd61e08cfec97a12f86", "src/libGLESv2/entry_points_gl_1_autogen.cpp": diff --git a/scripts/generate_entry_points.py b/scripts/generate_entry_points.py index be01613d38..31f54940e7 100755 --- a/scripts/generate_entry_points.py +++ b/scripts/generate_entry_points.py @@ -3111,10 +3111,11 @@ def get_unlocked_tail_call(api, cmd_name): # - eglPrepareSwapBuffersANGLE -> Calls vkAcquireNextImageKHR in tail call # # - eglSwapBuffers, eglSwapBuffersWithDamageKHR and - # eglSwapBuffersWithFrameTokenANGLE -> May throttle the CPU in tail call + # eglSwapBuffersWithFrameTokenANGLE -> May throttle the CPU in tail call or + # calls native EGL function # # - eglClientWaitSyncKHR, eglClientWaitSync, glClientWaitSync, - # glFinishFenceNV -> May wait on fence in tail call + # glFinishFenceNV -> May wait on fence in tail call or call native EGL function # # - glTexImage2D, glTexImage3D, glTexSubImage2D, glTexSubImage3D, # glCompressedTexImage2D, glCompressedTexImage3D, @@ -3124,10 +3125,13 @@ def get_unlocked_tail_call(api, cmd_name): # - glCompileShader and glLinkProgram -> May perform the compilation / link # in tail call # + # - eglCreateSync, eglCreateImage, eglDestroySync, eglDestroyImage -> Calls + # native EGL function in tail call + # if (cmd_name in [ - 'eglDestroySurface', 'eglMakeCurrent', 'eglReleaseThread', 'eglCreateWindowSurface', - 'eglCreatePlatformWindowSurface', 'eglCreatePlatformWindowSurfaceEXT', - 'eglPrepareSwapBuffersANGLE', 'eglSwapBuffers', 'eglSwapBuffersWithDamageKHR', + 'eglCreateSyncKHR', 'eglDestroySurface', 'eglMakeCurrent', 'eglReleaseThread', + 'eglCreateWindowSurface', 'eglCreatePlatformWindowSurface', + 'eglCreatePlatformWindowSurfaceEXT', 'eglPrepareSwapBuffersANGLE', 'eglSwapBuffersWithFrameTokenANGLE', 'glFinishFenceNV', 'glCompileShader', 'glLinkProgram' ] or cmd_name.startswith('glTexImage2D') or cmd_name.startswith('glTexImage3D') or @@ -3138,7 +3142,21 @@ def get_unlocked_tail_call(api, cmd_name): cmd_name.startswith('glCompressedTexSubImage3D')): return 'egl::Display::GetCurrentThreadUnlockedTailCall()->run(nullptr);' - if cmd_name in ['eglClientWaitSyncKHR', 'eglClientWaitSync', 'glClientWaitSync']: + if cmd_name in [ + 'eglClientWaitSyncKHR', + 'eglClientWaitSync', + 'eglCreateImageKHR', + 'eglCreateImage', + 'eglCreateSyncKHR', + 'eglCreateSync', + 'eglDestroySyncKHR', + 'eglDestroySync', + 'eglSwapBuffers', + 'eglSwapBuffersWithDamageKHR', + 'eglWaitSyncKHR', + 'eglWaitSync', + 'glClientWaitSync', + ]: return 'egl::Display::GetCurrentThreadUnlockedTailCall()->run(&returnValue);' # Otherwise assert that no tail calls where generated diff --git a/src/libANGLE/renderer/gl/egl/ImageEGL.cpp b/src/libANGLE/renderer/gl/egl/ImageEGL.cpp index 8357845197..be70e7dc16 100644 --- a/src/libANGLE/renderer/gl/egl/ImageEGL.cpp +++ b/src/libANGLE/renderer/gl/egl/ImageEGL.cpp @@ -10,6 +10,7 @@ #include "common/utilities.h" #include "libANGLE/Context.h" +#include "libANGLE/Display.h" #include "libANGLE/renderer/gl/FunctionsGL.h" #include "libANGLE/renderer/gl/RenderbufferGL.h" #include "libANGLE/renderer/gl/StateManagerGL.h" @@ -99,11 +100,19 @@ egl::Error ImageEGL::initialize(const egl::Display *display) attributes.push_back(EGL_NONE); - mImage = mEGL->createImageKHR(mContext, mTarget, buffer, attributes.data()); - if (mImage == EGL_NO_IMAGE) - { - return egl::EglBadAlloc() << "eglCreateImage failed with " << egl::Error(mEGL->getError()); - } + egl::Display::GetCurrentThreadUnlockedTailCall()->add([egl = mEGL, &image = mImage, + context = mContext, target = mTarget, + buffer, attributes](void *resultOut) { + image = egl->createImageKHR(context, target, buffer, attributes.data()); + + // If image creation failed, force the return value of eglCreateImage to EGL_NO_IMAGE. This + // won't delete this image object but a driver error is unexpected at this point. + if (image == EGL_NO_IMAGE) + { + ERR() << "eglCreateImage failed with " << gl::FmtHex(egl->getError()); + *static_cast<EGLImage *>(resultOut) = EGL_NO_IMAGE; + } + }); return egl::NoError(); } diff --git a/src/libANGLE/renderer/gl/egl/SurfaceEGL.cpp b/src/libANGLE/renderer/gl/egl/SurfaceEGL.cpp index 0be9a2caf8..f7cbffc2f3 100644 --- a/src/libANGLE/renderer/gl/egl/SurfaceEGL.cpp +++ b/src/libANGLE/renderer/gl/egl/SurfaceEGL.cpp @@ -9,6 +9,7 @@ #include "libANGLE/renderer/gl/egl/SurfaceEGL.h" #include "common/debug.h" +#include "libANGLE/Display.h" namespace rx { @@ -38,11 +39,12 @@ egl::Error SurfaceEGL::makeCurrent(const gl::Context *context) egl::Error SurfaceEGL::swap(const gl::Context *context) { - EGLBoolean success = mEGL->swapBuffers(mSurface); - if (success == EGL_FALSE) - { - return egl::Error(mEGL->getError(), "eglSwapBuffers failed"); - } + egl::Display::GetCurrentThreadUnlockedTailCall()->add( + [egl = mEGL, surface = mSurface](void *resultOut) { + ANGLE_UNUSED_VARIABLE(resultOut); + *static_cast<EGLBoolean *>(resultOut) = egl->swapBuffers(surface); + }); + return egl::NoError(); } @@ -50,19 +52,24 @@ egl::Error SurfaceEGL::swapWithDamage(const gl::Context *context, const EGLint *rects, EGLint n_rects) { - EGLBoolean success; if (mHasSwapBuffersWithDamage) { - success = mEGL->swapBuffersWithDamageKHR(mSurface, rects, n_rects); + egl::Display::GetCurrentThreadUnlockedTailCall()->add( + [egl = mEGL, surface = mSurface, rects, n_rects](void *resultOut) { + ANGLE_UNUSED_VARIABLE(resultOut); + *static_cast<EGLBoolean *>(resultOut) = + egl->swapBuffersWithDamageKHR(surface, rects, n_rects); + }); } else { - success = mEGL->swapBuffers(mSurface); - } - if (success == EGL_FALSE) - { - return egl::Error(mEGL->getError(), "eglSwapBuffersWithDamageKHR failed"); + egl::Display::GetCurrentThreadUnlockedTailCall()->add( + [egl = mEGL, surface = mSurface](void *resultOut) { + ANGLE_UNUSED_VARIABLE(resultOut); + *static_cast<EGLBoolean *>(resultOut) = egl->swapBuffers(surface); + }); } + return egl::NoError(); } diff --git a/src/libANGLE/renderer/gl/egl/SyncEGL.cpp b/src/libANGLE/renderer/gl/egl/SyncEGL.cpp index b4a19dce32..93e3151eaf 100644 --- a/src/libANGLE/renderer/gl/egl/SyncEGL.cpp +++ b/src/libANGLE/renderer/gl/egl/SyncEGL.cpp @@ -26,7 +26,10 @@ void SyncEGL::onDestroy(const egl::Display *display) { if (mSync != EGL_NO_SYNC_KHR) { - mEGL->destroySyncKHR(mSync); + egl::Display::GetCurrentThreadUnlockedTailCall()->add( + [egl = mEGL, sync = mSync](void *resultOut) { + *static_cast<EGLBoolean *>(resultOut) = egl->destroySyncKHR(sync); + }); mSync = EGL_NO_SYNC_KHR; } } @@ -49,11 +52,18 @@ egl::Error SyncEGL::initialize(const egl::Display *display, } nativeAttribs.push_back(EGL_NONE); - mSync = mEGL->createSyncKHR(type, nativeAttribs.data()); - if (mSync == EGL_NO_SYNC_KHR) - { - return egl::Error(mEGL->getError(), "eglCreateSync failed to create sync object"); - } + egl::Display::GetCurrentThreadUnlockedTailCall()->add( + [egl = mEGL, &sync = mSync, type, attribs = nativeAttribs](void *resultOut) { + sync = egl->createSyncKHR(type, attribs.data()); + + // If sync creation failed, force the return value of eglCreateSync to EGL_NO_SYNC. This + // won't delete this sync object but a driver error is unexpected at this point. + if (sync == EGL_NO_SYNC_KHR) + { + ERR() << "eglCreateSync failed with " << gl::FmtHex(egl->getError()); + *static_cast<EGLSync *>(resultOut) = EGL_NO_SYNC_KHR; + } + }); return egl::NoError(); } @@ -65,14 +75,14 @@ egl::Error SyncEGL::clientWait(const egl::Display *display, EGLint *outResult) { ASSERT(mSync != EGL_NO_SYNC_KHR); - EGLint result = mEGL->clientWaitSyncKHR(mSync, flags, timeout); - if (result == EGL_FALSE) - { - return egl::Error(mEGL->getError(), "eglClientWaitSync failed"); - } + // If we need to perform a CPU wait don't set the resultOut parameter passed into the + // method, instead set the parameter passed into the unlocked tail call. + egl::Display::GetCurrentThreadUnlockedTailCall()->add( + [egl = mEGL, sync = mSync, flags, timeout](void *resultOut) { + *static_cast<EGLint *>(resultOut) = egl->clientWaitSyncKHR(sync, flags, timeout); + }); - *outResult = result; return egl::NoError(); } @@ -81,12 +91,11 @@ egl::Error SyncEGL::serverWait(const egl::Display *display, EGLint flags) { ASSERT(mSync != EGL_NO_SYNC_KHR); - EGLint result = mEGL->waitSyncKHR(mSync, flags); - if (result == EGL_FALSE) - { - return egl::Error(mEGL->getError(), "eglWaitSync failed"); - } + egl::Display::GetCurrentThreadUnlockedTailCall()->add( + [egl = mEGL, sync = mSync, flags](void *resultOut) { + *static_cast<EGLBoolean *>(resultOut) = egl->waitSyncKHR(sync, flags); + }); return egl::NoError(); } diff --git a/src/libGLESv2/entry_points_egl_autogen.cpp b/src/libGLESv2/entry_points_egl_autogen.cpp index 54a0591d67..4325d1dc5d 100644 --- a/src/libGLESv2/entry_points_egl_autogen.cpp +++ b/src/libGLESv2/entry_points_egl_autogen.cpp @@ -628,7 +628,7 @@ EGLBoolean EGLAPIENTRY EGL_SwapBuffers(EGLDisplay dpy, EGLSurface surface) ANGLE_CAPTURE_EGL(SwapBuffers, true, thread, dpyPacked, surfacePacked, returnValue); } - egl::Display::GetCurrentThreadUnlockedTailCall()->run(nullptr); + egl::Display::GetCurrentThreadUnlockedTailCall()->run(&returnValue); return returnValue; } @@ -1026,7 +1026,7 @@ EGLImage EGLAPIENTRY EGL_CreateImage(EGLDisplay dpy, ANGLE_CAPTURE_EGL(CreateImage, true, thread, dpyPacked, ctxPacked, target, buffer, attrib_listPacked, returnValue); } - ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any()); + egl::Display::GetCurrentThreadUnlockedTailCall()->run(&returnValue); return returnValue; } @@ -1129,7 +1129,7 @@ EGLSync EGLAPIENTRY EGL_CreateSync(EGLDisplay dpy, EGLenum type, const EGLAttrib ANGLE_CAPTURE_EGL(CreateSync, true, thread, dpyPacked, type, attrib_listPacked, returnValue); } - ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any()); + egl::Display::GetCurrentThreadUnlockedTailCall()->run(&returnValue); return returnValue; } @@ -1183,7 +1183,7 @@ EGLBoolean EGLAPIENTRY EGL_DestroySync(EGLDisplay dpy, EGLSync sync) ANGLE_CAPTURE_EGL(DestroySync, true, thread, dpyPacked, syncPacked, returnValue); } - ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any()); + egl::Display::GetCurrentThreadUnlockedTailCall()->run(&returnValue); return returnValue; } @@ -1274,7 +1274,7 @@ EGLBoolean EGLAPIENTRY EGL_WaitSync(EGLDisplay dpy, EGLSync sync, EGLint flags) ANGLE_CAPTURE_EGL(WaitSync, true, thread, dpyPacked, syncPacked, flags, returnValue); } - ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any()); + egl::Display::GetCurrentThreadUnlockedTailCall()->run(&returnValue); return returnValue; } diff --git a/src/libGLESv2/entry_points_egl_ext_autogen.cpp b/src/libGLESv2/entry_points_egl_ext_autogen.cpp index 93252ebe4f..405f138781 100644 --- a/src/libGLESv2/entry_points_egl_ext_autogen.cpp +++ b/src/libGLESv2/entry_points_egl_ext_autogen.cpp @@ -1451,7 +1451,7 @@ EGLSyncKHR EGLAPIENTRY EGL_CreateSyncKHR(EGLDisplay dpy, EGLenum type, const EGL ANGLE_CAPTURE_EGL(CreateSyncKHR, true, thread, dpyPacked, type, attrib_listPacked, returnValue); } - ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any()); + egl::Display::GetCurrentThreadUnlockedTailCall()->run(nullptr); return returnValue; } @@ -1478,7 +1478,7 @@ EGLBoolean EGLAPIENTRY EGL_DestroySyncKHR(EGLDisplay dpy, EGLSyncKHR sync) ANGLE_CAPTURE_EGL(DestroySyncKHR, true, thread, dpyPacked, syncPacked, returnValue); } - ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any()); + egl::Display::GetCurrentThreadUnlockedTailCall()->run(&returnValue); return returnValue; } @@ -1549,7 +1549,7 @@ EGLImageKHR EGLAPIENTRY EGL_CreateImageKHR(EGLDisplay dpy, ANGLE_CAPTURE_EGL(CreateImageKHR, true, thread, dpyPacked, ctxPacked, target, buffer, attrib_listPacked, returnValue); } - ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any()); + egl::Display::GetCurrentThreadUnlockedTailCall()->run(&returnValue); return returnValue; } @@ -2018,7 +2018,7 @@ EGLBoolean EGLAPIENTRY EGL_SwapBuffersWithDamageKHR(EGLDisplay dpy, ANGLE_CAPTURE_EGL(SwapBuffersWithDamageKHR, true, thread, dpyPacked, surfacePacked, rects, n_rects, returnValue); } - egl::Display::GetCurrentThreadUnlockedTailCall()->run(nullptr); + egl::Display::GetCurrentThreadUnlockedTailCall()->run(&returnValue); return returnValue; } @@ -2046,7 +2046,7 @@ EGLint EGLAPIENTRY EGL_WaitSyncKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint flags ANGLE_CAPTURE_EGL(WaitSyncKHR, true, thread, dpyPacked, syncPacked, flags, returnValue); } - ASSERT(!egl::Display::GetCurrentThreadUnlockedTailCall()->any()); + egl::Display::GetCurrentThreadUnlockedTailCall()->run(&returnValue); return returnValue; } diff --git a/third_party/vulkan-deps/DEPS b/third_party/vulkan-deps/DEPS index bab7cf543a..cb01befb49 100644 --- a/third_party/vulkan-deps/DEPS +++ b/third_party/vulkan-deps/DEPS @@ -10,7 +10,7 @@ vars = { 'chromium_git': 'https://chromium.googlesource.com', # Current revision of glslang, the Khronos SPIRV compiler. - 'glslang_revision': 'b5672e8e8d42b0278d1765ab3d24c97b0e746bd0', + 'glslang_revision': 'f857417c991d178e90670385e31fee6d30394076', # Current revision of spirv-cross, the Khronos SPIRV cross compiler. 'spirv_cross_revision': 'b8fcf307f1f347089e3c46eb4451d27f32ebc8d3', @@ -28,13 +28,13 @@ vars = { 'vulkan_loader_revision': 'fa3b7bdefadef01ee9af593245c47ca1a33212f4', # Current revision of Khronos Vulkan-Tools. - 'vulkan_tools_revision': '9aec60c387fb0cd065d3ba921b56c3ef19ad958e', + 'vulkan_tools_revision': 'd21838aeaafbeb57cbed3a8072e26b7b15cc533e', # Current revision of Khronos Vulkan-Utility-Libraries. - 'vulkan_utility_libraries_revision': 'd0ffc68fe796ffd5752b7a2cba7c4f1d80ed7283', + 'vulkan_utility_libraries_revision': '68780d9b8c4dd256e55a3df60969970cb29911ce', # Current revision of Khronos Vulkan-ValidationLayers. - 'vulkan_validation_revision': '9911e85d47930883f8a0dd7aa34c035b7c468e86', + 'vulkan_validation_revision': '397d8fbc0ed892e470d24208c199a014b7d5fabe', } deps = { diff --git a/third_party/vulkan-deps/glslang/src/.github/workflows/continuous_integration.yml b/third_party/vulkan-deps/glslang/src/.github/workflows/continuous_integration.yml index 33d0dd9016..4d30698857 100644 --- a/third_party/vulkan-deps/glslang/src/.github/workflows/continuous_integration.yml +++ b/third_party/vulkan-deps/glslang/src/.github/workflows/continuous_integration.yml @@ -23,7 +23,7 @@ jobs: with: python-version: '3.7' - name: Setup ccache - uses: hendrikmuhs/ccache-action@faf867a11c028c0b483fb2ae72b6fc8f7d842714 # v1.2.12 + uses: hendrikmuhs/ccache-action@c92f40bee50034e84c763e33b317c77adaa81c92 # v1.2.13 with: key: ubuntu-22-${{ matrix.cmake_build_type }}-${{ matrix.compiler.cc }}-${{matrix.compiler.cxx}} - run: ./update_glslang_sources.py @@ -59,7 +59,7 @@ jobs: with: python-version: '3.7' - name: Setup ccache - uses: hendrikmuhs/ccache-action@faf867a11c028c0b483fb2ae72b6fc8f7d842714 # v1.2.12 + uses: hendrikmuhs/ccache-action@c92f40bee50034e84c763e33b317c77adaa81c92 # v1.2.13 with: key: ubuntu-22-${{ matrix.cmake_build_type }}-${{ matrix.compiler.cc }}-${{matrix.compiler.cxx}}-${{matrix.flags}} # This is to combat a bug when using 6.6 linux kernels with thread/address sanitizer @@ -99,7 +99,7 @@ jobs: with: cmakeVersion: 3.17.2 - name: Setup ccache - uses: hendrikmuhs/ccache-action@faf867a11c028c0b483fb2ae72b6fc8f7d842714 # v1.2.12 + uses: hendrikmuhs/ccache-action@c92f40bee50034e84c763e33b317c77adaa81c92 # v1.2.13 with: key: linux_backcompat - run: ./update_glslang_sources.py @@ -171,7 +171,7 @@ jobs: - uses: actions/checkout@1d96c772d19495a3b5c517cd2bc0cb401ea0529f # v4.1.3 - uses: lukka/get-cmake@4931ab1fc1604964c055eb330edb3f6b26ba0cfa # v3.29.2 - name: Setup ccache - uses: hendrikmuhs/ccache-action@faf867a11c028c0b483fb2ae72b6fc8f7d842714 # v1.2.12 + uses: hendrikmuhs/ccache-action@c92f40bee50034e84c763e33b317c77adaa81c92 # v1.2.13 with: key: IOS - run: ./update_glslang_sources.py @@ -200,7 +200,7 @@ jobs: - uses: actions/checkout@1d96c772d19495a3b5c517cd2bc0cb401ea0529f # v4.1.3 - uses: lukka/get-cmake@4931ab1fc1604964c055eb330edb3f6b26ba0cfa # v3.29.2 - name: Setup ccache - uses: hendrikmuhs/ccache-action@faf867a11c028c0b483fb2ae72b6fc8f7d842714 # v1.2.12 + uses: hendrikmuhs/ccache-action@c92f40bee50034e84c763e33b317c77adaa81c92 # v1.2.13 with: key: android-${{ matrix.LEGACY }} - run: ./update_glslang_sources.py @@ -226,7 +226,7 @@ jobs: python-version: '3.7' - uses: lukka/get-cmake@4931ab1fc1604964c055eb330edb3f6b26ba0cfa # v3.29.2 - name: Setup ccache - uses: hendrikmuhs/ccache-action@faf867a11c028c0b483fb2ae72b6fc8f7d842714 # v1.2.12 + uses: hendrikmuhs/ccache-action@c92f40bee50034e84c763e33b317c77adaa81c92 # v1.2.13 with: key: ubuntu-emscripten - uses: mymindstorm/setup-emsdk@6ab9eb1bda2574c4ddb79809fc9247783eaf9021 # v14 diff --git a/third_party/vulkan-deps/glslang/src/.github/workflows/scorecard.yml b/third_party/vulkan-deps/glslang/src/.github/workflows/scorecard.yml index adcfa76773..0560839b17 100644 --- a/third_party/vulkan-deps/glslang/src/.github/workflows/scorecard.yml +++ b/third_party/vulkan-deps/glslang/src/.github/workflows/scorecard.yml @@ -40,7 +40,7 @@ jobs: # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF # format to the repository Actions tab. - name: "Upload artifact" - uses: actions/upload-artifact@1746f4ab65b179e0ea60a494b83293b640dd5bba # v4.3.2 + uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3 with: name: SARIF file path: results.sarif @@ -48,6 +48,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@c7f9125735019aa87cfc361530512d50ea439c71 # v3.25.1 + uses: github/codeql-action/upload-sarif@d39d31e687223d841ef683f52467bd88e9b21c14 # v3.25.3 with: sarif_file: results.sarif diff --git a/third_party/vulkan-deps/glslang/src/Test/baseResults/440.frag.out b/third_party/vulkan-deps/glslang/src/Test/baseResults/440.frag.out index 7ea19262de..9de029a21b 100644 --- a/third_party/vulkan-deps/glslang/src/Test/baseResults/440.frag.out +++ b/third_party/vulkan-deps/glslang/src/Test/baseResults/440.frag.out @@ -1,7 +1,7 @@ 440.frag ERROR: 0:11: 'location' : overlapping use of location 4 ERROR: 0:13: 'component' : type overflows the available 4 components -ERROR: 0:22: 'location' : fragment outputs or tileImageEXTs sharing the same location 30 must be the same basic type +ERROR: 0:22: 'location' : the aliases sharing the location 30 must be the same basic type and interpolation qualification ERROR: 0:24: 'qualifier' : cannot use auxiliary, memory, interpolation, or precision qualifier in a default qualifier declaration (declaration with no type) ERROR: 0:25: 'qualifier' : cannot use auxiliary, memory, interpolation, or precision qualifier in a default qualifier declaration (declaration with no type) ERROR: 0:26: 'qualifier' : cannot use auxiliary, memory, interpolation, or precision qualifier in a default qualifier declaration (declaration with no type) diff --git a/third_party/vulkan-deps/glslang/src/Test/baseResults/440.vert.out b/third_party/vulkan-deps/glslang/src/Test/baseResults/440.vert.out index 6c975c09a6..f341548523 100644 --- a/third_party/vulkan-deps/glslang/src/Test/baseResults/440.vert.out +++ b/third_party/vulkan-deps/glslang/src/Test/baseResults/440.vert.out @@ -10,16 +10,21 @@ ERROR: 0:39: 'component' : type overflows the available 4 components ERROR: 0:40: 'component' : type overflows the available 4 components ERROR: 0:42: 'component' : cannot apply to a matrix, structure, or block ERROR: 0:43: 'component' : cannot apply to a matrix, structure, or block +ERROR: 0:43: 'location' : the aliases sharing the location 33 must be the same basic type and interpolation qualification ERROR: 0:44: 'component' : cannot apply to a matrix, structure, or block +ERROR: 0:44: 'location' : the aliases sharing the location 34 must be the same basic type and interpolation qualification ERROR: 0:46: 'component' : must specify 'location' to use 'component' ERROR: 0:52: 'location' : overlapping use of location 40 ERROR: 0:54: 'component' : type overflows the available 4 components ERROR: 0:55: 'component' : type overflows the available 4 components ERROR: 0:57: 'component' : cannot apply to a matrix, structure, or block ERROR: 0:58: 'component' : cannot apply to a matrix, structure, or block +ERROR: 0:58: 'location' : the aliases sharing the location 43 must be the same basic type and interpolation qualification ERROR: 0:61: 'location/component/index' : cannot declare a default, use a full declaration +ERROR: 0:64: 'location' : the aliases sharing the location 50 must be the same basic type and interpolation qualification ERROR: 0:66: 'component' : doubles cannot start on an odd-numbered component ERROR: 0:67: 'component' : type overflows the available 4 components +ERROR: 0:69: 'location' : the aliases sharing the location 53 must be the same basic type and interpolation qualification ERROR: 0:71: 'location' : overlapping use of location 55 ERROR: 0:75: 'location' : overlapping use of location 57 ERROR: 0:78: 'location' : overlapping use of location 59 @@ -56,7 +61,7 @@ ERROR: 0:193: 'assign' : l-value required "gl_BaseVertexARB" (can't modify shad ERROR: 0:194: 'assign' : l-value required "gl_BaseInstanceARB" (can't modify shader input) ERROR: 0:195: 'assign' : l-value required "gl_DrawIDARB" (can't modify shader input) ERROR: 0:196: 'glBaseInstanceARB' : undeclared identifier -ERROR: 57 compilation errors. No code generated. +ERROR: 62 compilation errors. No code generated. Shader version: 440 diff --git a/third_party/vulkan-deps/glslang/src/Test/baseResults/location_aliasing.tesc.out b/third_party/vulkan-deps/glslang/src/Test/baseResults/location_aliasing.tesc.out new file mode 100644 index 0000000000..54263d25df --- /dev/null +++ b/third_party/vulkan-deps/glslang/src/Test/baseResults/location_aliasing.tesc.out @@ -0,0 +1,33 @@ +location_aliasing.tesc +ERROR: 0:7: 'location' : the aliases sharing the location 1 must be the same basic type and interpolation qualification +ERROR: 1 compilation errors. No code generated. + + +Shader version: 430 +Requested GL_ARB_enhanced_layouts +vertices = 1 +ERROR: node is still EOpNull! +0:13 Function Definition: main( ( global void) +0:13 Function Parameters: +0:? Linker Objects +0:? 'gohan' (layout( location=1 component=0) in 32-element array of double) +0:? 'goten' (layout( location=1 component=2) in 32-element array of float) +0:? 'vs_tcs' ( in 32-element array of 4-component vector of float) +0:? 'tcs_tes' ( out 1-element array of 4-component vector of float) + + +Linked tessellation control stage: + + +Shader version: 430 +Requested GL_ARB_enhanced_layouts +vertices = 1 +ERROR: node is still EOpNull! +0:13 Function Definition: main( ( global void) +0:13 Function Parameters: +0:? Linker Objects +0:? 'gohan' (layout( location=1 component=0) in 32-element array of double) +0:? 'goten' (layout( location=1 component=2) in 32-element array of float) +0:? 'vs_tcs' ( in 32-element array of 4-component vector of float) +0:? 'tcs_tes' ( out 1-element array of 4-component vector of float) + diff --git a/third_party/vulkan-deps/glslang/src/Test/baseResults/location_aliasing1.frag.out b/third_party/vulkan-deps/glslang/src/Test/baseResults/location_aliasing1.frag.out new file mode 100644 index 0000000000..3a1e1a24b5 --- /dev/null +++ b/third_party/vulkan-deps/glslang/src/Test/baseResults/location_aliasing1.frag.out @@ -0,0 +1,27 @@ +location_aliasing1.frag +ERROR: 0:6: 'location' : the aliases sharing the location 1 must be the same basic type and interpolation qualification +ERROR: 1 compilation errors. No code generated. + + +Shader version: 430 +Requested GL_ARB_enhanced_layouts +ERROR: node is still EOpNull! +0:8 Function Definition: main( ( global void) +0:8 Function Parameters: +0:? Linker Objects +0:? 'in1' (layout( location=1 component=0) smooth in float) +0:? 'in2' (layout( location=1 component=2) flat in float) + + +Linked fragment stage: + + +Shader version: 430 +Requested GL_ARB_enhanced_layouts +ERROR: node is still EOpNull! +0:8 Function Definition: main( ( global void) +0:8 Function Parameters: +0:? Linker Objects +0:? 'in1' (layout( location=1 component=0) smooth in float) +0:? 'in2' (layout( location=1 component=2) flat in float) + diff --git a/third_party/vulkan-deps/glslang/src/Test/baseResults/spv.ext.ShaderTileImage.typemismatch.frag.out b/third_party/vulkan-deps/glslang/src/Test/baseResults/spv.ext.ShaderTileImage.typemismatch.frag.out index e91ffb73f3..057e5e1d58 100644 --- a/third_party/vulkan-deps/glslang/src/Test/baseResults/spv.ext.ShaderTileImage.typemismatch.frag.out +++ b/third_party/vulkan-deps/glslang/src/Test/baseResults/spv.ext.ShaderTileImage.typemismatch.frag.out @@ -1,5 +1,5 @@ spv.ext.ShaderTileImage.typemismatch.frag -ERROR: 0:7: 'location' : fragment outputs or tileImageEXTs sharing the same location 0 must be the same basic type +ERROR: 0:7: 'location' : the aliases sharing the location 0 must be the same basic type and interpolation qualification ERROR: 1 compilation errors. No code generated. diff --git a/third_party/vulkan-deps/glslang/src/Test/location_aliasing.tesc b/third_party/vulkan-deps/glslang/src/Test/location_aliasing.tesc new file mode 100644 index 0000000000..624396519c --- /dev/null +++ b/third_party/vulkan-deps/glslang/src/Test/location_aliasing.tesc @@ -0,0 +1,15 @@ +#version 430 core
+#extension GL_ARB_enhanced_layouts : require
+
+layout(vertices = 1) out;
+
+layout (location = 1, component = 0) in double gohan[];
+layout (location = 1, component = 2) in float goten[];
+
+
+in vec4 vs_tcs[];
+out vec4 tcs_tes[];
+
+void main()
+{
+}
\ No newline at end of file diff --git a/third_party/vulkan-deps/glslang/src/Test/location_aliasing1.frag b/third_party/vulkan-deps/glslang/src/Test/location_aliasing1.frag new file mode 100644 index 0000000000..c8c7d264da --- /dev/null +++ b/third_party/vulkan-deps/glslang/src/Test/location_aliasing1.frag @@ -0,0 +1,10 @@ +#version 430 core
+#extension GL_ARB_enhanced_layouts : require
+
+
+layout (location = 1, component = 0) in smooth float in1;
+layout (location = 1, component = 2) in flat float in2;
+
+void main()
+{
+}
\ No newline at end of file diff --git a/third_party/vulkan-deps/glslang/src/glslang/MachineIndependent/ParseHelper.cpp b/third_party/vulkan-deps/glslang/src/glslang/MachineIndependent/ParseHelper.cpp index f157d15b2b..cb19b2d434 100644 --- a/third_party/vulkan-deps/glslang/src/glslang/MachineIndependent/ParseHelper.cpp +++ b/third_party/vulkan-deps/glslang/src/glslang/MachineIndependent/ParseHelper.cpp @@ -6568,10 +6568,10 @@ void TParseContext::layoutTypeCheck(const TSourceLoc& loc, const TType& type) int repeated = intermediate.addUsedLocation(qualifier, type, typeCollision); if (repeated >= 0 && ! typeCollision) error(loc, "overlapping use of location", "location", "%d", repeated); - // "fragment-shader outputs/tileImageEXT ... if two variables are placed within the same - // location, they must have the same underlying type (floating-point or integer)" - if (typeCollision && language == EShLangFragment && (qualifier.isPipeOutput() || qualifier.storage == EvqTileImageEXT)) - error(loc, "fragment outputs or tileImageEXTs sharing the same location", "location", "%d must be the same basic type", repeated); + // When location aliasing, the aliases sharing the location must have the same underlying numerical type and bit width( + // floating - point or integer, 32 - bit versus 64 - bit,etc.) + if (typeCollision && (qualifier.isPipeInput() || qualifier.isPipeOutput() || qualifier.storage == EvqTileImageEXT)) + error(loc, "the aliases sharing the location", "location", "%d must be the same basic type and interpolation qualification", repeated); } if (qualifier.hasXfbOffset() && qualifier.hasXfbBuffer()) { diff --git a/third_party/vulkan-deps/glslang/src/glslang/MachineIndependent/linkValidate.cpp b/third_party/vulkan-deps/glslang/src/glslang/MachineIndependent/linkValidate.cpp index 3b5add9de5..62e24426e3 100644 --- a/third_party/vulkan-deps/glslang/src/glslang/MachineIndependent/linkValidate.cpp +++ b/third_party/vulkan-deps/glslang/src/glslang/MachineIndependent/linkValidate.cpp @@ -1689,7 +1689,7 @@ int TIntermediate::addUsedLocation(const TQualifier& qualifier, const TType& typ // First range: TRange locationRange(qualifier.layoutLocation, qualifier.layoutLocation); TRange componentRange(0, 3); - TIoRange range(locationRange, componentRange, type.getBasicType(), 0); + TIoRange range(locationRange, componentRange, type.getBasicType(), 0, qualifier.centroid, qualifier.smooth, qualifier.flat); // check for collisions collision = checkLocationRange(set, range, type, typeCollision); @@ -1699,7 +1699,7 @@ int TIntermediate::addUsedLocation(const TQualifier& qualifier, const TType& typ // Second range: TRange locationRange2(qualifier.layoutLocation + 1, qualifier.layoutLocation + 1); TRange componentRange2(0, 1); - TIoRange range2(locationRange2, componentRange2, type.getBasicType(), 0); + TIoRange range2(locationRange2, componentRange2, type.getBasicType(), 0, qualifier.centroid, qualifier.smooth, qualifier.flat); // check for collisions collision = checkLocationRange(set, range2, type, typeCollision); @@ -1725,7 +1725,7 @@ int TIntermediate::addUsedLocation(const TQualifier& qualifier, const TType& typ TBasicType basicTy = type.getBasicType(); if (basicTy == EbtSampler && type.getSampler().isAttachmentEXT()) basicTy = type.getSampler().type; - TIoRange range(locationRange, componentRange, basicTy, qualifier.hasIndex() ? qualifier.getIndex() : 0); + TIoRange range(locationRange, componentRange, basicTy, qualifier.hasIndex() ? qualifier.getIndex() : 0, qualifier.centroid, qualifier.smooth, qualifier.flat); // check for collisions, except for vertex inputs on desktop targeting OpenGL if (! (!isEsProfile() && language == EShLangVertex && qualifier.isPipeInput()) || spvVersion.vulkan > 0) @@ -1748,7 +1748,11 @@ int TIntermediate::checkLocationRange(int set, const TIoRange& range, const TTyp if (range.overlap(usedIo[set][r])) { // there is a collision; pick one return std::max(range.location.start, usedIo[set][r].location.start); - } else if (range.location.overlap(usedIo[set][r].location) && type.getBasicType() != usedIo[set][r].basicType) { + } else if (range.location.overlap(usedIo[set][r].location) && + (type.getBasicType() != usedIo[set][r].basicType || + type.getQualifier().centroid != usedIo[set][r].centroid || + type.getQualifier().smooth != usedIo[set][r].smooth || + type.getQualifier().flat != usedIo[set][r].flat)) { // aliased-type mismatch typeCollision = true; return std::max(range.location.start, usedIo[set][r].location.start); diff --git a/third_party/vulkan-deps/glslang/src/glslang/MachineIndependent/localintermediate.h b/third_party/vulkan-deps/glslang/src/glslang/MachineIndependent/localintermediate.h index b453b14648..5e97147802 100644 --- a/third_party/vulkan-deps/glslang/src/glslang/MachineIndependent/localintermediate.h +++ b/third_party/vulkan-deps/glslang/src/glslang/MachineIndependent/localintermediate.h @@ -123,8 +123,10 @@ struct TRange { // within the same location range, component range, and index value. Locations don't alias unless // all other dimensions of their range overlap. struct TIoRange { - TIoRange(TRange location, TRange component, TBasicType basicType, int index) - : location(location), component(component), basicType(basicType), index(index) { } + TIoRange(TRange location, TRange component, TBasicType basicType, int index, bool centroid, bool smooth, bool flat) + : location(location), component(component), basicType(basicType), index(index), centroid(centroid), smooth(smooth), flat(flat) + { + } bool overlap(const TIoRange& rhs) const { return location.overlap(rhs.location) && component.overlap(rhs.component) && index == rhs.index; @@ -133,6 +135,9 @@ struct TIoRange { TRange component; TBasicType basicType; int index; + bool centroid; + bool smooth; + bool flat; }; // An offset range is a 2-D rectangle; the set of (binding, offset) pairs all lying @@ -1251,7 +1256,7 @@ protected: std::unordered_set<int> usedConstantId; // specialization constant ids used std::vector<TOffsetRange> usedAtomics; // sets of bindings used by atomic counters - std::vector<TIoRange> usedIo[4]; // sets of used locations, one for each of in, out, uniform, and buffers + std::vector<TIoRange> usedIo[5]; // sets of used locations, one for each of in, out, uniform, and buffers std::vector<TRange> usedIoRT[4]; // sets of used location, one for rayPayload/rayPayloadIN, // one for callableData/callableDataIn, one for hitObjectAttributeNV and // one for shaderrecordhitobjectNV diff --git a/third_party/vulkan-deps/glslang/src/gtests/AST.FromFile.cpp b/third_party/vulkan-deps/glslang/src/gtests/AST.FromFile.cpp index 7410f6ce14..6067e9b83c 100644 --- a/third_party/vulkan-deps/glslang/src/gtests/AST.FromFile.cpp +++ b/third_party/vulkan-deps/glslang/src/gtests/AST.FromFile.cpp @@ -306,6 +306,8 @@ INSTANTIATE_TEST_SUITE_P( "coord_conventions.frag", "gl_FragCoord.frag", "glsl.interpOp.error.frag", + "location_aliasing.tesc", + "location_aliasing1.frag", "GL_EXT_draw_instanced.vert", "overflow_underflow_toinf_0.frag", "GL_EXT_texture_array.frag", |