私は現在、Ubuntu 16.04.2を実行しています。プログラミングを開始するだけの十分な新規インストールです。私は、AMDのドライバで多くの問題を抱えているr9 390 AMDカードを持っていますが、それは問題ではないと思います。GPU(OpenGL、OpenCL、mesaなどのバージョン)のデータ/情報をホストからdockerimagrに渡すにはどうすればよいですか?
私は次のスニペットでdockerfileを作成しました:それを構築した後
FROM ubuntu:16.04
.....
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update && apt-get install -y --no-install-recommends apt-utils
WORKDIR /buildls
CMD ["bash"]
RUN apt-get install -y x11-apps
RUN apt-get install -y libcanberra-gtk*
RUN apt-get -y install libglfw3-dev
RUN apt-get -y install libglew-dev
RUN apt-get -y install mesa-utils
.......
、私はそれを実行します。
docker run -it `#container process` \
-v /tmp/.X11-unix:/tmp/.X11-unix `#Allows the X11 server to be shared (GUI)` \
-v $(pwd)/volume:/app `#Shares a folder, one down in current directory (~/volume) with ROOT/app in the container` \
-e DISPLAY=$DISPLAY `#Shares the display between the 2 systems` \
opengl_why_you_no_work \
私はシンプルなGLローダプログラムを作成し、GLFWとGLEWで、私はOpenGL 2.1をサポートするための2つのバージョンを作成しました。私が書いたサンプルプログラム(いくつかのデバッグ出力呼び出しを含む)と
glxinfo|grep OpenGL
私は興味深い質問があります。私のホスト上でglxinfoコールを使用して 、私はドッキングウィンドウ画像に
OpenGL vendor string: X.Org
OpenGL renderer string: Gallium 0.4 on AMD HAWAII (DRM 2.46.0/4.8.0-58-generic, LLVM 3.8.0)
OpenGL core profile version string: 4.1 (Core Profile) Mesa 12.0.6
OpenGL core profile shading language version string: 4.10
OpenGL version string: 3.0 Mesa 12.0.6
OpenGL shading language version string: 1.30
OpenGL ES profile version string: OpenGL ES 3.0 Mesa 12.0.6
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.00
を得る:
OpenGL vendor string: VMware, Inc.
OpenGL renderer string: Gallium 0.4 on llvmpipe (LLVM 3.8, 256 bits)
OpenGL core profile version string: 3.3 (Core Profile) Mesa 12.0.6
OpenGL core profile shading language version string: 3.30
OpenGL version string: 3.0 Mesa 12.0.6
OpenGL shading language version string: 1.30
OpenGL ES profile version string: OpenGL ES 3.0 Mesa 12.0.6
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.00
なるほど、ベンダー?したがって、OpenGL 2.1用に書かれたプログラムは、以下を使用しています。
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 2);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 1);
ホストとドッカーの両方で実行されます。単純なレンダリング...しかしそれは動作します。
libGL error: failed to open drm device: Permission denied
libGL error: failed to load driver: radeonsi
私はドッキングウィンドウの画像上のOpenGL 3.2のために作られたバージョンを実行しようとすると、私は何のレンダリング、窓なし、同じ2つのエラーが出るん:それはドッキングウィンドウの画像の上にレンダリングするにもかかわらず、私はまだ、このエラーが出ます上記の、この出力:
Renderer: (null)
OpenGL version supported (null)
代わりのドッカー画像上の2.1バージョン:
Renderer: Gallium 0.4 on llvmpipe (LLVM 3.8, 256 bits)
OpenGL version supported 3.0 Mesa 12.0.6
またはホストのいずれかのバージョンを実行して結果:
Renderer: Gallium 0.4 on AMD HAWAII (DRM 2.46.0/4.8.0-58-generic, LLVM 3.8.0)
OpenGL version supported 4.1 (Core Profile) Mesa 12.0.6
これは、X.orgとVMware、Inc.のベンダーと関係があると仮定しています。これを上書き、パススルー、置き換え、または回避することはできますか?私はおそらくOpenGL 3.0用のコードを書くことができました(どこで楽しいのですか?)しかし、プログラムでもっと複雑になるとlibGLエラーが心配しています。さらに、私はOpenCLを試してみたいと思います。私は同様の問題があると確信しています。