aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandroid-autoroll <android-autoroll@skia-public.iam.gserviceaccount.com>2024-04-29 20:05:39 +0000
committerandroid-autoroll <android-autoroll@skia-public.iam.gserviceaccount.com>2024-04-29 20:05:39 +0000
commit1db21666b6905e95392de6a45395cdd2c7512089 (patch)
tree1374bfac6b2bc8de860505edd283f3bdf9626fc7
parent0a8f7833f86cdb3a5572b0d1796bb4bbbf451eb3 (diff)
parentf51f2bc55b1f8aa2ef8bd9539adcefcadbe91bb9 (diff)
downloadangle-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
-rw-r--r--DEPS2
-rw-r--r--scripts/code_generation_hashes/GL_EGL_entry_points.json6
-rwxr-xr-xscripts/generate_entry_points.py30
-rw-r--r--src/libANGLE/renderer/gl/egl/ImageEGL.cpp19
-rw-r--r--src/libANGLE/renderer/gl/egl/SurfaceEGL.cpp31
-rw-r--r--src/libANGLE/renderer/gl/egl/SyncEGL.cpp43
-rw-r--r--src/libGLESv2/entry_points_egl_autogen.cpp10
-rw-r--r--src/libGLESv2/entry_points_egl_ext_autogen.cpp10
-rw-r--r--third_party/vulkan-deps/DEPS8
-rw-r--r--third_party/vulkan-deps/glslang/src/.github/workflows/continuous_integration.yml12
-rw-r--r--third_party/vulkan-deps/glslang/src/.github/workflows/scorecard.yml4
-rw-r--r--third_party/vulkan-deps/glslang/src/Test/baseResults/440.frag.out2
-rw-r--r--third_party/vulkan-deps/glslang/src/Test/baseResults/440.vert.out7
-rw-r--r--third_party/vulkan-deps/glslang/src/Test/baseResults/location_aliasing.tesc.out33
-rw-r--r--third_party/vulkan-deps/glslang/src/Test/baseResults/location_aliasing1.frag.out27
-rw-r--r--third_party/vulkan-deps/glslang/src/Test/baseResults/spv.ext.ShaderTileImage.typemismatch.frag.out2
-rw-r--r--third_party/vulkan-deps/glslang/src/Test/location_aliasing.tesc15
-rw-r--r--third_party/vulkan-deps/glslang/src/Test/location_aliasing1.frag10
-rw-r--r--third_party/vulkan-deps/glslang/src/glslang/MachineIndependent/ParseHelper.cpp8
-rw-r--r--third_party/vulkan-deps/glslang/src/glslang/MachineIndependent/linkValidate.cpp12
-rw-r--r--third_party/vulkan-deps/glslang/src/glslang/MachineIndependent/localintermediate.h11
-rw-r--r--third_party/vulkan-deps/glslang/src/gtests/AST.FromFile.cpp2
22 files changed, 224 insertions, 80 deletions
diff --git a/DEPS b/DEPS
index 7fc36ad359..1fd49427d0 100644
--- a/DEPS
+++ b/DEPS
@@ -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",