LINUX.ORG.RU

Сообщения safocl

 

wxWidgets и cmake теперь не дружат?

имеется арч, последние пакеты, желание использовать wxWidgets в своем проекте на c++.

`--> pacman -Qs cmake
local/cmake 3.22.2-1
    A cross-platform open-source make system
local/extra-cmake-modules 5.90.0-1 (kf5)
    Extra modules and scripts for CMake


`--> pacman -Qs wx
local/wxgtk-common 3.0.5.1-3
    Common libraries and headers for wxgtk2 and wxgtk3
local/wxgtk3 3.0.5.1-3
    GTK+3 implementation of wxWidgets API for GUI


при добавлении в CmakeLists.txt
find_package(wxWidgets REQUIRED gl core base )
include("${wxWidgets_USE_FILE}")

происходит
`--> cmake ..
module path is
CMake Error at /usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
  Could NOT find wxWidgets (missing: wxWidgets_LIBRARIES
  wxWidgets_INCLUDE_DIRS)
Call Stack (most recent call first):
  /usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:594 (_FPHSA_FAILURE_MESSAGE)
  /usr/share/cmake/Modules/FindwxWidgets.cmake:1025 (find_package_handle_standard_args)
  CMakeLists.txt:16 (find_package)


примечательно, что чуть ранее все работало — накрылся на днях диск на 2Тб — купил ssd, переставил систему, и теперь не собирается то, что собиралось на старой.

дубликат темы

Решение

 , , ,

safocl ()

dbus-daemon сжирает 500 мегабайт оперативки и выше

имеется archlinux, nvidia gtx1650 (495 driver), i3-wm
процесс dbus-daemon с недавних пор (предположительно после последнего апдейта) начал сжирать 500+ мегабайт оперативки.

пакет dbus 1.12.20-1

 , ,

safocl ()

Отказываются создаваться страницы wxNotebook

имеется arhclinux, wxwidgets, c++ (gcc)
код:
mainwindow.cpp

#include "mainwindow.hpp"

#include <stdexcept>

MainWindow::MainWindow() :
wxFrame( nullptr, wxID_ANY, "WEGA-HPG-cpp-wx" ), mMainPanel( new wxPanel() ),
mTabs( new wxNotebook() ) {
    mMainPanel->SetParent( this );
    mTabs->SetParent( mMainPanel );

    auto panel = new wxPanel();

    mTabs->AddPage( panel, "TAB1" );

    mTabs->Show();
    mMainPanel->Show();
}


mainwindow.hpp
#include <wx/wx.h>
#include <wx/panel.h>
#include <wx/notebook.h>

#include <vector>

class MainWindow : public wxFrame {
public:
    MainWindow();

    ~MainWindow() = default;

private:
    wxPanel *    mMainPanel;
    wxNotebook * mTabs;

    std::vector< wxPanel * > mPanels;
};


main.cpp
#include "ui/mainwindow.hpp"

#include <iostream>
#include <wx/chartype.h>
#include <wx/init.h>
#include <wx/wx.h>

#include <cstdlib>

class HpgApp final : public wxApp {
    bool OnInit() override {
        MainWindow * mainwindow = new MainWindow;
        mainwindow->CreateStatusBar();
        mainwindow->SetStatusText( "HPG status" );
        mainwindow->Show();

        //std::cout << "TEST" << std::endl;

        //SetTopWindow( mainwindow );
        return true;
    }
    //MainWindow mainwindow;
};
//DECLARE_APP( HpgApp )
//IMPLEMENT_APP( HpgApp )
int main( int argc, char ** argv ) {
    [[maybe_unused]] HpgApp * app = new HpgApp;

    wxEntry( argc, argv );
    return EXIT_SUCCESS;
}


при запуске получается
./src/gtk/notebook.cpp(409): assert "m_widget != __null" failed in InsertPage(): invalid notebook
zsh: trace trap (core dumped)  ./src/wega-hpg-cpp-wx


решение: тут и тут

 ,

safocl ()

XCB: bitmap-bit-order в структуре Connection Setup — какой enum значений?

в спецификации Xorg указано:

bitmap-bit-order: { LeastSignificant, MostSignificant }


однако такого enum я не нашел в XCB.
его и правда нет, либо как то странно называется?

ответ

 ,

safocl ()

Отсутствует расширение Xorg DRI3, однако имеется DRI2.

имеется archlinux, nvidia 470 драйвера (gtx1650), соответственно Xorg сервер.

необходимо расширение DRI3, однако его почему то в списке не имеется

************** Avaible Xorg extensions **************
	[ Generic Event Extension ]
	[ SHAPE ]
	[ MIT-SHM ]
	[ XInputExtension ]
	[ XTEST ]
	[ BIG-REQUESTS ]
	[ SYNC ]
	[ XKEYBOARD ]
	[ XC-MISC ]
	[ SECURITY ]
	[ XFIXES ]
	[ RENDER ]
	[ RANDR ]
	[ XINERAMA ]
	[ Composite ]
	[ DAMAGE ]
	[ MIT-SCREEN-SAVER ]
	[ DOUBLE-BUFFER ]
	[ RECORD ]
	[ DPMS ]
	[ Present ]
	[ X-Resource ]
	[ XVideo ]
	[ GLX ]
	[ XFree86-VidModeExtension ]
	[ XFree86-DGA ]
	[ DRI2 ]
	[ NV-GLX ]
	[ NV-CONTROL ]
	[ XINERAMA ]

имеется dri2 только...

конфигурация Xorg-сервера по расширениям не проводилась. Т.е. секции Modules и Extensions в xorg.conf не определены.

как сделать доступным dri3?

 , ,

safocl ()

Можно ли средствами XCB получить неразорванную картинку root окна?

имеется необходимость получать неразорванную картинку root окна через XCB для обработки ее в Vulkan API — а то получается, если я даже включаю vsync в Vulkan и начинаю рисовать картинку root на overlay — выводится разорванная картинка — тоесть некоторые ее части остаются от прошлых кадров (тиринг).

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

и еще вопрос — если overlay постоянно держать видимым, то получается его содержимое захватывается и root окном, из-за чего получается статическая картинка. Но если overlay анмапить и мапить заново — получается небольшое мерцание. Как нормальным путем получать с root окна данные и отрисовывать их на overlay?
Исследовал уже и chamferwm, и picom — но пока ничего по данному моменту проследить не удалось — слишком много фонового кода там — в первом случае вообще полный WM, во втором код на си не особо читабельный как по мне — сложно проследить проделываемую работу по теме.

 , , ,

safocl ()

Nvidia 470.63 + DRI3 = ?

вроде бы, на сколько мне понимается, nvidia в драйверах версии 470 начала поддержку drm.
и правда — появилось:

`--> ll /dev/dri
итого 0
drwxr-xr-x  2 root root         80 сен  9 07:52 by-path
crw-rw----+ 1 root video  226,   0 сен  9 07:52 card0
crw-rw-rw-  1 root render 226, 128 сен  9 07:52 renderD128


однако запрос
std::string_view dri3ExtensionName { "DRI3" };

auto dri3ExtCoockie = xcb_query_extension(
*mXcbConnect, dri3ExtensionName.size(), dri3ExtensionName.data() );

std::unique_ptr< xcb_query_extension_reply_t > dri3ExtReply {
    xcb_query_extension_reply( *mXcbConnect, dri3ExtCoockie, nullptr )
};
показывает present=0

не реализовано до сих пор? или я что-то делаю не так?

апд.
`--> lsmod|grep nvidia
nvidia_uvm           1200128  0
nvidia_drm             73728  15
nvidia_modeset       1200128  30 nvidia_drm
nvidia              35319808  1371 nvidia_uvm,nvidia_modeset
drm_kms_helper        294912  1 nvidia_drm
drm                   585728  19 drm_kms_helper,nvidia,nvidia_drm

 , , ,

safocl ()

XCB как узнать размер данных pixmap?

Имеется особая необходимость выяснять размер данных pixmap.
Как это сделать через XCB?

уже достаточно давно брожу по просторам XCB, но не натыкался на возможность узнать размер данных у pixmap-ы.

 , , , ,

safocl ()

Аллокация памяти в Vulkan API с VK_EXT_external_memory_host расширением выводит ErrorOutOfDeviceMemory

имеется арч, nvidia gtx1650, nvidia-465 drivers, vulkan 1.2.
имеется код, которым я хочу экспортировать картинку из Xorg на GPU через расширение VK_EXT_external_memory_host. Данное расширение поддержано в указанных драйверах. Однако получаю ошибку ErrorOutOfDeviceMemory.

Полный лог выполнения программы.

имеется предположение, что данное поведение получается из-за неправильно выравненной памяти по переданному указателю — данную теорию еще не проверял, но однако почему тогда именно указанная ошибка выводится, вместо, скажем, VK_ERROR_INVALID_EXTERNAL_HANDLE...

и еще — драйвер моей видяхи не предоставляет доступной памяти с нужными memoryTypeIndex и флагом { DeviceLocal }, тоесть есть память которая только { HostVisible | HostCoherent }, ну или с добавлением { HostCached }.

решение такое

 , , , ,

safocl ()

Vulkan Api как получить картинку по dma, если dri3 в Xorg не доступно?

имеется арч, gtx1650, nvidia-465 driver, xcb, c++
кодирую композитный менеджер для Xorg с использованием рендера на Vulkan API

если копировать xcb_pixmap данные с хоста в ГПУ, то это занимает 95% ЦПУ в среднем от всей проги.

можно ли использовать данные xcb_pixmap из Xorg в Vulkan API без такого лютого оверхеда от копирования?

 , , , ,

safocl ()

DRI3QueryVersion failure — xcb_dri3_query_version_reply возвращает nullptr

имеется арч, gtx1650, nvidia-465 driver, xcb
следующий код возвращает nullptr — хотя в логе Xorg dri3 расширение инициализируется.
ошибка не отлавливается — ибо всегда возвращается nullptr в err.

спс за ответ

 , , , ,

safocl ()

DRI3PixmapFromBuffer failed — reply return nullptr

имеется арч, gtx1650, nvidia-465 drivers, vulkan, xcb.
пытаюсь через xcb получить dma buffer для pixmap, но получаю ошибку:

terminate called after throwing an instance of 'std::runtime_error'
  what():  Using Window::getImageDataDri3FD() : xcb_dri3_buffer_from_pixmap_reply() return is nullptr

поскольку xcb_dri3_buffer_from_pixmap_reply() возвращает нулевой поинтер.

все же правильно сделал?

p.s. сделал проверку на ошибку — но она не срабатывает:
xcb_generic_error_t * err {};
auto                  dri3BufferReply =
xcb_dri3_buffer_from_pixmap_reply( *mConnection, coockie, &err );

if ( err )
    throw std::runtime_error(
    "Using Window::getImageDataDri3FD() : ERROR with code is " +
    std::to_string( err->error_code ) );

 , , , ,

safocl ()

Vulkan Api — undefined reference to `vkAcquireXlibDisplayEXT'

имеется archlinux, nvidia gtx1650, nvidia-465 drivers.
в данных дровах доступно VK_EXT_acquire_xlib_display расширение, однако при вызове vkAcquireXlibDisplayEXT() выдает ошибку undefined reference to `vkAcquireXlibDisplayEXT'
линкую прогу с -lvulkan

не могу понять в чем проблема. — само расширение подключаю

пытаюсь юзать (раскоментирую)

решение тут

 

safocl ()

Vulkan API createSwapchainKHR: ErrorUnknown при создании на display surface

система: nvidia gtx 1650, archlinux, nvidia-465 drivers.

имеется тестовый код на c++ для создания композитного менеджера.
пробовал уже делать вывод рабочего стола в созданное окно — все отлично.
однако при попытке вывода напрямую на дисплей возникает ошибка создания свапчейна на поверхности дисплея.
использую слои валидации vulkan — но они ничего не извещают.

создание свапчайна делаю так

вызов функции swapchainInit()

создание display surface

подключенные расширения

в результате выдается ошибка:

terminate called after throwing an instance of 'vk::UnknownError'
  what():  vk::Device::createSwapchainKHR: ErrorUnknown 

 , ,

safocl ()

systemd-run не устанавливает ограничения

имеется арч, i3wm, актуальные версии ПО.
делаю по вики — ничего не происходит из того что я бы хотел.
как я делаю:

`--> cat ~/.config/systemd/user/firefox.slice
[Slice]
MemoryHigh=12M
.-(~/wineprefix/gamesDir/Path of Exile)-----------------------------------------(safff@safcomp)-
`--> systemd-run --user --slice=firefox.slice /usr/bin/firefox

но все равно фаерфоксу позволено кушать много.

 ,

safocl ()

При использовании swap оперативная память не заполняется в первую очередь.

имеется арч, ядро 5.10.10-zen1-1-zen, i3wm
подключаю свап из файла, настройки sysctl vm/swappiness=0 — однако при ентом почему то иногда свап не освобождается и не используется в первую очередь оперативная память — и swap начинает заполнять в любом случае почти сразу — даже при заполнении оперативной памяти до 20-30%.

как настроить поведение, что бы swap действительно начинал работать когда мне надо?

 , , ,

safocl ()

C++ как получить путь запущенного приложения?

использую c++17 c++20
имеется приложение, которое использует ресурсы используя относительные пути — как выяснить реальный путь в файловой системе до самого бинаря внутри кода?

апд
в общем найдено несколько способов:
1. только для систем с procfs — C++ как получить путь запущенного приложения? (комментарий)
2. по идее кроссплатформенный через sdl2 — C++ как получить путь запущенного приложения? (комментарий)
3. использовать метод нахождения используемый в which (определять является ли argv путем, если да то каким — относительным или абсолютным, если нет, то искать название бинарника по путям в env var PATH)

 , ,

safocl ()

i3wm и kbdd равно пичальная автозагрузка

имеется арч, i3wm, kbdd для запоминания переключения языка ввода каждого приложения.
в конфиге i3wm указано

exec kbdd

полный конфиг

однако данный демон kbdd отказывается нормально работать при автозапуске — глючит запоминание языка ввода, но если его рестартануть вручную, то все нормально работает.

в чем траббла??? i3wm как то не в том порядке подгружает модули которые нужны для работы kbdd? хатя как я понимаю ему нужны только запущенные иксы, а они не могут быть не запущенные при старте i3wm...
какое то странное еретичное поведение...

п.с. так было постоянно всегда — просто стеснялся жалиться...)))

 , , ,

safocl ()

Vulkan-HPP ErrorOutOfDateKHR при изменении размера

имеется такой код
использую Vulkan-HPP, при изменении размера окна начинает сыпаться ErrorOutOfDateKHR — я чего то не делаю того что нужно сделать?

использую XCB либу для доступа к иксам и соответственно VkXCBsurface .
в мейне у меня loop:

for ( auto event = xcb_wait_for_event( xcbConnect );
          event != nullptr;
          event = xcb_wait_for_event( xcbConnect ) ) {
        switch ( event->response_type & ~0x80 ) {
        case XCB_EXPOSE:
            renderer.draw();
            //xcb_flush( xcbConnect );
            break;
        case XCB_KEY_PRESS:
            if ( reinterpret_cast< xcb_key_press_event_t * >( event )
                 ->detail == 24 ){
                xcb_destroy_window(xcbConnect, window);
                xcb_disconnect(xcbConnect);
                std::abort();
            }
        }
        delete event;
    }


я же верно понимаю, что swapchain и vkImages надо инициализировать однажды для вывода закрашенного пространства?
или же надо после каждой draw() и/или изменения размера окна пересоздавать swapchain и vkImages?

если запихнуть создание объекта рендерера прямо перед draw() — то вроде даже будто хоть и криво но работает, однако в один момент выскакивает ошибка инициализации физического устройства, да и ессесна сильно грузит ЦПУ.

в общем наверна тут еще один вопрос сразу же напрашивается — как реагировать внутри рендерера на ресайз окна средствами Vulkan API?

 ,

safocl ()

Vulkan-HPP sType must be VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER

делаю тестовый рендерер на вулкане через офф плюсовую обертку vulkan-hpp — встретился с интересными сообщениями от слоя валидации — одна из которых «sType must be VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER» для структуры vk::ImageMemoryBarrier — хотя там оно должно само подставляться при инициализации, если верить словам разработчиков.

почему ента ошибка возникает?

сам код

лог сообщений слоя валидации

 ,

safocl ()

RSS подписка на новые темы