「SPIR-VからGLSLを生成する」の版間の差分
ナビゲーションに移動
検索に移動
Administrator (トーク | 投稿記録) |
Administrator (トーク | 投稿記録) |
||
(他の1人の利用者による、間の1版が非表示) | |||
4行目: | 4行目: | ||
==準備== | ==準備== | ||
− | [[Vulkan]] [[SDK]] | + | [[Vulkan]] [[SDK]]には[[SPIR-V]]から[[GLSL]]を生成する[[逆コンパイラ]]「[[SPIRV-Cross]]」が含まれている。まずは[[ダウンロード]]だ。今回は[[macOS]]版をダウンロードしてきた。 |
− | |||
*https://vulkan.lunarg.com/sdk/home | *https://vulkan.lunarg.com/sdk/home | ||
14行目: | 13行目: | ||
[[SPIR-V]]ファイルは「[[DirectX Shader CompilerでSPIR-Vを出力する]]」で生成したものを使った。[[GLSL]]ではなく[[HLSL]]から生成した[[SPIR-V]]ファイルだ。 | [[SPIR-V]]ファイルは「[[DirectX Shader CompilerでSPIR-Vを出力する]]」で生成したものを使った。[[GLSL]]ではなく[[HLSL]]から生成した[[SPIR-V]]ファイルだ。 | ||
− | ==GLSL 4.60 (OpenGL 4.6) == | + | ==GLSL 4.60 (OpenGL 4.6)== |
まずは最新のGLSL 4.60形式で出力してみる。 | まずは最新のGLSL 4.60形式で出力してみる。 | ||
ちなみにオプションを一切指定しない場合はGLSL 4.50となるようだ(2019年11月時点)。 | ちなみにオプションを一切指定しない場合はGLSL 4.50となるようだ(2019年11月時点)。 | ||
41行目: | 40行目: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | ==GLSL ES 3.00 (OpenGL ES 3.0) == | + | ==GLSL ES 3.00 (OpenGL ES 3.0)== |
OpenGL ES 3.0向けのオプションを指定して試してみる。 | OpenGL ES 3.0向けのオプションを指定して試してみる。 | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
67行目: | 66行目: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | ==GLSL ES 1.00 (OpenGL ES 2.0 / WebGL 1.0) == | + | ==GLSL ES 1.00 (OpenGL ES 2.0 / WebGL 1.0)== |
次にOpenGL ES 2.0と[[WebGL]] 1.0向けのオプションも試してみる。 | 次にOpenGL ES 2.0と[[WebGL]] 1.0向けのオプションも試してみる。 | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
103行目: | 102行目: | ||
*[[MacにMoltenVKを入れてVulkanを使ってみる]] | *[[MacにMoltenVKを入れてVulkanを使ってみる]] | ||
+ | [[category: 3DCG]] | ||
+ | [[category: シェーディング言語]] | ||
[[category: SPIR-V]] | [[category: SPIR-V]] | ||
[[category: GLSL]] | [[category: GLSL]] | ||
[[category: HLSL]] | [[category: HLSL]] | ||
[[category: Vulkan]] | [[category: Vulkan]] |
2020年5月19日 (火) 02:10時点における最新版
SPIR-Vから様々なシェーディング言語に逆コンパイルできると色々捗ると思われる。 SPIR-VはHLSLとGLSLから生成できるので相互変換もできることになる。 夢が広がりんぐ。
目次
準備[編集 | ソースを編集]
Vulkan SDKにはSPIR-VからGLSLを生成する逆コンパイラ「SPIRV-Cross」が含まれている。まずはダウンロードだ。今回はmacOS版をダウンロードしてきた。
Vulkan SDKを展開すると以下に逆コンパイラがある(mac版の場合)。
./macOS/bin/spirv-cross
SPIR-Vファイルは「DirectX Shader CompilerでSPIR-Vを出力する」で生成したものを使った。GLSLではなくHLSLから生成したSPIR-Vファイルだ。
GLSL 4.60 (OpenGL 4.6)[編集 | ソースを編集]
まずは最新のGLSL 4.60形式で出力してみる。 ちなみにオプションを一切指定しない場合はGLSL 4.50となるようだ(2019年11月時点)。
./spirv-cross --version 460 light_vs.spv
ちゃんと出た。
#version 460
layout(binding = 0, std140) uniform type_Globals
{
layout(row_major) mat4 WorldViewProjection;
} _Globals;
layout(location = 0) in vec4 in_var_POSITION0;
layout(location = 1) in vec4 in_var_COLOR0;
layout(location = 0) out vec4 out_var_COLOR0;
void main()
{
gl_Position = _Globals.WorldViewProjection * in_var_POSITION0;
out_var_COLOR0 = in_var_COLOR0;
}
GLSL ES 3.00 (OpenGL ES 3.0)[編集 | ソースを編集]
OpenGL ES 3.0向けのオプションを指定して試してみる。
./spirv-cross --version 300 --es light_vs.spv
こちらもちゃんと出た。GLSL4.60指定時と比べるとout部分が異なる。
#version 300 es
layout(std140) uniform type_Globals
{
layout(row_major) mat4 WorldViewProjection;
} _Globals;
layout(location = 0) in vec4 in_var_POSITION0;
layout(location = 1) in vec4 in_var_COLOR0;
out vec4 out_var_COLOR0;
void main()
{
gl_Position = _Globals.WorldViewProjection * in_var_POSITION0;
out_var_COLOR0 = in_var_COLOR0;
}
GLSL ES 1.00 (OpenGL ES 2.0 / WebGL 1.0)[編集 | ソースを編集]
次にOpenGL ES 2.0とWebGL 1.0向けのオプションも試してみる。
./spirv-cross --version 100 --es light_vs.spv
昔ながらのattributeとvaryingを使った形式になった。
#version 100
struct type_Globals
{
mat4 WorldViewProjection;
};
uniform type_Globals _Globals;
attribute vec4 in_var_POSITION0;
attribute vec4 in_var_COLOR0;
varying vec4 out_var_COLOR0;
void main()
{
gl_Position = in_var_POSITION0 * _Globals.WorldViewProjection;
out_var_COLOR0 = in_var_COLOR0;
}