New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
chore: cherry-pick 2 changes from 1-M124 #41982
Merged
+308
−0
Merged
Changes from all commits
Commits
Show all changes
2 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,2 @@ | ||
cherry-pick-a65e511a14b4.patch | ||
cherry-pick-bc18aec94c82.patch |
57 changes: 57 additions & 0 deletions
57
patches/DirectXShaderCompiler/cherry-pick-bc18aec94c82.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 | ||
From: Antonio Maiorano <amaiorano@google.com> | ||
Date: Thu, 18 Apr 2024 13:07:04 -0400 | ||
Subject: Replace dynamic_cast with virtual call (#6515) | ||
|
||
Make TextDiagnosticPrinter::setPrefix a virtual function in base class | ||
DiagnosticConsumer. This allows us to avoid using dynamic_cast in | ||
BackendConsumer::DxilDiagHandler, required for codebases that do not | ||
enable RTTI. This is also the only place in the codebase that uses RTTI | ||
(AFAICT). | ||
|
||
Bug: chromium:333420620 | ||
Change-Id: Ida73077f24fdb4b705b5d868b04ac6cfecb30327 | ||
Reviewed-on: https://chromium-review.googlesource.com/c/external/github.com/microsoft/DirectXShaderCompiler/+/5464347 | ||
Reviewed-by: dan sinclair <dsinclair@chromium.org> | ||
Reviewed-by: David Neto <dneto@google.com> | ||
|
||
diff --git a/tools/clang/include/clang/Basic/Diagnostic.h b/tools/clang/include/clang/Basic/Diagnostic.h | ||
index dc9f781c093c0bc8f6da773d514ac6d1503f842d..0b98dffb94185e242320409d43b74dae2c2a908d 100644 | ||
--- a/tools/clang/include/clang/Basic/Diagnostic.h | ||
+++ b/tools/clang/include/clang/Basic/Diagnostic.h | ||
@@ -1395,6 +1395,8 @@ public: | ||
/// warnings and errors. | ||
virtual void HandleDiagnostic(DiagnosticsEngine::Level DiagLevel, | ||
const Diagnostic &Info); | ||
+ | ||
+ virtual void setPrefix(std::string Value) {} // HLSL Change | ||
}; | ||
|
||
/// \brief A diagnostic client that ignores all diagnostics. | ||
diff --git a/tools/clang/include/clang/Frontend/TextDiagnosticPrinter.h b/tools/clang/include/clang/Frontend/TextDiagnosticPrinter.h | ||
index 04a570559fe06a0670ef8a7e6e94c40aa37e55a9..936031e09673a09c6e1164c515efce02ac51b910 100644 | ||
--- a/tools/clang/include/clang/Frontend/TextDiagnosticPrinter.h | ||
+++ b/tools/clang/include/clang/Frontend/TextDiagnosticPrinter.h | ||
@@ -45,7 +45,8 @@ public: | ||
/// setPrefix - Set the diagnostic printer prefix string, which will be | ||
/// printed at the start of any diagnostics. If empty, no prefix string is | ||
/// used. | ||
- void setPrefix(std::string Value) { Prefix = Value; } | ||
+ // HLSL Change: add override | ||
+ void setPrefix(std::string Value) override { Prefix = Value; } | ||
|
||
void BeginSourceFile(const LangOptions &LO, const Preprocessor *PP) override; | ||
void EndSourceFile() override; | ||
diff --git a/tools/clang/lib/CodeGen/CodeGenAction.cpp b/tools/clang/lib/CodeGen/CodeGenAction.cpp | ||
index 4fa721e812296356e31fc1bf6ea35ce295c2592c..68ebaadf5a8960c8def189248412136fe9543422 100644 | ||
--- a/tools/clang/lib/CodeGen/CodeGenAction.cpp | ||
+++ b/tools/clang/lib/CodeGen/CodeGenAction.cpp | ||
@@ -557,7 +557,7 @@ BackendConsumer::DxilDiagHandler(const llvm::DiagnosticInfoDxil &D) { | ||
|
||
// If no location information is available, add function name | ||
if (Loc.isInvalid()) { | ||
- auto *DiagClient = dynamic_cast<TextDiagnosticPrinter*>(Diags.getClient()); | ||
+ auto *DiagClient = Diags.getClient(); | ||
auto *func = D.getFunction(); | ||
if (DiagClient && func) | ||
DiagClient->setPrefix("Function: " + func->getName().str()); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,3 @@ | ||
m123_vulkan_fix_access_to_inactive_attributes.patch | ||
cherry-pick-f6672dbbe223.patch | ||
cherry-pick-ba3b4e239620.patch |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,249 @@ | ||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 | ||
From: Shahbaz Youssefi <syoussefi@chromium.org> | ||
Date: Mon, 8 Apr 2024 10:14:45 -0400 | ||
Subject: M123: SPIR-V: Fix const constructors with single scalar | ||
|
||
These constructors may be generated because of | ||
RemoveArrayLengthTraverser. | ||
|
||
Bug: chromium:332546345 | ||
Change-Id: I2b2bf3728ef5bae148abc2a8518f8f3f42850025 | ||
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5462388 | ||
(cherry picked from commit 0b776d32f69a932acb61963d9daad9e13f610944) | ||
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5473406 | ||
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> | ||
Reviewed-by: Geoff Lang <geofflang@chromium.org> | ||
Reviewed-by: Daniel Gagnon <dgagnon@google.com> | ||
|
||
diff --git a/src/compiler/translator/Compiler.cpp b/src/compiler/translator/Compiler.cpp | ||
index eddc5e724e8e949aff0624c6caf9aadec7c14647..57a71c5d13fbf5e458c26b084e1f9834edb37f58 100644 | ||
--- a/src/compiler/translator/Compiler.cpp | ||
+++ b/src/compiler/translator/Compiler.cpp | ||
@@ -1056,6 +1056,11 @@ bool TCompiler::checkAndSimplifyAST(TIntermBlock *root, | ||
{ | ||
return false; | ||
} | ||
+ // Fold the expressions again, because |RemoveArrayLengthMethod| can introduce new constants. | ||
+ if (!FoldExpressions(this, root, &mDiagnostics)) | ||
+ { | ||
+ return false; | ||
+ } | ||
|
||
if (!RemoveUnreferencedVariables(this, root, &mSymbolTable)) | ||
{ | ||
diff --git a/src/compiler/translator/spirv/OutputSPIRV.cpp b/src/compiler/translator/spirv/OutputSPIRV.cpp | ||
index caa8f956716abf53aaeb58a5f654f5a4f04c4d6a..67b1fdd4784660483a408f1ee27ce48b05ffcb0a 100644 | ||
--- a/src/compiler/translator/spirv/OutputSPIRV.cpp | ||
+++ b/src/compiler/translator/spirv/OutputSPIRV.cpp | ||
@@ -1335,6 +1335,8 @@ spirv::IdRef OutputSPIRVTraverser::createComplexConstant(const TType &type, | ||
|
||
if (type.isMatrix() && !type.isArray()) | ||
{ | ||
+ ASSERT(parameters.size() == type.getRows() * type.getCols()); | ||
+ | ||
// Matrices are constructed from their columns. | ||
spirv::IdRefList columnIds; | ||
|
||
diff --git a/src/tests/gl_tests/GLSLTest.cpp b/src/tests/gl_tests/GLSLTest.cpp | ||
index cfe6414d52647db92669be954cadd15344603559..a4035db329548491c91e2f7383f837001540c065 100644 | ||
--- a/src/tests/gl_tests/GLSLTest.cpp | ||
+++ b/src/tests/gl_tests/GLSLTest.cpp | ||
@@ -8486,6 +8486,198 @@ void main() | ||
EXPECT_PIXEL_COLOR_EQ(0, 0, GLColor::green); | ||
} | ||
|
||
+// Test that array length inside vector constructor works. | ||
+TEST_P(GLSLTest_ES3, ArrayLengthInVectorConstructor) | ||
+{ | ||
+ const char kVS[] = R"(#version 300 es | ||
+precision highp float; | ||
+flat out uvec4 v; | ||
+ | ||
+int[1] f0() | ||
+{ | ||
+ return int[1](1); | ||
+} | ||
+void main() | ||
+{ | ||
+ v = uvec4(vec4(f0().length())); | ||
+ | ||
+ gl_Position.x = ((gl_VertexID & 1) == 0 ? -1.0 : 1.0); | ||
+ gl_Position.y = ((gl_VertexID & 2) == 0 ? -1.0 : 1.0); | ||
+ gl_Position.zw = vec2(0, 1); | ||
+})"; | ||
+ | ||
+ const char kFS[] = R"(#version 300 es | ||
+precision highp float; | ||
+flat in uvec4 v; | ||
+out vec4 color; | ||
+ | ||
+bool isEq(uint a, float b) { return abs(float(a) - b) < 0.01; } | ||
+ | ||
+void main() | ||
+{ | ||
+ if (isEq(v[0], 1.) && | ||
+ isEq(v[1], 1.) && | ||
+ isEq(v[2], 1.) && | ||
+ isEq(v[3], 1.)) | ||
+ { | ||
+ color = vec4(0, 1, 0, 1); | ||
+ } | ||
+ else | ||
+ { | ||
+ color = vec4(1, 0, 0, 1); | ||
+ } | ||
+})"; | ||
+ | ||
+ ANGLE_GL_PROGRAM(program, kVS, kFS); | ||
+ glUseProgram(program); | ||
+ glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); | ||
+ EXPECT_PIXEL_COLOR_EQ(0, 0, GLColor::green); | ||
+} | ||
+ | ||
+// Test that array length inside vector constructor works in complex expression. | ||
+TEST_P(GLSLTest_ES3, ArrayLengthInVectorConstructorComplex) | ||
+{ | ||
+ const char kVS[] = R"(#version 300 es | ||
+precision highp float; | ||
+out vec4 v; | ||
+ | ||
+int[1] f0() | ||
+{ | ||
+ return int[1](1); | ||
+} | ||
+void main() | ||
+{ | ||
+ v = vec4(float(uint(f0().length()) + 1u) / 4.); | ||
+ | ||
+ gl_Position.x = ((gl_VertexID & 1) == 0 ? -1.0 : 1.0); | ||
+ gl_Position.y = ((gl_VertexID & 2) == 0 ? -1.0 : 1.0); | ||
+ gl_Position.zw = vec2(0, 1); | ||
+})"; | ||
+ | ||
+ const char kFS[] = R"(#version 300 es | ||
+precision highp float; | ||
+in vec4 v; | ||
+out vec4 color; | ||
+ | ||
+bool isEq(float a, float b) { return abs(float(a) - b) < 0.01; } | ||
+ | ||
+void main() | ||
+{ | ||
+ if (isEq(v[0], 0.5) && | ||
+ isEq(v[1], 0.5) && | ||
+ isEq(v[2], 0.5) && | ||
+ isEq(v[3], 0.5)) | ||
+ { | ||
+ color = vec4(0, 1, 0, 1); | ||
+ } | ||
+ else | ||
+ { | ||
+ color = vec4(1, 0, 0, 1); | ||
+ } | ||
+})"; | ||
+ | ||
+ ANGLE_GL_PROGRAM(program, kVS, kFS); | ||
+ glUseProgram(program); | ||
+ glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); | ||
+ EXPECT_PIXEL_COLOR_EQ(0, 0, GLColor::green); | ||
+} | ||
+ | ||
+// Test that array length inside matrix constructor works. | ||
+TEST_P(GLSLTest_ES3, ArrayLengthInMatrixConstructor) | ||
+{ | ||
+ const char kVS[] = R"(#version 300 es | ||
+precision highp float; | ||
+out mat2x2 v; | ||
+ | ||
+int[1] f0() | ||
+{ | ||
+ return int[1](1); | ||
+} | ||
+void main() | ||
+{ | ||
+ v = mat2x2(f0().length()); | ||
+ | ||
+ gl_Position.x = ((gl_VertexID & 1) == 0 ? -1.0 : 1.0); | ||
+ gl_Position.y = ((gl_VertexID & 2) == 0 ? -1.0 : 1.0); | ||
+ gl_Position.zw = vec2(0, 1); | ||
+})"; | ||
+ | ||
+ const char kFS[] = R"(#version 300 es | ||
+precision highp float; | ||
+in mat2x2 v; | ||
+out vec4 color; | ||
+ | ||
+bool isEq(float a, float b) { return abs(a - b) < 0.01; } | ||
+ | ||
+void main() | ||
+{ | ||
+ if (isEq(v[0][0], 1.) && | ||
+ isEq(v[0][1], 0.) && | ||
+ isEq(v[1][0], 0.) && | ||
+ isEq(v[1][1], 1.)) | ||
+ { | ||
+ color = vec4(0, 1, 0, 1); | ||
+ } | ||
+ else | ||
+ { | ||
+ color = vec4(1, 0, 0, 1); | ||
+ } | ||
+})"; | ||
+ | ||
+ ANGLE_GL_PROGRAM(program, kVS, kFS); | ||
+ glUseProgram(program); | ||
+ glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); | ||
+ EXPECT_PIXEL_COLOR_EQ(0, 0, GLColor::green); | ||
+} | ||
+ | ||
+// Test that array length inside vector constructor inside matrix constructor works. | ||
+TEST_P(GLSLTest_ES3, ArrayLengthInVectorInMatrixConstructor) | ||
+{ | ||
+ const char kVS[] = R"(#version 300 es | ||
+precision highp float; | ||
+out mat2x2 v; | ||
+ | ||
+int[1] f0() | ||
+{ | ||
+ return int[1](1); | ||
+} | ||
+void main() | ||
+{ | ||
+ v = mat2x2(vec2(f0().length()), f0().length(), 0); | ||
+ | ||
+ gl_Position.x = ((gl_VertexID & 1) == 0 ? -1.0 : 1.0); | ||
+ gl_Position.y = ((gl_VertexID & 2) == 0 ? -1.0 : 1.0); | ||
+ gl_Position.zw = vec2(0, 1); | ||
+})"; | ||
+ | ||
+ const char kFS[] = R"(#version 300 es | ||
+precision highp float; | ||
+in mat2x2 v; | ||
+out vec4 color; | ||
+ | ||
+bool isEq(float a, float b) { return abs(a - b) < 0.01; } | ||
+ | ||
+void main() | ||
+{ | ||
+ if (isEq(v[0][0], 1.) && | ||
+ isEq(v[0][1], 1.) && | ||
+ isEq(v[1][0], 1.) && | ||
+ isEq(v[1][1], 0.)) | ||
+ { | ||
+ color = vec4(0, 1, 0, 1); | ||
+ } | ||
+ else | ||
+ { | ||
+ color = vec4(1, 0, 0, 1); | ||
+ } | ||
+})"; | ||
+ | ||
+ ANGLE_GL_PROGRAM(program, kVS, kFS); | ||
+ glUseProgram(program); | ||
+ glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); | ||
+ EXPECT_PIXEL_COLOR_EQ(0, 0, GLColor::green); | ||
+} | ||
+ | ||
// Test that statements inside switch() get translated to correct HLSL. | ||
TEST_P(GLSLTest_ES3, DifferentStatementsInsideSwitch) | ||
{ |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
patches/DirectXShaderCompiler/.patches