<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>https://monobook.org/w/index.php?action=history&amp;feed=atom&amp;title=SPIR-V%E3%81%8B%E3%82%89HLSL%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B</id>
	<title>SPIR-VからHLSLを生成する - 版の履歴</title>
	<link rel="self" type="application/atom+xml" href="https://monobook.org/w/index.php?action=history&amp;feed=atom&amp;title=SPIR-V%E3%81%8B%E3%82%89HLSL%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B"/>
	<link rel="alternate" type="text/html" href="https://monobook.org/w/index.php?title=SPIR-V%E3%81%8B%E3%82%89HLSL%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B&amp;action=history"/>
	<updated>2026-06-05T01:07:22Z</updated>
	<subtitle>このウィキのこのページに関する変更履歴</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://monobook.org/w/index.php?title=SPIR-V%E3%81%8B%E3%82%89HLSL%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B&amp;diff=12969&amp;oldid=prev</id>
		<title>2020年5月19日 (火) 02:11にAdministratorによる</title>
		<link rel="alternate" type="text/html" href="https://monobook.org/w/index.php?title=SPIR-V%E3%81%8B%E3%82%89HLSL%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B&amp;diff=12969&amp;oldid=prev"/>
		<updated>2020-05-19T02:11:06Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ja&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← 古い版&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2020年5月19日 (火) 02:11時点における版&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l135&quot;&gt;135行目:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;135行目:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[MacにMoltenVKを入れてVulkanを使ってみる]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[MacにMoltenVKを入れてVulkanを使ってみる]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[category: 3DCG]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[category: シェーディング言語]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[category: SPIR-V]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[category: SPIR-V]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[category: HLSL]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[category: HLSL]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[category: Vulkan]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[category: Vulkan]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Administrator</name></author>
	</entry>
	<entry>
		<id>https://monobook.org/w/index.php?title=SPIR-V%E3%81%8B%E3%82%89HLSL%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B&amp;diff=11457&amp;oldid=prev</id>
		<title>2019年11月1日 (金) 07:24にimported&gt;Administratorによる</title>
		<link rel="alternate" type="text/html" href="https://monobook.org/w/index.php?title=SPIR-V%E3%81%8B%E3%82%89HLSL%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B&amp;diff=11457&amp;oldid=prev"/>
		<updated>2019-11-01T07:24:20Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新規ページ&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[SPIR-V]]から様々な[[シェーディング言語]]に[[逆コンパイル]]できると色々捗ると思われる。&lt;br /&gt;
[[SPIR-V]]は[[HLSL]]と[[GLSL]]から生成できるので相互変換もできることになる。&lt;br /&gt;
[[夢が広がりんぐ]]。&lt;br /&gt;
&lt;br /&gt;
==準備==&lt;br /&gt;
[[Vulkan]] [[SDK]]に[[SPIR-V]]から[[GLSL]]を生成する[[逆コンパイラ]]が含まれている。&lt;br /&gt;
まずは[[ダウンロード]]だ。今回は[[macOS]]版をダウンロードしてきた。&lt;br /&gt;
&lt;br /&gt;
*https://vulkan.lunarg.com/sdk/home&lt;br /&gt;
&lt;br /&gt;
Vulkan SDKを展開すると以下に逆コンパイラがある（mac版の場合）。&lt;br /&gt;
 ./macOS/bin/spirv-cross&lt;br /&gt;
&lt;br /&gt;
[[SPIR-V]]ファイルは「[[DirectX Shader CompilerでSPIR-Vを出力する]]」で生成したものを使った。[[GLSL]]ではなく[[HLSL]]から生成した[[SPIR-V]]ファイルだ。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
spirv-crossのHLSL変換は「[[シェーダーモデル]]3.0以降」をサポートしている。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SM 6.0 ==&lt;br /&gt;
実行&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./spirv-cross --hlsl --shader-model 60 light_vs.spv &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
結果。出力用の変数にgl_PositionなどのGLSLのシステム変数名が使われている。なかなか衝撃的な[[ソースコード]]だ。&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;hlsl&amp;quot;&amp;gt;&lt;br /&gt;
cbuffer type_Globals : register(b0, space0)&lt;br /&gt;
{&lt;br /&gt;
    column_major float4x4 _Globals_WorldViewProjection : packoffset(c0);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
static float4 gl_Position;&lt;br /&gt;
static float4 in_var_POSITION0;&lt;br /&gt;
static float4 in_var_COLOR0;&lt;br /&gt;
static float4 out_var_COLOR0;&lt;br /&gt;
&lt;br /&gt;
struct SPIRV_Cross_Input&lt;br /&gt;
{&lt;br /&gt;
    float4 in_var_POSITION0 : TEXCOORD0;&lt;br /&gt;
    float4 in_var_COLOR0 : TEXCOORD1;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct SPIRV_Cross_Output&lt;br /&gt;
{&lt;br /&gt;
    float4 out_var_COLOR0 : TEXCOORD0;&lt;br /&gt;
    float4 gl_Position : SV_Position;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void vert_main()&lt;br /&gt;
{&lt;br /&gt;
    gl_Position = mul(in_var_POSITION0, _Globals_WorldViewProjection);&lt;br /&gt;
    out_var_COLOR0 = in_var_COLOR0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input)&lt;br /&gt;
{&lt;br /&gt;
    in_var_POSITION0 = stage_input.in_var_POSITION0;&lt;br /&gt;
    in_var_COLOR0 = stage_input.in_var_COLOR0;&lt;br /&gt;
    vert_main();&lt;br /&gt;
    SPIRV_Cross_Output stage_output;&lt;br /&gt;
    stage_output.gl_Position = gl_Position;&lt;br /&gt;
    stage_output.out_var_COLOR0 = out_var_COLOR0;&lt;br /&gt;
    return stage_output;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SM 3.0 ==&lt;br /&gt;
実行&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./spirv-cross --hlsl --shader-model 30 light_vs.spv &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
結果。&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;hlsl&amp;quot;&amp;gt;&lt;br /&gt;
cbuffer type_Globals : register(b0)&lt;br /&gt;
{&lt;br /&gt;
    column_major float4x4 _Globals_WorldViewProjection : packoffset(c0);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
uniform float4 gl_HalfPixel;&lt;br /&gt;
&lt;br /&gt;
static float4 gl_Position;&lt;br /&gt;
static float4 in_var_POSITION0;&lt;br /&gt;
static float4 in_var_COLOR0;&lt;br /&gt;
static float4 out_var_COLOR0;&lt;br /&gt;
&lt;br /&gt;
struct SPIRV_Cross_Input&lt;br /&gt;
{&lt;br /&gt;
    float4 in_var_POSITION0 : TEXCOORD0;&lt;br /&gt;
    float4 in_var_COLOR0 : TEXCOORD1;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct SPIRV_Cross_Output&lt;br /&gt;
{&lt;br /&gt;
    float4 out_var_COLOR0 : TEXCOORD0;&lt;br /&gt;
    float4 gl_Position : POSITION;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void vert_main()&lt;br /&gt;
{&lt;br /&gt;
    gl_Position = mul(in_var_POSITION0, _Globals_WorldViewProjection);&lt;br /&gt;
    out_var_COLOR0 = in_var_COLOR0;&lt;br /&gt;
    gl_Position.x = gl_Position.x - gl_HalfPixel.x * gl_Position.w;&lt;br /&gt;
    gl_Position.y = gl_Position.y + gl_HalfPixel.y * gl_Position.w;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input)&lt;br /&gt;
{&lt;br /&gt;
    in_var_POSITION0 = stage_input.in_var_POSITION0;&lt;br /&gt;
    in_var_COLOR0 = stage_input.in_var_COLOR0;&lt;br /&gt;
    vert_main();&lt;br /&gt;
    SPIRV_Cross_Output stage_output;&lt;br /&gt;
    stage_output.gl_Position = gl_Position;&lt;br /&gt;
    stage_output.out_var_COLOR0 = out_var_COLOR0;&lt;br /&gt;
    return stage_output;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 備考 ==&lt;br /&gt;
[[SPIR-V]]経由で出力したコードを比較した限りでは以下のような結論に達した。&lt;br /&gt;
* HLSLで書く&lt;br /&gt;
* HLSLはHLSLのまま使う&lt;br /&gt;
* HLSLからGLSLを生成する&lt;br /&gt;
&lt;br /&gt;
比較量は少ないでまだ正確なことは言えないが、&lt;br /&gt;
GLSLで書いてHLSLへ変換という逆パターンは危険そうな雰囲気がある。&lt;br /&gt;
&lt;br /&gt;
== 関連項目 ==&lt;br /&gt;
* [[SPIR-VからHLSLを生成する]]&lt;br /&gt;
* [[GLSLのversionディレクティブ一覧]]&lt;br /&gt;
* [[DirectX Shader CompilerでSPIR-Vを出力する]]&lt;br /&gt;
* [[MacでDirectX Shader Compilerをビルドする]]&lt;br /&gt;
* [[MacにMoltenVKを入れてVulkanを使ってみる]]&lt;br /&gt;
&lt;br /&gt;
[[category: SPIR-V]]&lt;br /&gt;
[[category: HLSL]]&lt;br /&gt;
[[category: Vulkan]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Administrator</name></author>
	</entry>
</feed>