From b268c8236a634fd7171651334cdb9d6239fe89a8 Mon Sep 17 00:00:00 2001 From: Beq Date: Mon, 7 Oct 2024 17:24:47 +0100 Subject: [PATCH 01/21] FIRE-34564 - bugsplat assertion mismatched locks in snapshot relax the lock on the filter. --- indra/llimage/llimagefilter.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/llimage/llimagefilter.cpp b/indra/llimage/llimagefilter.cpp index 1703e30dbe..da3519e3ab 100644 --- a/indra/llimage/llimagefilter.cpp +++ b/indra/llimage/llimagefilter.cpp @@ -88,7 +88,7 @@ void LLImageFilter::executeFilter(LLPointer raw_image) { mImage = raw_image; - LLImageDataLock lock(mImage); + LLImageDataSharedLock lock(mImage); // FIRE-34564 Bugsplat SHARED vs EXCLUSIVE lock conflict //std::cout << "Filter : size = " << mFilterData.size() << std::endl; for (S32 i = 0; i < mFilterData.size(); ++i) From bb04827291f67505a576572ab3d249b302526c3a Mon Sep 17 00:00:00 2001 From: Beq Date: Mon, 7 Oct 2024 17:28:03 +0100 Subject: [PATCH 02/21] Attempt to identify AVX2 (in)capable CPUs and divert to other build Includes initial AI translations for all supported languages, these may need revising --- indra/newview/CMakeLists.txt | 6 +++ indra/newview/fs_viewer_manifest.py | 9 +++- .../installers/windows/installer_template.nsi | 44 +++++++++++++++++- indra/newview/installers/windows/lang_de.nsi | 2 + .../newview/installers/windows/lang_en-us.nsi | Bin 15250 -> 16212 bytes indra/newview/installers/windows/lang_es.nsi | Bin 15460 -> 16412 bytes indra/newview/installers/windows/lang_fr.nsi | Bin 16204 -> 17256 bytes indra/newview/installers/windows/lang_it.nsi | Bin 15188 -> 16050 bytes indra/newview/installers/windows/lang_ja.nsi | Bin 13336 -> 14044 bytes indra/newview/installers/windows/lang_pl.nsi | Bin 15552 -> 16436 bytes indra/newview/installers/windows/lang_ru.nsi | Bin 15392 -> 16364 bytes indra/newview/viewer_manifest.py | 3 ++ 12 files changed, 62 insertions(+), 2 deletions(-) diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index f8300069ac..ef11a84b67 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -2252,6 +2252,7 @@ if (WINDOWS) "--fmodstudio=${USE_FMODSTUDIO}" "--openal=${USE_OPENAL}" "--tracy=${USE_TRACY}" + "--avx2=${USE_AVX2_OPTIMIZATION}" --build=${CMAKE_CURRENT_BINARY_DIR} --buildtype=$ "--channel=${VIEWER_CHANNEL}" @@ -2315,6 +2316,7 @@ if (WINDOWS) "--fmodstudio=${USE_FMODSTUDIO}" "--openal=${USE_OPENAL}" "--tracy=${USE_TRACY}" + "--avx2=${USE_AVX2_OPTIMIZATION}" --build=${CMAKE_CURRENT_BINARY_DIR} --buildtype=$ "--channel=${VIEWER_CHANNEL}" @@ -2500,6 +2502,7 @@ if (LINUX) "--fmodstudio=${USE_FMODSTUDIO}" "--openal=${USE_OPENAL}" "--tracy=${USE_TRACY}" + "--avx2=${USE_AVX2_OPTIMIZATION}" --build=${CMAKE_CURRENT_BINARY_DIR} --buildtype=${CMAKE_BUILD_TYPE} "--channel=${VIEWER_CHANNEL}" @@ -2527,6 +2530,7 @@ if (LINUX) "--fmodstudio=${USE_FMODSTUDIO}" "--openal=${USE_OPENAL}" "--tracy=${USE_TRACY}" + "--avx2=${USE_AVX2_OPTIMIZATION}" --build=${CMAKE_CURRENT_BINARY_DIR} --buildtype=${CMAKE_BUILD_TYPE} "--channel=${VIEWER_CHANNEL}" @@ -2622,6 +2626,7 @@ if (DARWIN) "--fmodstudio=${USE_FMODSTUDIO}" "--openal=${USE_OPENAL}" "--tracy=${USE_TRACY}" + "--avx2=${USE_AVX2_OPTIMIZATION}" --build=${CMAKE_CURRENT_BINARY_DIR} --buildtype=$ --bundleid=${MACOSX_BUNDLE_GUI_IDENTIFIER} @@ -2659,6 +2664,7 @@ if (DARWIN) "--fmodstudio=${USE_FMODSTUDIO}" "--openal=${USE_OPENAL}" "--tracy=${USE_TRACY}" + "--avx2=${USE_AVX2_OPTIMIZATION}" --build=${CMAKE_CURRENT_BINARY_DIR} --buildtype=${CMAKE_BUILD_TYPE} "--channel=${VIEWER_CHANNEL}" diff --git a/indra/newview/fs_viewer_manifest.py b/indra/newview/fs_viewer_manifest.py index d6666d0fef..8093f9d3f6 100644 --- a/indra/newview/fs_viewer_manifest.py +++ b/indra/newview/fs_viewer_manifest.py @@ -4,18 +4,25 @@ import tarfile class FSViewerManifest: def fs_installer_basename(self): + if self.fs_is_avx2(): + opt_string = "AVX2" + else: + opt_string = "LEGACY" substitution_strings = { 'version' : '.'.join(self.args['version']), 'version_short' : '.'.join(self.args['version'][:-1]), 'version_dashes' : '-'.join(self.args['version']), 'app_name':self.app_name(), + 'optimized': opt_string, 'app_name_oneword':self.app_name_oneword() } - return "Phoenix-%(app_name)s-%(version_dashes)s" % substitution_strings + return "Phoenix-%(app_name)s_%(optimized)s-%(version_dashes)s" % substitution_strings def fs_is_opensim(self): return self.args['viewer_flavor'] == 'oss' #Havok would be hvk + def fs_is_avx2(self): + return self.args['avx2'] == 'ON' def fs_splice_grid_substitution_strings( self, subst_strings ): ret = subst_strings diff --git a/indra/newview/installers/windows/installer_template.nsi b/indra/newview/installers/windows/installer_template.nsi index bb62d35b1d..e0c515917b 100644 --- a/indra/newview/installers/windows/installer_template.nsi +++ b/indra/newview/installers/windows/installer_template.nsi @@ -32,7 +32,7 @@ SetCompressor /solid lzma # Compress whole installer as one block SetDatablockOptimize off # Only saves us 0.1%, not worth it XPStyle on # Add an XP manifest to the installer RequestExecutionLevel admin # For when we write to Program Files -Unicode true # Enable unicode support +Unicode true # Enable unicode support ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Project flags @@ -181,6 +181,42 @@ Function dirPre FunctionEnd +; Add the AVX2 check functions +Function CheckCPUFlagsAVX2 + Push $1 + System::Call 'kernel32::IsProcessorFeaturePresent(i 40) i .r1' ; 40 is PF_AVX2_INSTRUCTIONS_AVAILABLE + IntCmp $1 1 OK_AVX2 + ; AVX2 not supported + MessageBox MB_OK $(MissingAVX2) + Quit + + OK_AVX2: + Pop $1 + Return +FunctionEnd + +Function CheckCPUFlagsAVX2_Prompt + Push $1 + System::Call 'kernel32::IsProcessorFeaturePresent(i 40) i .r1' ; 40 is PF_AVX2_INSTRUCTIONS_AVAILABLE + IntCmp $1 1 OK_AVX2 Not_AVX2 + + OK_AVX2: + MessageBox MB_YESNO $(AVX2Available) IDYES DownloadAVX2 IDNO ContinueInstall + DownloadAVX2: + ExecShell open 'https://www.firestormviewer.org/early-access-beta-downloads/' + Quit + ContinueInstall: + Goto End + + Not_AVX2: + ; CPU does not support AVX2, continue installation + Goto End + + End: + Pop $1 + Return +FunctionEnd + # Optional start menu entry ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Post-directory page callback @@ -224,6 +260,12 @@ ${If} $0 != "" ${EndIf} Call CheckCPUFlags # Make sure we have SSE2 support +${If} ${ISAVX2} == 1 + Call CheckCPUFlagsAVX2 +${Else} + Call CheckCPUFlagsAVX2_Prompt +${EndIf} + Call CheckWindowsVersion # Don't install On unsupported systems Push $0 ${GetParameters} $COMMANDLINE # Get our command line diff --git a/indra/newview/installers/windows/lang_de.nsi b/indra/newview/installers/windows/lang_de.nsi index 164f165f50..a11e4d505a 100755 --- a/indra/newview/installers/windows/lang_de.nsi +++ b/indra/newview/installers/windows/lang_de.nsi @@ -57,6 +57,8 @@ LangString CheckAdministratorUnInstMB ${LANG_GERMAN} 'Sie besitzen ungenügende ; checkcpuflags LangString MissingSSE2 ${LANG_GERMAN} "Dieser PC besitzt möglicherweise keinen Prozessor mit SSE2-Unterstützung, die für die Ausführung von Firestorm ${VERSION_LONG} benötigt wird. Trotzdem installieren?" +LangString MissingAVX2 ${LANG_GERMAN} "Ihre CPU unterstützt keine AVX2-Anweisungen. Bitte laden Sie die Version für ältere CPUs von https://www.firestormviewer.org/early-access-beta-downloads-legacy-cpus/ herunter." +LangString AVX2Available ${LANG_GERMAN} "Ihre CPU unterstützt AVX2-Anweisungen. Sie können die für AVX2 optimierte Version für eine bessere Leistung unter https://www.firestormviewer.org/early-access-beta-downloads/ herunterladen. Möchten Sie sie jetzt herunterladen?" ; closesecondlife function (install) LangString CloseSecondLifeInstDP ${LANG_GERMAN} "Warten auf die Beendigung von Firestorm ..." diff --git a/indra/newview/installers/windows/lang_en-us.nsi b/indra/newview/installers/windows/lang_en-us.nsi index c301aa0e4effca0443b3b3ef49d0096f99caa2a3..69cde24d32108fdb6e87e096a9bc92af7e9e6aba 100644 GIT binary patch delta 646 zcmbVK!AiqG6ddtTe?UA)!UoZrLo9f(2MX+6?CicyKc3&_Zg(FFM|eVk7$ZddM?^Hnc(n5^5sf?KjJDCk z1un4*-*}GSDkF2&+I+b}%8HDvL-cXZIU*9SM@0A)~nLI%RH1MrgGbpvEnxgmyzvW5%eGF(I0<*tRrZ?UPe!mXSR}VA-0C zoFl-1tAbcy#n-oyY`uR_T9l(>mX@8>>L@)-Sf7v^VqiX3{9lY|+91YO)qfkYuvji9 zqyYlzic%XQWJrF-;S{JiHkXHssrVF}}Fdn2kmzPyCYcx&tCyM5gKpIIGq;BGkb R0-6F7YEcwV{Qbf8oF6jTe!c(z delta 16 YcmcaoH>rF>mE7casy3S|l4b?pfZ`jJ+z6{1kOXR_WLZ?h>@g@J9SP^Sh9$9q4h9c3hcNcW^3W zX9LSn1zOI)WMb8D;#=;5>+3R8M}H3RoJgp#$UtwNP7z_q9?K#>mj2<=fA~{`jw&>I z+}`@-R*)=_h|F|bkju6-FfL_FY~;6ng9e7N77VdL%Rj|Jw1b@jhAN%F7Dg<2Tk&~0 z(#DPAi;bsA$f1k? delta 75 zcmbQ!!1$zMgOL2>8%n-QS3nS=@r5^%C~6YLKmwwL*rl;D2DMq^qJij!>?WdxWqO%X3kxe7 zg>9^SG&WkOrC(rvAcd7@uCKxeD7UzC&pmTy=FIKxQ^h!aP<-tR@N&PeafZ^Ap$Xpe zhm$tBR3wWO6>!^>MeN{MRKi=)=Et9fcvbUEa`>d9b3U)RigNgIv`z{6F5b3A6uniV z81m9uGe>zGi*|sxR7G4x&N`W>wg$Y&_x>(k>}yGy(8xkd>N>ja*Zu@w1*3p&bDA~D z;nCSSOY7xno1%!aIImMhX$6rBEQ&mvwxFHIZQ|tslg`$3hGb^7u0vyd{(P~ zx8j@v%hJ zF?qHMuS8cM>hLVsan3Rc9&TrkD(aj8MptYJoQ~YbZ`YBd zj_Pbm^Q%7`7+02|HuxG?K}CM@CU5`lfA+p}$Z9Gz>?s8-)GpPN8n#vEHYk$|0Z+k1 zS50{5m>mqEx|}F9u6`1cWEHnb?WM+YM`n<(BBtJCq^g)r)wFuc{J%Z@^doB!d>8#< zcO=B!*d{NA;(WH^bKKgsi{J6v_1EM480+zUbf0&_DL@hDbE7lQFLOa2BzByBd_j@U OAklTXd`=_zw)_oE!pP~f~OBMT$%#D|iT4YYMOi)gU` XrGdQ72HNu&S$P?_7=TK29t#2hJhByb diff --git a/indra/newview/installers/windows/lang_ja.nsi b/indra/newview/installers/windows/lang_ja.nsi index 8322d86f8125060c471638192a90f661607091ae..b0d8958984fd211507faff46775c9e5b02a8fc64 100755 GIT binary patch delta 576 zcmbVIO(=r_7=AYWs_~RBJ({t?66W~2a!$wmxJFKnQz+sXu6dSE}kB@pOL;;#6yP$p9e^$8l6 zo1F$ID0)p)LD>hAY(Q9l(vfiX%jXHXt30n7^S^S`(4;7a#n&s}0vyr*HM3U|FJc+j zTP|GU3VV|6Rx%z-_KofpbYmVP(0w;Y{^7N}mb%cd&16b7el$v*UO3rct@Zw|0F^4F z)N{8NO+RW+d~QI|hn3$Ae bHA{KaZBEniV2%>iEZaJE*h->~;`{7REI_Pa delta 87 zcmcbUJ0oL*jMU_JGPf9cCqI<4pUftA2h4g7Bwx$ePBswNoBT&kX0x9{8xv6IBdg@* jH%dl~5a#4JN;;d9R7x0Gc^SAEcqjkXP~QAY^^pJoya6AS diff --git a/indra/newview/installers/windows/lang_pl.nsi b/indra/newview/installers/windows/lang_pl.nsi index 2a8ea7ef1da7d929506a4c4770e02d1ba23342ad..3356eed567c5c3a51dcf196642255339fcc7925c 100644 GIT binary patch delta 785 zcmbVKJxjw-6um)I5G74Y~K`oOACz@4fiXcgoYM#)lDg#UuyEB#W-;h%Tu}dwgRi z-oGG^##ARpEozfZWvT*aBWA#w$QZH`YR8HTt_!TF2_=U*z`4`_tBwkrDpMNqx#S6j zHg%DEGID^7DvT=BB!gI5iWq=60QnHA0s4KEF~|)6v;0-hpH)F@gYHubQ8^shK~_SG z4r(dL+u&G0*~lwUPa&>i0l^T=GP<~^XZT}eEgD*a1#W>bGpnIkNl_7LWr zVy>PdtQOX^q*ZNno`*GEWG(FB(+w(3GW)XRA+cx{fUizYWs?vxV1bXX3x*HzMkpy( zZ^>p8z7ITOUTP<7%Z=am-Tb$y4A}X diff --git a/indra/newview/installers/windows/lang_ru.nsi b/indra/newview/installers/windows/lang_ru.nsi index 3f75a5b5806f0ccdbece65b11e7c38c1115de3ac..c7bb70ad02e5106f57ee501d6baaae72cd2bf90a 100755 GIT binary patch delta 728 zcmbVKOD_Xa6h6bT!A6NrwP~ggX^GNI45Rv*HXaGl*odW~kw$}f+qAK_k+T)yACUPQ zHWKkG*oZyf3?iZnk(2v6-#Pc3@4NTv_^EO88k9#nnMKm%wgL46BkyF4;nD&)V!=y<`^;IokNuI%&K&*iX9djO; zCNJPL%9C8eT6FJ90x?)eU6ZHa{Z$+Fb=RN8?DR8-{1kFhayn2fRj5q6RHGA0V7CUV zxZD!7irqeZ30kLZIs(@k)-q0e@YR5BxEW678tu>l{3CMT2PlKQ;aA zI6&X>=G>GyG;1Kq9at@{B(3S a8)>sZRBZOsna9Y=%fQ9JyZNo|e?b5qNE{si diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index 375fc4d2e2..515cdd75fd 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -951,6 +951,7 @@ class Windows_x86_64_Manifest(ViewerManifest): substitution_strings['installer_file'] = installer_file substitution_strings['is64bit'] = (1 if (self.address_size == 64) else 0) + substitution_strings['isavx2'] = (1 if (self.fs_is_avx2) else 0) substitution_strings['is_opensim'] = self.fs_is_opensim() # FIRE-30446: Register hop-protocol for OS version only substitution_strings['friendly_app_name'] = self.friendly_app_name() # FIRE-30446: Set FriendlyAppName for protocol registrations substitution_strings['icon_suffix'] = ("_os" if (self.fs_is_opensim()) else "") # FIRE-24335: Use different icon for OpenSim version @@ -975,6 +976,7 @@ class Windows_x86_64_Manifest(ViewerManifest): !define SHORTCUT "%(app_name)s" !define URLNAME "secondlife" !define IS64BIT "%(is64bit)d" + !define ISAVX2 "%(isavx2)d" !define ISOPENSIM "%(is_opensim)d" !define APPNAME "%(friendly_app_name)s" !define ICON_SUFFIX "%(icon_suffix)s" @@ -2454,6 +2456,7 @@ if __name__ == "__main__": dict(name='fmodstudio', description="""Indication if fmod studio libraries are needed""", default='OFF'), dict(name='openal', description="""Indication openal libraries are needed""", default='OFF'), dict(name='tracy', description="""Indication tracy profiler is enabled""", default='OFF'), + dict(name='avx2', description="""Indication avx2 instruction set is enabled""", default='OFF'), ] try: main(extra=extra_arguments) From bccf19778c63676fc71fb32c4f153167ace00310 Mon Sep 17 00:00:00 2001 From: Beq Date: Mon, 7 Oct 2024 17:29:24 +0100 Subject: [PATCH 03/21] FIRE-34509 - Add camera roll to overlooked cameratools floater Why do we have so many camera tools/phototools, camera floater variants? --- .../xui/en/floater_phototools_camera.xml | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/indra/newview/skins/default/xui/en/floater_phototools_camera.xml b/indra/newview/skins/default/xui/en/floater_phototools_camera.xml index 43214c138e..b0340a53f6 100644 --- a/indra/newview/skins/default/xui/en/floater_phototools_camera.xml +++ b/indra/newview/skins/default/xui/en/floater_phototools_camera.xml @@ -238,6 +238,36 @@ tool_tip="Orbit camera around focus" top="5" width="100"/> + + + +