From edc1ff5a9171e46119716ec4507da4f942f4add2 Mon Sep 17 00:00:00 2001 From: Beq Date: Sat, 22 Jun 2024 00:42:05 +0100 Subject: [PATCH 01/34] make the texturefetch thread less agressive for now --- indra/llcommon/llqueuedthread.cpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/indra/llcommon/llqueuedthread.cpp b/indra/llcommon/llqueuedthread.cpp index cfcc7a454b..c5646ef94b 100644 --- a/indra/llcommon/llqueuedthread.cpp +++ b/indra/llcommon/llqueuedthread.cpp @@ -427,11 +427,20 @@ void LLQueuedThread::processRequest(LLQueuedThread::QueuedRequest* req) if (req) { // Deferred retry requests - // Potentially when there is nothing else to do this will loop until the retry time. + // Avoid loop when idle by restoring a sleep // note that when there is nothing to do the thread still sleeps normally. - if( req->mDeferUntil > LL::WorkQueue::TimePoint::clock::now() ) + using namespace std::chrono_literals; + + const auto throttle_time = 2ms; + if( req->mDeferUntil > LL::WorkQueue::TimePoint::clock::now()) + { + ms_sleep(throttle_time.count()); + } + // if we're still not ready to retry then requeue + if( req->mDeferUntil > LL::WorkQueue::TimePoint::clock::now()) { LL_PROFILE_ZONE_NAMED("qtpr - defer requeue"); + lockData(); req->setStatus(STATUS_QUEUED); mRequestQueue.post([this, req]() { processRequest(req); }); @@ -487,7 +496,6 @@ void LLQueuedThread::processRequest(LLQueuedThread::QueuedRequest* req) llassert(ret); #else using namespace std::chrono_literals; - auto retry_time = LL::WorkQueue::TimePoint::clock::now() + 2ms; // reduce delay on retry // improve retry behaviour // mRequestQueue.post([=] // { @@ -503,6 +511,8 @@ void LLQueuedThread::processRequest(LLQueuedThread::QueuedRequest* req) // } // processRequest(req); // }); + const auto retry_backoff = 16ms; + auto retry_time = LL::WorkQueue::TimePoint::clock::now() + retry_backoff; req->defer_until(retry_time); LL_PROFILE_ZONE_NAMED("processRequest - post deferred"); mRequestQueue.post([this, req]() { processRequest(req); }); From a278089a22bd9e81a131d00ecf0af7d0e3f689eb Mon Sep 17 00:00:00 2001 From: Ansariel Date: Sat, 22 Jun 2024 14:39:05 +0200 Subject: [PATCH 02/34] Increase texture discard bias if system memory gets low to prevent viewer memory getting paged to disk due to high VRAM usage (GL images are (still) backed by viewer textures in system memory!) --- indra/newview/app_settings/settings.xml | 11 ++++++ indra/newview/llviewertexture.cpp | 50 +++++++++++++++++++++++-- 2 files changed, 58 insertions(+), 3 deletions(-) diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 8e1009201b..196ff4e873 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -25420,5 +25420,16 @@ Change of this parameter will affect the layout of buttons in notification toast Value 1 + FSMinFreeMainMemoryTextureDiscardThreshold + + Comment + Minimum of available physical memory in MB before textures get scaled down + Persist + 1 + Type + S32 + Value + 512 + diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp index 4a7fc95ac4..377153a099 100644 --- a/indra/newview/llviewertexture.cpp +++ b/indra/newview/llviewertexture.cpp @@ -544,6 +544,29 @@ void LLViewerTexture::getGPUMemoryForTextures(S32Megabytes &gpu, S32Megabytes &p } } +// Restrict texture memory by available physical system memory +static bool isSystemMemoryForTextureLow() +{ + static LLFrameTimer timer; + static S32Megabytes physical_res = S32Megabytes(S32_MAX); + + static LLCachedControl fs_min_free_main_memory(gSavedSettings, "FSMinFreeMainMemoryTextureDiscardThreshold"); + const S32Megabytes MIN_FREE_MAIN_MEMORY(fs_min_free_main_memory); + + if (timer.getElapsedTimeF32() < GPU_MEMORY_CHECK_WAIT_TIME) //call this once per second. + { + return physical_res < MIN_FREE_MAIN_MEMORY; + } + + timer.reset(); + + //check main memory, only works for windows. + LLMemory::updateMemoryInfo(); + physical_res = LLMemory::getAvailableMemKB(); + return physical_res < MIN_FREE_MAIN_MEMORY; +} +// + //static void LLViewerTexture::updateClass() { @@ -573,12 +596,33 @@ void LLViewerTexture::updateClass() F32 target = llmax(budget - 512.f, 768.f); F32 over_pct = llmax((used-target) / target, 0.f); - sDesiredDiscardBias = llmax(sDesiredDiscardBias, 1.f + over_pct); + // Restrict texture memory by available physical system memory + //sDesiredDiscardBias = llmax(sDesiredDiscardBias, 1.f + over_pct); - if (sDesiredDiscardBias > 1.f) + //if (sDesiredDiscardBias > 1.f) + //{ + // sDesiredDiscardBias -= gFrameIntervalSeconds * 0.01; + //} + + if (isSystemMemoryForTextureLow()) { - sDesiredDiscardBias -= gFrameIntervalSeconds * 0.01; + // System RAM is low -> ramp up discard bias over time to free memory + if (sEvaluationTimer.getElapsedTimeF32() > GPU_MEMORY_CHECK_WAIT_TIME) + { + sDesiredDiscardBias += llmax(.1f, over_pct); // add at least 10% over-percentage + sEvaluationTimer.reset(); + } } + else + { + sDesiredDiscardBias = llmax(sDesiredDiscardBias, 1.f + over_pct); + + if (sDesiredDiscardBias > 1.f) + { + sDesiredDiscardBias -= gFrameIntervalSeconds * 0.01; + } + } + // LLViewerTexture::sFreezeImageUpdates = false; // sDesiredDiscardBias > (desired_discard_bias_max - 1.0f); } From aa049b0814f4a9ff51dce34df2780dcb2490faec Mon Sep 17 00:00:00 2001 From: Ansariel Date: Fri, 21 Jun 2024 12:56:57 +0200 Subject: [PATCH 03/34] Fix texture fetch request getting canceled if request counter flips over --- indra/llimage/llimageworker.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/indra/llimage/llimageworker.cpp b/indra/llimage/llimageworker.cpp index afa06b212e..05274dde43 100644 --- a/indra/llimage/llimageworker.cpp +++ b/indra/llimage/llimageworker.cpp @@ -98,6 +98,9 @@ LLImageDecodeThread::handle_t LLImageDecodeThread::decodeImage( LL_PROFILE_ZONE_SCOPED_CATEGORY_TEXTURE; U32 decode_id = ++mDecodeCount; + if (decode_id == 0) + decode_id = ++mDecodeCount; + // Instantiate the ImageRequest right in the lambda, why not? bool posted = mThreadPool->getQueue().post( [req = ImageRequest(image, discard, needs_aux, responder, decode_id)] From cf16839ed9c590a950e013dcd7156c5d76f1480d Mon Sep 17 00:00:00 2001 From: PanteraPolnocy Date: Sat, 22 Jun 2024 15:10:09 +0200 Subject: [PATCH 04/34] Properly show / hide reflection probes checkbox in built floater --- indra/newview/llfloatertools.cpp | 3 +++ indra/newview/llfloatertools.h | 1 + 2 files changed, 4 insertions(+) diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp index 925b2b9cdb..5f6fa6bd57 100644 --- a/indra/newview/llfloatertools.cpp +++ b/indra/newview/llfloatertools.cpp @@ -302,6 +302,7 @@ BOOL LLFloaterTools::postBuild() LLSelectMgr::instance().setFSShowHideHighlight(FS_SHOW_HIDE_HIGHLIGHT_NORMAL); mCheckActualRoot = getChild("checkbox actual root"); + mCheckSelectProbes = getChild("checkbox select probes"); // @@ -428,6 +429,7 @@ LLFloaterTools::LLFloaterTools(const LLSD& key) // mCheckShowHighlight(NULL), mCheckActualRoot(NULL), + mCheckSelectProbes(NULL), // mBtnRotateLeft(NULL), @@ -1014,6 +1016,7 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask) // if (mCheckShowHighlight) mCheckShowHighlight->setVisible( edit_visible ); if (mCheckActualRoot) mCheckActualRoot->setVisible( edit_visible ); + if (mCheckSelectProbes) mCheckSelectProbes->setVisible( edit_visible ); // // Create buttons diff --git a/indra/newview/llfloatertools.h b/indra/newview/llfloatertools.h index 4eb3731fda..7b4f893465 100644 --- a/indra/newview/llfloatertools.h +++ b/indra/newview/llfloatertools.h @@ -171,6 +171,7 @@ public: LLCheckBoxCtrl* mCheckStretchTexture; LLCheckBoxCtrl* mCheckShowHighlight; //Phoenix:KC LLCheckBoxCtrl* mCheckActualRoot; //Phoenix:KC + LLCheckBoxCtrl* mCheckSelectProbes; // // Ansariel: Reverted the hack because then when clicking the label it // doesn't check the checkbox anymore! From 4a2d7fd7ca7b51c71361fb0541f77ce1e02f0b2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20H=C3=B6rmann?= Date: Sat, 22 Jun 2024 16:22:27 +0200 Subject: [PATCH 05/34] fix build target name in docs RelWithDebInfo_open -> RelWithDebInfoFS_open --- doc/building_linux.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/building_linux.md b/doc/building_linux.md index eeeb950728..92348765ca 100644 --- a/doc/building_linux.md +++ b/doc/building_linux.md @@ -158,7 +158,7 @@ Available premade firestorm-specific build targets: ``` ReleaseFS (includes KDU, FMOD) ReleaseFS_open (no KDU, no FMOD) -RelWithDebInfo_open (no KDU, no FMOD) +RelWithDebInfoFS_open (no KDU, no FMOD) ``` ### Configuration Switches From ad061b4322afd211f60403dd780c5f95da71f42e Mon Sep 17 00:00:00 2001 From: Beq Date: Sun, 23 Jun 2024 14:20:23 +0100 Subject: [PATCH 06/34] WiP to realign the physical ram detection across platforms --- indra/llcommon/llmemory.cpp | 62 +++++++++++++++++++++++++++---------- 1 file changed, 46 insertions(+), 16 deletions(-) diff --git a/indra/llcommon/llmemory.cpp b/indra/llcommon/llmemory.cpp index cf5ead718d..eab87df300 100644 --- a/indra/llcommon/llmemory.cpp +++ b/indra/llcommon/llmemory.cpp @@ -39,6 +39,7 @@ #elif LL_LINUX # include # include +# inlcude #endif #include "llmemory.h" @@ -85,6 +86,7 @@ void LLMemory::initMaxHeapSizeGB(F32Gigabytes max_heap_size) void LLMemory::updateMemoryInfo() { LL_PROFILE_ZONE_SCOPED + U32Kilobytes avail_phys; // align MemInfo across platforms #if LL_WINDOWS PROCESS_MEMORY_COUNTERS counters; @@ -98,20 +100,22 @@ void LLMemory::updateMemoryInfo() sample(sAllocatedMem, sAllocatedMemInKB); sAllocatedPageSizeInKB = U32Kilobytes::convert(U64Bytes(counters.PagefileUsage)); sample(sVirtualMem, sAllocatedPageSizeInKB); + // align MemInfo across platforms + // U32Kilobytes avail_phys, avail_virtual; + // LLMemoryInfo::getAvailableMemoryKB(avail_phys, avail_virtual) ; + // sMaxPhysicalMemInKB = llmin(avail_phys + sAllocatedMemInKB, sMaxHeapSizeInKB); - U32Kilobytes avail_phys, avail_virtual; + // if(sMaxPhysicalMemInKB > sAllocatedMemInKB) + // { + // sAvailPhysicalMemInKB = sMaxPhysicalMemInKB - sAllocatedMemInKB ; + // } + // else + // { + // sAvailPhysicalMemInKB = U32Kilobytes(0); + // } + U32Kilobytes avail_virtual; LLMemoryInfo::getAvailableMemoryKB(avail_phys, avail_virtual) ; - sMaxPhysicalMemInKB = llmin(avail_phys + sAllocatedMemInKB, sMaxHeapSizeInKB); - - if(sMaxPhysicalMemInKB > sAllocatedMemInKB) - { - sAvailPhysicalMemInKB = sMaxPhysicalMemInKB - sAllocatedMemInKB ; - } - else - { - sAvailPhysicalMemInKB = U32Kilobytes(0); - } - + // #elif defined(LL_DARWIN) task_vm_info info; mach_msg_type_number_t infoCount = TASK_VM_INFO_COUNT; @@ -147,21 +151,47 @@ void LLMemory::updateMemoryInfo() if (result == KERN_SUCCESS) { // This is what Chrome reports as 'the "Physical Memory Free" value reported by the Memory Monitor in Instruments.' // Note though that inactive pages are not included here and not yet free, but could become so under memory pressure. - sAvailPhysicalMemInKB = U32Bytes(vmstat.free_count * page_size); - sMaxPhysicalMemInKB = LLMemoryInfo::getHardwareMemSize(); - } + // align MemInfo across platforms + // sAvailPhysicalMemInKB = U32Bytes(vmstat.free_count * page_size); + // sMaxPhysicalMemInKB = LLMemoryInfo::getHardwareMemSize(); + avail_phys = U32Bytes(vmstat.free_count * page_size); + sMaxHeapSizeInKB = LLMemoryInfo::getHardwareMemSize(); + // + } else { LL_WARNS() << "task_info failed" << LL_ENDL; } - + // align MemInfo across platforms +#elif defined(LL_LINUX) + // Use sysinfo() to get the total physical memory. + struct sysinfo info; + sysinfo(&info); + sMaxHeapSizeInKB = U32Kilobytes::convert(info.totalram); // Total RAM in system + avail_phys = U32Kilobytes::convert(info.freeram); // Total Free RAM in system + sAllocatedMemInKB = U64Bytes(LLMemory::getCurrentRSS()); // represents the RAM allocated by this process only (inline with the windows implementation) + // #else //not valid for other systems for now. + LL_WARNS() << "LLMemory::updateMemoryInfo() not implemented for this platform." << LL_ENDL; sAllocatedMemInKB = U64Bytes(LLMemory::getCurrentRSS()); sMaxPhysicalMemInKB = U64Bytes(U32_MAX); sAvailPhysicalMemInKB = U64Bytes(U32_MAX); #endif + // align MemInfo across platforms + sample(sAllocatedMem, sAllocatedMemInKB); + // sMaxPhysicalMem - max this process can use = the lesser of (what we already have + what's available) or MaxHeap + sMaxPhysicalMemInKB = llmin(avail_phys + sAllocatedMemInKB, sMaxHeapSizeInKB); + if(sMaxPhysicalMemInKB > sAllocatedMemInKB) + { + sAvailPhysicalMemInKB = sMaxPhysicalMemInKB - sAllocatedMemInKB ; + } + else + { + sAvailPhysicalMemInKB = U32Kilobytes(0); + } + // return ; } From b57fec3c7bca2d7a7ba5bfc0b127b826d1719088 Mon Sep 17 00:00:00 2001 From: Beq Date: Sun, 23 Jun 2024 15:58:53 +0100 Subject: [PATCH 07/34] typo in include *sigh* --- indra/llcommon/llmemory.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/llcommon/llmemory.cpp b/indra/llcommon/llmemory.cpp index eab87df300..30a82291b2 100644 --- a/indra/llcommon/llmemory.cpp +++ b/indra/llcommon/llmemory.cpp @@ -39,7 +39,7 @@ #elif LL_LINUX # include # include -# inlcude +# include #endif #include "llmemory.h" From 87cc4f3dce53f5a8bfd6891e4a967b507107ff20 Mon Sep 17 00:00:00 2001 From: Beq Date: Sun, 23 Jun 2024 17:05:49 +0100 Subject: [PATCH 08/34] fix conversion units, hopefully. Also remove additional sample on win --- indra/llcommon/llmemory.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/indra/llcommon/llmemory.cpp b/indra/llcommon/llmemory.cpp index 30a82291b2..69c9ba38f1 100644 --- a/indra/llcommon/llmemory.cpp +++ b/indra/llcommon/llmemory.cpp @@ -97,7 +97,7 @@ void LLMemory::updateMemoryInfo() } sAllocatedMemInKB = U32Kilobytes::convert(U64Bytes(counters.WorkingSetSize)); - sample(sAllocatedMem, sAllocatedMemInKB); + // sample(sAllocatedMem, sAllocatedMemInKB); // align MemInfo across platforms sAllocatedPageSizeInKB = U32Kilobytes::convert(U64Bytes(counters.PagefileUsage)); sample(sVirtualMem, sAllocatedPageSizeInKB); // align MemInfo across platforms @@ -167,9 +167,9 @@ void LLMemory::updateMemoryInfo() // Use sysinfo() to get the total physical memory. struct sysinfo info; sysinfo(&info); - sMaxHeapSizeInKB = U32Kilobytes::convert(info.totalram); // Total RAM in system - avail_phys = U32Kilobytes::convert(info.freeram); // Total Free RAM in system - sAllocatedMemInKB = U64Bytes(LLMemory::getCurrentRSS()); // represents the RAM allocated by this process only (inline with the windows implementation) + sMaxHeapSizeInKB = U32Kilobytes::convert((U64Bytes)info.totalram); // Total RAM in system + avail_phys = U32Kilobytes::convert((U64Bytes)info.freeram); // Total Free RAM in system + sAllocatedMemInKB = U32Kilobytes::convert(U64Bytes(LLMemory::getCurrentRSS())); // represents the RAM allocated by this process only (inline with the windows implementation) // #else //not valid for other systems for now. From 8caf53245bad58a030476c189797c0d4520715dc Mon Sep 17 00:00:00 2001 From: Beq Date: Sun, 23 Jun 2024 18:46:56 +0100 Subject: [PATCH 09/34] [GHA] Make Apple packages half the size. and improve some error checking too, hopefully --- .../installers/darwin/apple-notarize.sh | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/indra/newview/installers/darwin/apple-notarize.sh b/indra/newview/installers/darwin/apple-notarize.sh index cd3f9eb803..c8ff10df5c 100755 --- a/indra/newview/installers/darwin/apple-notarize.sh +++ b/indra/newview/installers/darwin/apple-notarize.sh @@ -23,13 +23,23 @@ if [[ -f "$CONFIG_FILE" ]]; then echo "Notarytool submit:" echo $res - [[ "$res" =~ 'id: '([^[:space:]]+) ]] - match=$? - echo "Notarized with id: [$match]" + if [[ "$res" =~ id:\ ([^[:space:]]+) ]]; then + match="${BASH_REMATCH[1]}" + echo "Notarized with id: [$match]" + else + echo "No match found" + fi # if [[ ! $match -eq 0 ]]; then echo "Running Stapler" xcrun stapler staple "$app_file" + # Delete the zip file to stop it being packed in the dmg + rm -f "$zip_file" + if [[ $? -eq 0 ]]; then + echo "$zip_file deleted successfully." + else + echo "Failed to delete $zip_file" + fi exit 0 # else # echo "Notarization error" @@ -39,4 +49,7 @@ if [[ -f "$CONFIG_FILE" ]]; then echo "Notarization error: ditto failed" exit 1 fi +else + echo "No config file found - check notarize_creds is present in the secrets" + exit 1 fi From df9e0f7e12272864dcf882e59b531473b241ac9f Mon Sep 17 00:00:00 2001 From: Beq Date: Sun, 23 Jun 2024 18:49:09 +0100 Subject: [PATCH 10/34] [GHA] See if we can replace 3rd party action with standard checkout --- .github/workflows/build_viewer.yml | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build_viewer.yml b/.github/workflows/build_viewer.yml index cdb0a069db..d63fe313c0 100644 --- a/.github/workflows/build_viewer.yml +++ b/.github/workflows/build_viewer.yml @@ -344,11 +344,14 @@ jobs: FS_RELEASE_FOLDER: if: always() steps: - - name: Checkout files - uses: Bhacaz/checkout-files@v2 + - name: Checkout repository + uses: actions/checkout@v4 with: - files: fsutils/download_list.py - branch: ${{ github.head_ref || github.ref_name || 'master' }} + sparse-checkout: | + fsutils/download_list.py + sparse-checkout-cone-mode: false + ref: ${{ github.head_ref || github.ref_name || 'master' }} + fetch-depth: 1 - name: Install discord-webhook library run: pip install discord-webhook From d7c3e112fa21a029ffacb8e8ae2c6e2fe8869568 Mon Sep 17 00:00:00 2001 From: Beq Date: Sun, 23 Jun 2024 18:49:56 +0100 Subject: [PATCH 11/34] [GHA] Add option to create Tracy builds on workflow triggers --- .github/workflows/build_viewer.yml | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build_viewer.yml b/.github/workflows/build_viewer.yml index d63fe313c0..48cbc704de 100644 --- a/.github/workflows/build_viewer.yml +++ b/.github/workflows/build_viewer.yml @@ -1,6 +1,11 @@ name: Build viewer on: workflow_dispatch: + inputs: + include_tracy: + description: 'Include tracy profiling builds' + required: false + default: 'false' push: branches: - "Firestorm*.*.*" @@ -116,7 +121,11 @@ jobs: elif [[ "${{ github.ref_name }}" == *nightly* ]] || [[ "${{ github.event_name }}" == 'schedule' ]]; then FS_RELEASE_TYPE=Nightly elif [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then - FS_RELEASE_TYPE=Manual + if [[ "${{ github.event.inputs.include_tracy }}" == "false" ]]; then + FS_RELEASE_TYPE=Manual + elif [[ "${{ github.event.inputs.include_tracy }}" == "true" ]]; then + FS_RELEASE_TYPE=Profiling + fi fi if [[ "${{ matrix.addrsize }}" == "64" ]]; then FS_RELEASE_CHAN="${FS_RELEASE_TYPE}x64" @@ -243,7 +252,7 @@ jobs: - name: Set expiration days based on FS_RELEASE_TYPE run: | case "${{ env.FS_RELEASE_TYPE }}" in - "Nightly" | "Manual") + "Nightly" | "Manual" | "Profiling") EXPIRE_DAYS=14 ;; "Alpha") @@ -264,6 +273,10 @@ jobs: echo "EXTRA_ARGS=${{ env.EXTRA_ARGS}}" >> $GITHUB_ENV fi shell: bash + - name: Add tracy builds for dev use if selected (manual builds only). + if: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.include_tracy == 'true' }} + shell: bash + run: echo "EXTRA_ARGS=${{ env.EXTRA_ARGS }} --tracy" >> $GITHUB_ENV - name: Clean up packages to give more space run: rm *${{ env.fallback_platform }}*bz2 From 8f230ee8510305f57f0261a4aa7af4e591ad24aa Mon Sep 17 00:00:00 2001 From: PanteraPolnocy Date: Mon, 24 Jun 2024 23:34:01 +0200 Subject: [PATCH 12/34] FIRE-34149 Italian Translation Update, by Spartaco Zemenis --- .../xui/it/floater_combobox_ok_cancel.xml | 7 + .../default/xui/it/floater_emoji_picker.xml | 1 + .../floater_inventory_thumbnails_helper.xml | 13 ++ .../default/xui/it/floater_media_browser.xml | 1 - .../xui/it/floater_preview_gesture.xml | 11 +- .../xui/it/floater_scene_load_stats.xml | 28 ++-- .../skins/default/xui/it/floater_tools.xml | 2 +- .../default/xui/it/floater_whitelist.xml | 17 +++ .../xui/it/menu_gallery_outfit_tab.xml | 7 +- .../skins/default/xui/it/menu_inventory.xml | 1 + .../skins/default/xui/it/menu_outfit_gear.xml | 11 +- .../skins/default/xui/it/menu_outfit_tab.xml | 2 + .../xui/it/menu_teleport_history_item.xml | 1 + .../skins/default/xui/it/menu_viewer.xml | 4 + .../skins/default/xui/it/notifications.xml | 55 ++++++-- .../skins/default/xui/it/panel_fs_login.xml | 16 ++- .../default/xui/it/panel_fs_nui_login.xml | 29 +++-- .../default/xui/it/panel_fs_tools_texture.xml | 2 +- .../xui/it/panel_group_info_sidetray.xml | 16 ++- .../default/xui/it/panel_group_list_item.xml | 1 + .../xui/it/panel_group_list_item_short.xml | 1 + .../default/xui/it/panel_preferences_UI.xml | 22 ++-- .../default/xui/it/panel_preferences_chat.xml | 6 +- .../xui/it/panel_preferences_sound.xml | 2 +- .../xui/it/panel_profile_secondlife.xml | 3 +- .../default/xui/it/sidepanel_task_info.xml | 120 +++++++++--------- .../newview/skins/default/xui/it/strings.xml | 59 ++++++++- 27 files changed, 301 insertions(+), 137 deletions(-) create mode 100644 indra/newview/skins/default/xui/it/floater_combobox_ok_cancel.xml create mode 100644 indra/newview/skins/default/xui/it/floater_inventory_thumbnails_helper.xml create mode 100644 indra/newview/skins/default/xui/it/floater_whitelist.xml diff --git a/indra/newview/skins/default/xui/it/floater_combobox_ok_cancel.xml b/indra/newview/skins/default/xui/it/floater_combobox_ok_cancel.xml new file mode 100644 index 0000000000..8e75223bba --- /dev/null +++ b/indra/newview/skins/default/xui/it/floater_combobox_ok_cancel.xml @@ -0,0 +1,7 @@ + + + + Seleziona un'opzione: + +