LINUX.ORG.RU

Избранные сообщения maxis11

Объясните про ARB_bindless_texture у AMD (и не только)

Форум — Development

В документации написано, что в шейдерах допускается использование только резидентных хендлов, так как «Conceptually, image data being resident means that it lives within GPU-accessible memory directly», а нерезидентные хэндлы текстур, мол, не доступны ГПУ-шке напрямую. Однако на AMD Raven, AMD Carrizo, AMD Iceland (и я полагаю, что на любых поддерживаемых драйвером radeonsi) при использовании в шейдерах нет разницы является хендл резидентным или нет. За одним исключением — на AMD Raven при попытке вне-экранного рендеринга (с использованием FBO) в резидентную текстуру сцены, эту текстуру использующей (есть подозрение, что даже если эту текстуру не использовать, поведение не изменится — проверю завтра (6 октября)) случается GPU Hang. В случае, если перед рендерингом в текстуру отобрать у последней резидентность и вернуть лишь после завершения вне-экранного рендеринга, хэнга не случится.

У «зелёных» всё ещё интереснее — на GT 650M при попытке чтения в шейдерах текстуры через нерезидентный хендл, возвращается vec4(0.0). При этом всё работает корректно, если хендлы резидентные. При попытке устроить «Уроборос» — рисовать в текстуру сцену, использующую эту текстуру через резидентный хендл, она (текстура) будет мерцать (flickering). Если перед отрисовкой отбирать резидентность у хендла, фликеринг пропадает.

Вопросы к спецам 3D графики ЛОР-а — Хэнг при «Уроборосе» на Raven — это баг? Фликеринг при уроборосе на GT 650M — это баг? Является ли рендеринг сцены в текстуру с резидентным хендлом корректным поведением для программы? А использование этого хендла в процессе рендеринга сцены? Что значит резидентность хендла для radeonsi? А для NVIDIA? И в конце концов, какого чёрта происходит?

UPD: Хэнг на Raven происходит даже если хэндл текстуры цели вне-экранного рендеринга нигде не используется, а просто есть.

UPD2: Главные вопросы: Является ли рендеринг сцены в текстуру с резидентным хендлом корректным поведением для программы? А использование этого хендла в процессе рендеринга сцены? Что значит резидентность хендла для radeonsi? А для NVIDIA?

Фикс проблем вне-экранного рендеринга я уже запилил в двигло. Сейчас хочется разобраться, почему с ним всё оки, а без него — раком.

 , , ,

robus ()

Видео докладов с C++Russia 2018

Форум — Development

На YouTube стали доступны видео докладов обоих дней C++Russia 2018 (видео первого дня опубликовали в конце июня, на днях добавили еще и видео второго дня).

Вот список в хронологическом порядке публикации видео:

Jon Kalb, C++ Today: The Beast is Back
Алексей Салмин , Memory Management Tips & Tricks
Andrei Alexandrescu, Expect the expected
Евгений Лукьянец, Сборка в Docker с использованием Conan
Viktor Kirilov, Interactive C++ Compilation (REPL): The Lean Way
Mikhail Matrosov, Versatile C++ applied
Илья Шишков, Как научить языку C++: опыт создания курсов на Coursera
Дмитрий Соколов, Кодогенерация как рефлексия для бедных
Herb Sutter, New in C++20: The spaceship operator
Arno Schödl, From Iterators To Ranges
Александр Гранин, Функциональный подход к Software Transactional Memory
Денис Панин, Практическое метапрограммирование: пишем гетерогенную хэш-таблицу
Иван Пономарёв, Crash репорты Android NDK
Фёдор Короткий, Память – идеальная абстракция
Дмитрий Банщиков, Разделяемые библиотеки без внешних зависимостей
Borislav Stanimirov, DynaMix: A New Take on Polymorphism
Vadim Vinnik, Collection Processing. Single essence, multiple manifestations
Victor Ciura, Enough string_view to hang ourselves
Анастасия Казакова, Отладка кода на C++, без запуска и компиляции
Jonathan Boccara, 105 STL Algorithms in Less Than an Hour
Daveed Vandevoorde, Reflective Metaprogramming in C++
Павел Булатов, Переход на WebAssembly: стоит ли игра свеч?
Simon Brand, Modern C++ Parallelism from CPU to GPU
Евгений Зуев, Semantic API for C++ programms
Dietmar Kühl, Concept Based Testing
Дмитрий Кожевников, Подводные камни CMake и где они обитают
Rainer Grimm, Best Practices for Concurrency in Modern C++
Евгений Охотников, Акторы на C++: стоило ли оно того?
Алексей Малов, Опыт применения современного C++ в разработке desktop-приложений
Ivan Čukić, 2020: A void_t odyssey
Андрей Карпов, Эффективный C++ (Маерс тут ни при чём :)
Сергей Шамбир, Когда хорош процедурный C++
Иван Пузыревский, Асинхронность в программировании
Сергей Васильев, Статический анализ: ищем ошибки... и уязвимости?

 , , ,

eao197 ()

С++ конференция CoreHard, можно посмотреть видео

Форум — Development

Итак, в Минске состоялась C++ CoreHard Autumn 2017 Conference. Можно было смотреть стрим. Но для тех, кто его пропустил, доступно видео. Конференция шла в два потока, поэтому два записанных стрима. Приятного просмотра:

 ,

HardCpp ()

Избежать повторения кода с помощью C++11 range-based for

Форум — Development

Допустим, есть какие-то единообразные инструкции над несколькими переменными

if(x % 2 == 0) ++x;
if(y % 2 == 0) ++y;
if(z % 2 == 0) ++z;

Как такое делается в современном c++? Я попробовал range-based for, но заработал только вариант с указателями.

for(auto t: {&x, &y, &z})
    if((*t) % 2 == 0) ++(*t);

Reference/dereference тут выглядит явно неуместно. Можно как-то по-другому?

Update

С помощью анонимусов получилось вот такое решение

#include <cstdio>
#include <initializer_list>
#include <functional>

#define rlist(x, ...) (std::initializer_list<std::reference_wrapper<decltype(x)>>({x, __VA_ARGS__}))

int main()
{
    int x = 2, y = 3, z = 4;
    for(auto t : rlist(x, y, z)) if(t % 2 == 0) ++t;
    printf("%d %d %d\n", x, y, z);
    return 0;
}

При использовнии выглядит достаточно прилично (а на макрос можно не смотреть). Требует стандарта C++11. Что с производительностью - пока не знаю.

Update 2

Решение на шаблонах от eao197

#include <iostream>
using namespace std;

template<typename F> void apply_to_all(F &&) {}

template<typename F, typename T, typename... O>
void apply_to_all(F && f, T && x, O && ...other) {
	f(forward<T>(x));
	apply_to_all(forward<F>(f), forward<O>(other)...);
}

int main() {
	int x = 2, y = 3, z = 4, v = 5, w = 6;
        apply_to_all([](int & v) { if(v % 2 == 0) ++v; },
		     x, y, z, v, w);
        apply_to_all([](int v) { cout << v << " "; },
		     x, y, z, v, w);
        cout << endl;
        return 0;
}
На c++14 можно писать auto вместо int в лямбде.

В С++17 за счет if constexpr не нужно будет делать пустую заглушку для прекращения рекурсии вызовов:

template<typename F, typename T, typename... O>
void apply_to_all(F && f, T && x, O && ...other) {
	f(forward<T>(x));
	if constexpr(0 != sizeof...(other))
		apply_to_all(forward<F>(f), forward<O>(other)...);
}

 , ,

Crocodoom ()

Видеолекции по теорфизике под свободной лицензией (update4)

Новости — Документация
Группа Документация

Силами кафедры теоретической физики физического факультета Новосибирского государственного университета были записаны лекции по физике. Исходные видеофайлы выложены в открытый доступ под лицензией CC-BY-SA 4.0.

Значимые изменения после предыдущего сообщения: добавлены оставшиеся лекции спецкурса по Двухфотонной физике (Сербо В. Г.), Физики атомного ядра (Дмитриев В. Г.), добавлены семинары по Теории сильных взаимодействий (Резниченко А. В.), лекции Астрофизика в Антарктике (Дэвид Бессон), Лекции по космологии (профессор Долгов А. Д.), а также Семинары теоротдела ИЯФ им. Г. И. Будкера.

( читать дальше... )

>>> Ссылки на Youtube и торрент-файлы

 

Evgueni ()

Видеолекции по теорфизике под свободной лицензией

Новости — Документация
Группа Документация

Силами кафедры теоретической физики физического факультета Новосибирского государственного университета были записаны лекции по физике. Исходные видеофайлы выложены в открытый доступ под лицензией CC-BY-SA 4.0.

На этот момент доступны для скачивания:

Предупреждение: При скачивании будет возникать предупреждение об отсутствии доверия к сертификату (узлу). Игнорируйте его — это «фича» доступной площадки.

>>> Исходники

 

Evgueni ()

магический IID в Qt

Форум — Development

Доброго времени суток. При написании собстенного плагина для приложения, с использованием интерфейса, необходимо 2 макроса: Q_DECLARE_INTERFACE(<name> <IID>) и Q_PLUGIN_METADATA(IID <IID> FILE <file.json>) - для интерфейса и плагина соответственно. Причем, если собирать плагин с отличным IID от IID интерфейса, то экспортируется он нормально. НО если писать плагин для Qt, скажем, реализуя QStylePlugin, то объявление кастомного IID для макроса Q_DECLARE_INTERFACE является ошибкой. Плагин начинает работать толкько с IID QFactoryInterface'a. Почему такие различия?

 , , ,

Rot1 ()

Поиск вызова конструкторов копирования и операторов копирования всех объектов

Форум — Development

В целях рефакторинга и оптимизации хочу найти вызовы всех конструкторов объектов, знать, где они вызываются, и, желательно, откуда.

Куда смотреть? Valgrind (callgrind)? Что ещё есть? Статические анализаторы такое умеют?

UPD: меня интересуют конструктор копирования и оператор копирования.

 

anonymous00 ()

Посоветуйте плагинов для qtcreator

Форум — Development

Любых. Вдруг что полезное для себя увижу.

 , ,

next_time ()

Видеолекции по теорфизике под свободной лицензией (update2)

Новости — Документация
Группа Документация

Силами кафедры теоретической физики физического факультета Новосибирского государственного университета были записаны лекции по физике. Исходные видеофайлы выложены в открытый доступ под лицензией CC-BY-SA 4.0.

Значимые изменения после предыдущего сообщения:

  • Был добавлен курс лекций профессора Сербо В.Г. по Физике элементарных частиц;
  • Каждому курсу теперь соответствует свой torrent-файл;
  • MrClon залил все имеющиеся лекции на YouTube!

Предыдущие новости по теме тут № 1 и тут № 2.

>>> Ссылки на YouTube и торрент-файлы

 

Evgueni ()

SteamForwarder - обёртка для steam_api.dll в wine

Форум — Games

Приветствую, уважаемое сообщество!

На днях я довёл до более-менее рабочего состояния обёртку для steam_api.dll в wine и теперь хочу поделиться наработками с общественностью.

Зачем это нужно?

Чтобы не устанавливать steam под wine, если захотелось поиграть в игру из steam для windows.

Как это работает?

Wine отлично умеет пробрасывать вызовы библиотек windows в linux, steam_api.dll не является исключением. Все вызовы к steam_api.dll перехватываются wine, направляются в SteamForwarder, там по необходимости допиливаются до совместимых с linux и перенаправляются в libsteam_api.so.

А за это не забанят?

На данный момент существует аналогичная софтина, но с более мудрёной схемой работы, под названием steambridge. За 2 года её использования, автору не поступали сообщения о банах. Хотя легальность подобной подмены dll всё ещё под вопросом, Valve игнорируют вопросы на эту тему.

Как установить игру для windows без windows версии steam?

Для этого существует небольшой скрипт app_install.py. Он создаёт манифест для steam, скачивает игру через steamcmd и формирует скрипт для запуска игры (чтобы работал оверлей, и wine не потерял обёртку для steam_api.dll). После этих нехитрых манипуляций steam под linux начнёт видеть игру, но настоятельно не рекомендуется позволять ему её обновлять (особенно есть кроме версии игры под винду есть еще и версия под мак), может стереть все файлы игры. Для обновления лучше использовать steamcmd или app_install.py.

Ознакомиться с наработками можно тут: https://github.com/xomachine/SteamForwarder

Баг репорты и предложения по улучшению приветствуются.

 ,

xomachine ()

Материалы с конференции C++ CoreHard Winter 2017

Форум — Development

12 февраля в Минске прошла конференция для С++ разработчиков. Организатором выступило сообщество CoreHard.by. Параллельно с выступлениями шла прямая трансляция на YouTube-канале. Для тех же, кто не поехал в Минск и не смотрел конференцию online, доступно видео подборка всех выступлений. Смотрите и прокачивайте свой программистский level:

 , , ,

HardCpp ()

Simple Viewer GL 2.75

Новости — Open Source
Группа Open Source

Simple Viewer GL — легковесный просмотрщик изображений.

Интерфейс состоит из одного окна с опциональной строкой статуса и информацией о пикселе под курсором и/или выделенной области (скриншот). Simple Viewer GL умеет определять тип файла по его сигнатуре, а не только по расширению, а также рекурсивно сканировать директорию.

Работает в GNU/Linux и macOS.

( читать дальше... )

>>> Simple Viewer GL на BitBucket

 , ,

andreyu ()