Поддержка OpenGL в Docker без графического процессора, ошибка gl: связывание с некомпилированным / неспециализированным шейдером - PullRequest
0 голосов
/ 26 сентября 2019

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

Одна проблема, с которой мы сталкиваемся, заключается в том, что конкретное приложение использует OpenGL для рендеринга.С физическим графическим процессором инструмент моделирования работает без каких-либо проблем.Чтобы обойти зависимости GPU, мы используем программный рендеринг программного обеспечения Mesa 3D OpenGL (Gallium), LLVMpipe и OpenSWR.Для справки мы взглянули на https://github.com/jamesbrink/docker-opengl.

Текущий Dockerfile, который собирает mesa 19.0.2 (используя gcc-8) из исходного кода, выглядит следующим образом:

# OPENGL SUPPORT ------------------------------------------------------------------------------
# start with plain ubuntu as base image for testing
FROM ubuntu AS builder

# install some needed packages and set gcc-8 as default compiler
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \
    llvm-7 \
    llvm-dev \
    autoconf \
    automake \
    bison \
    flex \
    gettext \
    libtool \
    python-dev\
    git \
    pkgconf \
    python-mako \
    zlib1g-dev \
    x11proto-gl-dev \
    libxext-dev \
    xcb \
    libx11-xcb-dev \
    libxcb-dri2-0-dev \
    libxcb-xfixes0-dev \
    libdrm-dev \
    g++ \
    make \
    xvfb \
    x11vnc \
    g++-8 && \
    update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 800 --slave /usr/bin/g++ g++ /usr/bin/g++-8

# get mesa (using 19.0.2 as later versions dont use the configure script)
WORKDIR /mesa
RUN git clone https://gitlab.freedesktop.org/mesa/mesa.git
WORKDIR /mesa/mesa
RUN git checkout mesa-19.0.2
#RUN git checkout mesa-18.2.2

# build and install mesa
RUN libtoolize && \
    autoreconf --install && \
    ./configure \
        --enable-glx=gallium-xlib \
        --with-gallium-drivers=swrast,swr \
        --disable-dri \
        --disable-gbm \
        --disable-egl \
        --enable-gallium-osmesa \
        --enable-autotools \
        --enable-llvm \
        --with-llvm-prefix=/usr/lib/llvm-7/ \
        --prefix=/usr/local && \
    make -j 4 && \
    make install && \
    rm -rf /mesa



# SIM -----------------------------------------------------------------------------------------
FROM ubuntu
COPY --from=builder /usr/local /usr/local

# copy all simulation binaries to the image
COPY .....

# update ubuntu and install all sim dependencies
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \
        xterm \
        freeglut3 \
        openssh-server \
        synaptic \
        nfs-common \
        mesa-utils \
        xfonts-75dpi \
        libusb-0.1-4 \
        python \
        libglu1-mesa \
        libqtgui4 \
        gedit \
        xvfb \
        x11vnc \
        llvm-7-dev \
        expat \
        nano && \
    dpkg -i /vtdDeb/libpng12-0_1.2.54-1ubuntu1.1_amd64.deb

# set the environment variables (display -> 99 and LIBGL_ALWAYS_SOFTWARE)
ENV DISPLAY=":99" \
    GALLIUM_DRIVER="llvmpipe" \
    LIBGL_ALWAYS_SOFTWARE="1" \
    LP_DEBUG="" \
    LP_NO_RAST="false" \
    LP_NUM_THREADS="" \
    LP_PERF="" \
    MESA_VERSION="19.0.2" \
    XVFB_WHD="1920x1080x24"

ЕслиТеперь мы запускаем контейнер и инициализируем сеанс xvfb, все примеры glx, такие как glxgears, работают.Также вывод glxinfo | grep '^direct rendering:' - да, так что OpenGL работает.

Однако, если мы запустим наш двоичный файл моделирования (который предоставлен какой-то компанией и не может быть изменен сейчас), выдаются следующие сообщения об ошибках:

uniform block ub_lights has no binding.
uniform block ub_lights has no binding.
FRAGMENT glCompileShader "../data/Shaders/roadRendererFrag.glsl" FAILED
FRAGMENT Shader "../data/Shaders/roadRendererFrag.glsl" infolog:
0:277(48): error: unsized array index must be constant
0:344(48): error: unsized array index must be constant

glLinkProgram "RoadRenderingBase_Program" FAILED
Program "RoadRenderingBase_Program" infolog:
error: linking with uncompiled/unspecialized shader

Есть идеи, как это исправить?Для нас сообщение об ошибке вроде пустое.Кто-то сталкивался с подобной проблемой?

...