commit: faa898b2bd9899241fcb36e2473a6a539a6ebb24 Author: Michael Mair-Keimberger <mmk <AT> levelnine <DOT> at> AuthorDate: Fri Apr 25 15:36:43 2025 +0000 Commit: Conrad Kostecki <conikost <AT> gentoo <DOT> org> CommitDate: Sat Apr 26 20:38:56 2025 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=faa898b2
media-libs/osl: remove unused patch Signed-off-by: Michael Mair-Keimberger <mmk <AT> levelnine.at> Part-of: https://github.com/gentoo/gentoo/pull/41746 Signed-off-by: Conrad Kostecki <conikost <AT> gentoo.org> media-libs/osl/files/osl-1.12.14.0-libfmt11.patch | 431 ---------------------- 1 file changed, 431 deletions(-) diff --git a/media-libs/osl/files/osl-1.12.14.0-libfmt11.patch b/media-libs/osl/files/osl-1.12.14.0-libfmt11.patch deleted file mode 100644 index 6b0d7caead64..000000000000 --- a/media-libs/osl/files/osl-1.12.14.0-libfmt11.patch +++ /dev/null @@ -1,431 +0,0 @@ -From 62ab57dcaa96587c9c7d014571c4b83da1181090 Mon Sep 17 00:00:00 2001 -From: Larry Gritz <[email protected]> -Date: Mon, 13 Mar 2023 09:58:11 -0700 -Subject: [PATCH] oslc: simple constant folding of binary expressions on the - oslc side - -The runtime optimization does a great job of constant folding, and -we'd pushed it there because, with instance parameter values and -shader network connections known, it can find so much more opportunity -to optimize than we could in oslc. - -However, there is one pesky problem, which is that shader parameters -that are initialized to even simple expressions such as 3+1 end up -with "init ops", which although later constant folded by the time the -shader is JITed, make it impossible to know the value via OSLQuery. - -So this patch just takes the simplest cases -- certain `int OP int` -and `float OP float` expressions involving literal constants, and -performs the operation as it's parsing the code. So - - int val = 3 + 1; - -actually just immediately is turned into `val = 4` instead of making -an "add". - -To reiterate, the add would never have happened while executing the -shader -- at runtime in the renderer, when it's time to optimize and -JIT the shader, it would know it's a constant 4 value. This is -strictly about making oslc directly output an .oso file that knows -that parameter `val` has default value 4 instead of throwing up its -hands and saying "it's math code that will be evaluated later." - -Signed-off-by: Larry Gritz <[email protected]> ---- - src/cmake/testing.cmake | 1 + - src/liboslcomp/ast.cpp | 63 +++++++++++++++++++++++ - src/liboslcomp/ast.h | 4 ++ - src/liboslcomp/oslgram.y | 36 +++++++------- - testsuite/oslc-literalfold/ref/out.txt | 28 +++++++++++ - testsuite/oslc-literalfold/run.py | 7 +++ - testsuite/oslc-literalfold/test.osl | 69 ++++++++++++++++++++++++++ - 7 files changed, 190 insertions(+), 18 deletions(-) - create mode 100644 testsuite/oslc-literalfold/ref/out.txt - create mode 100755 testsuite/oslc-literalfold/run.py - create mode 100644 testsuite/oslc-literalfold/test.osl - -diff --git a/src/cmake/testing.cmake b/src/cmake/testing.cmake -index 0ae2c200e..3ce6f2a3d 100644 ---- a/src/cmake/testing.cmake -+++ b/src/cmake/testing.cmake -@@ -299,6 +299,7 @@ macro (osl_add_all_tests) - oslc-err-struct-dup oslc-err-struct-print - oslc-err-type-as-variable - oslc-err-unknown-ctr -+ oslc-literalfold - oslc-pragma-warnerr - oslc-warn-commainit - oslc-variadic-macro -diff --git a/src/liboslcomp/ast.cpp b/src/liboslcomp/ast.cpp -index 0ae74db48..74873e1c1 100644 ---- a/src/liboslcomp/ast.cpp -+++ b/src/liboslcomp/ast.cpp -@@ -1187,6 +1187,69 @@ ASTbinary_expression::ASTbinary_expression(OSLCompilerImpl* comp, Operator op, - - - -+ASTNode* -+ASTbinary_expression::make(OSLCompilerImpl* comp, Operator op, ASTNode* left, -+ ASTNode* right) -+{ -+ // If the left and right are both literal constants, fold the expression -+ if (left->nodetype() == literal_node && right->nodetype() == literal_node) { -+ ASTNode* cf = nullptr; // constant-folded result -+ if (left->typespec().is_int() && right->typespec().is_int()) { -+ int lv = dynamic_cast<ASTliteral*>(left)->intval(); -+ int rv = dynamic_cast<ASTliteral*>(right)->intval(); -+ switch (op) { -+ case Mul: cf = new ASTliteral(comp, lv * rv); break; -+ case Div: cf = new ASTliteral(comp, rv ? lv / rv : 0); break; -+ case Add: cf = new ASTliteral(comp, lv + rv); break; -+ case Sub: cf = new ASTliteral(comp, lv - rv); break; -+ case Mod: cf = new ASTliteral(comp, rv ? lv % rv : 0); break; -+ case Equal: cf = new ASTliteral(comp, lv == rv ? 1 : 0); break; -+ case NotEqual: cf = new ASTliteral(comp, lv != rv ? 1 : 0); break; -+ case Greater: cf = new ASTliteral(comp, lv > rv ? 1 : 0); break; -+ case Less: cf = new ASTliteral(comp, lv < rv ? 1 : 0); break; -+ case GreaterEqual: -+ cf = new ASTliteral(comp, lv >= rv ? 1 : 0); -+ break; -+ case LessEqual: cf = new ASTliteral(comp, lv <= rv ? 1 : 0); break; -+ case BitAnd: cf = new ASTliteral(comp, lv & rv); break; -+ case BitOr: cf = new ASTliteral(comp, lv | rv); break; -+ case Xor: cf = new ASTliteral(comp, lv ^ rv); break; -+ case ShiftLeft: cf = new ASTliteral(comp, lv << rv); break; -+ case ShiftRight: cf = new ASTliteral(comp, lv >> rv); break; -+ default: break; -+ } -+ } else if (left->typespec().is_float() -+ && right->typespec().is_float()) { -+ float lv = dynamic_cast<ASTliteral*>(left)->floatval(); -+ float rv = dynamic_cast<ASTliteral*>(right)->floatval(); -+ switch (op) { -+ case Mul: cf = new ASTliteral(comp, lv * rv); break; -+ case Div: cf = new ASTliteral(comp, rv ? lv / rv : 0.0f); break; -+ case Add: cf = new ASTliteral(comp, lv + rv); break; -+ case Sub: cf = new ASTliteral(comp, lv - rv); break; -+ case Equal: cf = new ASTliteral(comp, lv == rv ? 1 : 0); break; -+ case NotEqual: cf = new ASTliteral(comp, lv != rv ? 1 : 0); break; -+ case Greater: cf = new ASTliteral(comp, lv > rv ? 1 : 0); break; -+ case Less: cf = new ASTliteral(comp, lv < rv ? 1 : 0); break; -+ case GreaterEqual: -+ cf = new ASTliteral(comp, lv >= rv ? 1 : 0); -+ break; -+ case LessEqual: cf = new ASTliteral(comp, lv <= rv ? 1 : 0); break; -+ default: break; -+ } -+ } -+ if (cf) { -+ delete left; -+ delete right; -+ return cf; -+ } -+ } -+ -+ return new ASTbinary_expression(comp, op, left, right); -+} -+ -+ -+ - const char* - ASTbinary_expression::childname(size_t i) const - { -diff --git a/src/liboslcomp/ast.h b/src/liboslcomp/ast.h -index db9bd14e5..f4bd2eeec 100644 ---- a/src/liboslcomp/ast.h -+++ b/src/liboslcomp/ast.h -@@ -832,6 +832,10 @@ class ASTbinary_expression final : public ASTNode { - ASTbinary_expression(OSLCompilerImpl* comp, Operator op, ASTNode* left, - ASTNode* right); - -+ // Special consructor wrapper that can collapse ops between literals -+ static ASTNode* make(OSLCompilerImpl* comp, Operator op, ASTNode* left, -+ ASTNode* right); -+ - const char* nodetypename() const { return "binary_expression"; } - const char* childname(size_t i) const; - const char* opname() const; -diff --git a/src/liboslcomp/oslgram.y b/src/liboslcomp/oslgram.y -index b65818193..b4f3ad2e1 100644 ---- a/src/liboslcomp/oslgram.y -+++ b/src/liboslcomp/oslgram.y -@@ -858,109 +858,109 @@ variable_ref - binary_expression - : expression OR_OP expression - { -- $$ = new ASTbinary_expression (oslcompiler, -+ $$ = ASTbinary_expression::make(oslcompiler, - ASTNode::Or, $1, $3); - $$->sourceline (@2.first_line); - } - | expression AND_OP expression - { -- $$ = new ASTbinary_expression (oslcompiler, -+ $$ = ASTbinary_expression::make(oslcompiler, - ASTNode::And, $1, $3); - $$->sourceline (@2.first_line); - } - | expression '|' expression - { -- $$ = new ASTbinary_expression (oslcompiler, -+ $$ = ASTbinary_expression::make(oslcompiler, - ASTNode::BitOr, $1, $3); - $$->sourceline (@2.first_line); - } - | expression '^' expression - { -- $$ = new ASTbinary_expression (oslcompiler, -+ $$ = ASTbinary_expression::make(oslcompiler, - ASTNode::Xor, $1, $3); - $$->sourceline (@2.first_line); - } - | expression '&' expression - { -- $$ = new ASTbinary_expression (oslcompiler, -+ $$ = ASTbinary_expression::make(oslcompiler, - ASTNode::BitAnd, $1, $3); - $$->sourceline (@2.first_line); - } - | expression EQ_OP expression - { -- $$ = new ASTbinary_expression (oslcompiler, -+ $$ = ASTbinary_expression::make(oslcompiler, - ASTNode::Equal, $1, $3); - $$->sourceline (@2.first_line); - } - | expression NE_OP expression - { -- $$ = new ASTbinary_expression (oslcompiler, -+ $$ = ASTbinary_expression::make(oslcompiler, - ASTNode::NotEqual, $1, $3); - $$->sourceline (@2.first_line); - } - | expression '>' expression - { -- $$ = new ASTbinary_expression (oslcompiler, -+ $$ = ASTbinary_expression::make(oslcompiler, - ASTNode::Greater, $1, $3); - $$->sourceline (@2.first_line); - } - | expression GE_OP expression - { -- $$ = new ASTbinary_expression (oslcompiler, -+ $$ = ASTbinary_expression::make(oslcompiler, - ASTNode::GreaterEqual, $1, $3); - $$->sourceline (@2.first_line); - } - | expression '<' expression - { -- $$ = new ASTbinary_expression (oslcompiler, -+ $$ = ASTbinary_expression::make(oslcompiler, - ASTNode::Less, $1, $3); - $$->sourceline (@2.first_line); - } - | expression LE_OP expression - { -- $$ = new ASTbinary_expression (oslcompiler, -+ $$ = ASTbinary_expression::make(oslcompiler, - ASTNode::LessEqual, $1, $3); - $$->sourceline (@2.first_line); - } - | expression SHL_OP expression - { -- $$ = new ASTbinary_expression (oslcompiler, -+ $$ = ASTbinary_expression::make(oslcompiler, - ASTNode::ShiftLeft, $1, $3); - $$->sourceline (@2.first_line); - } - | expression SHR_OP expression - { -- $$ = new ASTbinary_expression (oslcompiler, -+ $$ = ASTbinary_expression::make(oslcompiler, - ASTNode::ShiftRight, $1, $3); - $$->sourceline (@2.first_line); - } - | expression '+' expression - { -- $$ = new ASTbinary_expression (oslcompiler, -+ $$ = ASTbinary_expression::make(oslcompiler, - ASTNode::Add, $1, $3); - $$->sourceline (@2.first_line); - } - | expression '-' expression - { -- $$ = new ASTbinary_expression (oslcompiler, -+ $$ = ASTbinary_expression::make(oslcompiler, - ASTNode::Sub, $1, $3); - $$->sourceline (@2.first_line); - } - | expression '*' expression - { -- $$ = new ASTbinary_expression (oslcompiler, -+ $$ = ASTbinary_expression::make(oslcompiler, - ASTNode::Mul, $1, $3); - $$->sourceline (@2.first_line); - } - | expression '/' expression - { -- $$ = new ASTbinary_expression (oslcompiler, -+ $$ = ASTbinary_expression::make(oslcompiler, - ASTNode::Div, $1, $3); - $$->sourceline (@2.first_line); - } - | expression '%' expression - { -- $$ = new ASTbinary_expression (oslcompiler, -+ $$ = ASTbinary_expression::make(oslcompiler, - ASTNode::Mod, $1, $3); - $$->sourceline (@2.first_line); - } -diff --git a/testsuite/oslc-literalfold/ref/out.txt b/testsuite/oslc-literalfold/ref/out.txt -new file mode 100644 -index 000000000..9397357ff ---- /dev/null -+++ b/testsuite/oslc-literalfold/ref/out.txt -@@ -0,0 +1,28 @@ -+Compiled test.osl -> test.oso -+int add_i = 8 -+int sub_i = 2 -+int mul_i = 15 -+int div_i = 1 -+int mod_i = 2 -+int eq_i = 0 -+int ne_i = 1 -+int gt_i = 1 -+int ge_i = 1 -+int lt_i = 0 -+int le_i = 0 -+int and_i = 1 -+int or_i = 7 -+int xor_i = 6 -+int shl_i = 40 -+int shr_i = 0 -+float add_f = 8.000000 -+float sub_f = 2.000000 -+float mul_f = 15.000000 -+float div_f = 1.666667 -+float eq_f = 0 -+float ne_f = 1 -+float gt_f = 1 -+float ge_f = 1 -+float lt_f = 0 -+float le_f = 0 -+ -diff --git a/testsuite/oslc-literalfold/run.py b/testsuite/oslc-literalfold/run.py -new file mode 100755 -index 000000000..6836d5554 ---- /dev/null -+++ b/testsuite/oslc-literalfold/run.py -@@ -0,0 +1,7 @@ -+#!/usr/bin/env python -+ -+# Copyright Contributors to the Open Shading Language project. -+# SPDX-License-Identifier: BSD-3-Clause -+# https://github.com/AcademySoftwareFoundation/OpenShadingLanguage -+ -+command = testshade("test") -diff --git a/testsuite/oslc-literalfold/test.osl b/testsuite/oslc-literalfold/test.osl -new file mode 100644 -index 000000000..0f1b09e36 ---- /dev/null -+++ b/testsuite/oslc-literalfold/test.osl -@@ -0,0 +1,69 @@ -+// Copyright Contributors to the Open Shading Language project. -+// SPDX-License-Identifier: BSD-3-Clause -+// https://github.com/AcademySoftwareFoundation/OpenShadingLanguage -+ -+// Test oslc-side constant folding of simple binary operators on literal -+// values -+ -+#define three 3 -+#define five 5 -+ -+ -+shader test( -+ int add_i = five + three, -+ int sub_i = five - three, -+ int mul_i = five * three, -+ int div_i = five / three, -+ int mod_i = five % three, -+ int eq_i = five == three, -+ int ne_i = five != three, -+ int gt_i = five > three, -+ int ge_i = five >= three, -+ int lt_i = five < three, -+ int le_i = five <= three, -+ int and_i = five & three, -+ int or_i = five | three, -+ int xor_i = five ^ three, -+ int shl_i = five << three, -+ int shr_i = five >> three, -+ -+ float add_f = float(five) + float(three), -+ float sub_f = float(five) - float(three), -+ float mul_f = float(five) * float(three), -+ float div_f = float(five) / float(three), -+ int eq_f = float(five) == float(three), -+ int ne_f = float(five) != float(three), -+ int gt_f = float(five) > float(three), -+ int ge_f = float(five) >= float(three), -+ int lt_f = float(five) < float(three), -+ int le_f = float(five) <= float(three), -+) -+{ -+ printf("int add_i = %d\n", add_i); -+ printf("int sub_i = %d\n", sub_i); -+ printf("int mul_i = %d\n", mul_i); -+ printf("int div_i = %d\n", div_i); -+ printf("int mod_i = %d\n", mod_i); -+ printf("int eq_i = %d\n", eq_i); -+ printf("int ne_i = %d\n", ne_i); -+ printf("int gt_i = %d\n", gt_i); -+ printf("int ge_i = %d\n", ge_i); -+ printf("int lt_i = %d\n", lt_i); -+ printf("int le_i = %d\n", le_i); -+ printf("int and_i = %d\n", and_i); -+ printf("int or_i = %d\n", or_i); -+ printf("int xor_i = %d\n", xor_i); -+ printf("int shl_i = %d\n", shl_i); -+ printf("int shr_i = %d\n", shr_i); -+ -+ printf("float add_f = %f\n", add_f); -+ printf("float sub_f = %f\n", sub_f); -+ printf("float mul_f = %f\n", mul_f); -+ printf("float div_f = %f\n", div_f); -+ printf("float eq_f = %d\n", eq_f); -+ printf("float ne_f = %d\n", ne_f); -+ printf("float gt_f = %d\n", gt_f); -+ printf("float ge_f = %d\n", ge_f); -+ printf("float lt_f = %d\n", lt_f); -+ printf("float le_f = %d\n", le_f); -+} -From 977f2898b10b9688c4bd65260884e1e477d29806 Mon Sep 17 00:00:00 2001 -From: Larry Gritz <[email protected]> -Date: Sun, 20 Aug 2023 21:36:59 -0700 -Subject: [PATCH] fix: Recent journaling changes break with some fmtlib - versions - -Certain fmt library versions don't automatically know how to format -atomics. Explicitly load them to turn into regular ints to avoid new -build errors introduced by the recent journaling changes. - -Signed-off-by: Larry Gritz <[email protected]> ---- - .github/workflows/ci.yml | 2 +- - src/liboslcomp/ast.cpp | 2 +- - src/liboslexec/journal.cpp | 6 +++--- - 3 files changed, 5 insertions(+), 5 deletions(-) - -diff --git a/src/liboslcomp/ast.cpp b/src/liboslcomp/ast.cpp -index 74873e1c1..a8e5d75e4 100644 ---- a/src/liboslcomp/ast.cpp -+++ b/src/liboslcomp/ast.cpp -@@ -46,7 +46,7 @@ ScopeExit print_node_counts([]() { - for (int i = 0; i < ASTNode::_last_node; ++i) - if (node_counts[i] > 0) - Strutil::print("ASTNode type {:2}: {:5} (peak {:5})\n", i, -- node_counts[i], node_counts_peak[i]); -+ node_counts[i].load(), node_counts_peak[i].load()); - }); - } // namespace - #endif
