mirror of
https://git.sr.ht/~eliasnaur/gio
synced 2026-07-05 01:15:35 +00:00
app/internal/cmd/convertshaders: use backend types directly
Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
+18
-67
@@ -7,9 +7,7 @@ import "gioui.org/gpu/backend"
|
|||||||
var (
|
var (
|
||||||
shader_blit_frag = [...]backend.ShaderSources{
|
shader_blit_frag = [...]backend.ShaderSources{
|
||||||
backend.ShaderSources{
|
backend.ShaderSources{
|
||||||
Uniforms: []backend.UniformLocation{
|
Uniforms: []backend.UniformLocation{backend.UniformLocation{Name: "_12._color", Type: 0x0, Size: 4, Offset: 0}},
|
||||||
{Name: "_12._color", Type: 0, Size: 4, Offset: 0},
|
|
||||||
},
|
|
||||||
UniformSize: 16,
|
UniformSize: 16,
|
||||||
GLES2: "#version 100\nprecision mediump float;\nprecision highp int;\n\nstruct Color\n{\n vec4 _color;\n};\n\nuniform Color _12;\n\nvarying vec2 vUV;\n\nvoid main()\n{\n gl_FragData[0] = _12._color;\n}\n\n",
|
GLES2: "#version 100\nprecision mediump float;\nprecision highp int;\n\nstruct Color\n{\n vec4 _color;\n};\n\nuniform Color _12;\n\nvarying vec2 vUV;\n\nvoid main()\n{\n gl_FragData[0] = _12._color;\n}\n\n",
|
||||||
/*
|
/*
|
||||||
@@ -50,10 +48,8 @@ var (
|
|||||||
HLSL: []byte(nil),
|
HLSL: []byte(nil),
|
||||||
},
|
},
|
||||||
backend.ShaderSources{
|
backend.ShaderSources{
|
||||||
Textures: []backend.TextureBinding{
|
Textures: []backend.TextureBinding{backend.TextureBinding{Name: "tex", Binding: 0}},
|
||||||
{Name: "tex", Binding: 0},
|
GLES2: "#version 100\nprecision mediump float;\nprecision highp int;\n\nuniform mediump sampler2D tex;\n\nvarying vec2 vUV;\n\nvoid main()\n{\n gl_FragData[0] = texture2D(tex, vUV);\n}\n\n",
|
||||||
},
|
|
||||||
GLES2: "#version 100\nprecision mediump float;\nprecision highp int;\n\nuniform mediump sampler2D tex;\n\nvarying vec2 vUV;\n\nvoid main()\n{\n gl_FragData[0] = texture2D(tex, vUV);\n}\n\n",
|
|
||||||
/*
|
/*
|
||||||
Texture2D<float4> tex : register(t0);
|
Texture2D<float4> tex : register(t0);
|
||||||
SamplerState _tex_sampler : register(s0);
|
SamplerState _tex_sampler : register(s0);
|
||||||
@@ -90,17 +86,8 @@ var (
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
shader_blit_vert = backend.ShaderSources{
|
shader_blit_vert = backend.ShaderSources{
|
||||||
Inputs: []backend.InputLocation{
|
Inputs: []backend.InputLocation{backend.InputLocation{Name: "pos", Location: 0, Semantic: "POSITION", SemanticIndex: 0, Type: 0x0, Size: 2}, backend.InputLocation{Name: "uv", Location: 1, Semantic: "NORMAL", SemanticIndex: 0, Type: 0x0, Size: 2}},
|
||||||
{Name: "pos", Location: 0, Semantic: "POSITION", SemanticIndex: 0, Type: 0, Size: 2},
|
Uniforms: []backend.UniformLocation{backend.UniformLocation{Name: "_15.z", Type: 0x0, Size: 1, Offset: 0}, backend.UniformLocation{Name: "_15.scale", Type: 0x0, Size: 2, Offset: 8}, backend.UniformLocation{Name: "_15.offset", Type: 0x0, Size: 2, Offset: 16}, backend.UniformLocation{Name: "_15.uvScale", Type: 0x0, Size: 2, Offset: 24}, backend.UniformLocation{Name: "_15.uvOffset", Type: 0x0, Size: 2, Offset: 32}},
|
||||||
{Name: "uv", Location: 1, Semantic: "NORMAL", SemanticIndex: 0, Type: 0, Size: 2},
|
|
||||||
},
|
|
||||||
Uniforms: []backend.UniformLocation{
|
|
||||||
{Name: "_15.z", Type: 0, Size: 1, Offset: 0},
|
|
||||||
{Name: "_15.scale", Type: 0, Size: 2, Offset: 8},
|
|
||||||
{Name: "_15.offset", Type: 0, Size: 2, Offset: 16},
|
|
||||||
{Name: "_15.uvScale", Type: 0, Size: 2, Offset: 24},
|
|
||||||
{Name: "_15.uvOffset", Type: 0, Size: 2, Offset: 32},
|
|
||||||
},
|
|
||||||
UniformSize: 40,
|
UniformSize: 40,
|
||||||
GLES2: "#version 100\n\nstruct Block\n{\n float z;\n vec2 scale;\n vec2 offset;\n vec2 uvScale;\n vec2 uvOffset;\n};\n\nuniform Block _15;\n\nattribute vec2 pos;\nvarying vec2 vUV;\nattribute vec2 uv;\n\nvoid main()\n{\n vec2 p = pos;\n p *= _15.scale;\n p += _15.offset;\n gl_Position = vec4(p, _15.z, 1.0);\n vUV = (uv * _15.uvScale) + _15.uvOffset;\n}\n\n",
|
GLES2: "#version 100\n\nstruct Block\n{\n float z;\n vec2 scale;\n vec2 offset;\n vec2 uvScale;\n vec2 uvOffset;\n};\n\nuniform Block _15;\n\nattribute vec2 pos;\nvarying vec2 vUV;\nattribute vec2 uv;\n\nvoid main()\n{\n vec2 p = pos;\n p *= _15.scale;\n p += _15.offset;\n gl_Position = vec4(p, _15.z, 1.0);\n vUV = (uv * _15.uvScale) + _15.uvOffset;\n}\n\n",
|
||||||
/*
|
/*
|
||||||
@@ -156,14 +143,10 @@ var (
|
|||||||
}
|
}
|
||||||
shader_cover_frag = [...]backend.ShaderSources{
|
shader_cover_frag = [...]backend.ShaderSources{
|
||||||
backend.ShaderSources{
|
backend.ShaderSources{
|
||||||
Uniforms: []backend.UniformLocation{
|
Uniforms: []backend.UniformLocation{backend.UniformLocation{Name: "_12._color", Type: 0x0, Size: 4, Offset: 0}},
|
||||||
{Name: "_12._color", Type: 0, Size: 4, Offset: 0},
|
|
||||||
},
|
|
||||||
UniformSize: 16,
|
UniformSize: 16,
|
||||||
Textures: []backend.TextureBinding{
|
Textures: []backend.TextureBinding{backend.TextureBinding{Name: "cover", Binding: 1}},
|
||||||
{Name: "cover", Binding: 1},
|
GLES2: "#version 100\nprecision mediump float;\nprecision highp int;\n\nstruct Color\n{\n vec4 _color;\n};\n\nuniform Color _12;\n\nuniform mediump sampler2D cover;\n\nvarying highp vec2 vCoverUV;\nvarying vec2 vUV;\n\nvoid main()\n{\n gl_FragData[0] = _12._color;\n float cover_1 = abs(texture2D(cover, vCoverUV).x);\n gl_FragData[0] *= cover_1;\n}\n\n",
|
||||||
},
|
|
||||||
GLES2: "#version 100\nprecision mediump float;\nprecision highp int;\n\nstruct Color\n{\n vec4 _color;\n};\n\nuniform Color _12;\n\nuniform mediump sampler2D cover;\n\nvarying highp vec2 vCoverUV;\nvarying vec2 vUV;\n\nvoid main()\n{\n gl_FragData[0] = _12._color;\n float cover_1 = abs(texture2D(cover, vCoverUV).x);\n gl_FragData[0] *= cover_1;\n}\n\n",
|
|
||||||
/*
|
/*
|
||||||
cbuffer Color : register(b0)
|
cbuffer Color : register(b0)
|
||||||
{
|
{
|
||||||
@@ -209,11 +192,8 @@ var (
|
|||||||
HLSL: []byte(nil),
|
HLSL: []byte(nil),
|
||||||
},
|
},
|
||||||
backend.ShaderSources{
|
backend.ShaderSources{
|
||||||
Textures: []backend.TextureBinding{
|
Textures: []backend.TextureBinding{backend.TextureBinding{Name: "tex", Binding: 0}, backend.TextureBinding{Name: "cover", Binding: 1}},
|
||||||
{Name: "tex", Binding: 0},
|
GLES2: "#version 100\nprecision mediump float;\nprecision highp int;\n\nuniform mediump sampler2D tex;\nuniform mediump sampler2D cover;\n\nvarying vec2 vUV;\nvarying highp vec2 vCoverUV;\n\nvoid main()\n{\n gl_FragData[0] = texture2D(tex, vUV);\n float cover_1 = abs(texture2D(cover, vCoverUV).x);\n gl_FragData[0] *= cover_1;\n}\n\n",
|
||||||
{Name: "cover", Binding: 1},
|
|
||||||
},
|
|
||||||
GLES2: "#version 100\nprecision mediump float;\nprecision highp int;\n\nuniform mediump sampler2D tex;\nuniform mediump sampler2D cover;\n\nvarying vec2 vUV;\nvarying highp vec2 vCoverUV;\n\nvoid main()\n{\n gl_FragData[0] = texture2D(tex, vUV);\n float cover_1 = abs(texture2D(cover, vCoverUV).x);\n gl_FragData[0] *= cover_1;\n}\n\n",
|
|
||||||
/*
|
/*
|
||||||
Texture2D<float4> tex : register(t0);
|
Texture2D<float4> tex : register(t0);
|
||||||
SamplerState _tex_sampler : register(s0);
|
SamplerState _tex_sampler : register(s0);
|
||||||
@@ -257,19 +237,8 @@ var (
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
shader_cover_vert = backend.ShaderSources{
|
shader_cover_vert = backend.ShaderSources{
|
||||||
Inputs: []backend.InputLocation{
|
Inputs: []backend.InputLocation{backend.InputLocation{Name: "pos", Location: 0, Semantic: "POSITION", SemanticIndex: 0, Type: 0x0, Size: 2}, backend.InputLocation{Name: "uv", Location: 1, Semantic: "NORMAL", SemanticIndex: 0, Type: 0x0, Size: 2}},
|
||||||
{Name: "pos", Location: 0, Semantic: "POSITION", SemanticIndex: 0, Type: 0, Size: 2},
|
Uniforms: []backend.UniformLocation{backend.UniformLocation{Name: "_19.z", Type: 0x0, Size: 1, Offset: 0}, backend.UniformLocation{Name: "_19.scale", Type: 0x0, Size: 2, Offset: 8}, backend.UniformLocation{Name: "_19.offset", Type: 0x0, Size: 2, Offset: 16}, backend.UniformLocation{Name: "_19.uvCoverScale", Type: 0x0, Size: 2, Offset: 24}, backend.UniformLocation{Name: "_19.uvCoverOffset", Type: 0x0, Size: 2, Offset: 32}, backend.UniformLocation{Name: "_19.uvScale", Type: 0x0, Size: 2, Offset: 40}, backend.UniformLocation{Name: "_19.uvOffset", Type: 0x0, Size: 2, Offset: 48}},
|
||||||
{Name: "uv", Location: 1, Semantic: "NORMAL", SemanticIndex: 0, Type: 0, Size: 2},
|
|
||||||
},
|
|
||||||
Uniforms: []backend.UniformLocation{
|
|
||||||
{Name: "_19.z", Type: 0, Size: 1, Offset: 0},
|
|
||||||
{Name: "_19.scale", Type: 0, Size: 2, Offset: 8},
|
|
||||||
{Name: "_19.offset", Type: 0, Size: 2, Offset: 16},
|
|
||||||
{Name: "_19.uvCoverScale", Type: 0, Size: 2, Offset: 24},
|
|
||||||
{Name: "_19.uvCoverOffset", Type: 0, Size: 2, Offset: 32},
|
|
||||||
{Name: "_19.uvScale", Type: 0, Size: 2, Offset: 40},
|
|
||||||
{Name: "_19.uvOffset", Type: 0, Size: 2, Offset: 48},
|
|
||||||
},
|
|
||||||
UniformSize: 56,
|
UniformSize: 56,
|
||||||
GLES2: "#version 100\n\nstruct Block\n{\n float z;\n vec2 scale;\n vec2 offset;\n vec2 uvCoverScale;\n vec2 uvCoverOffset;\n vec2 uvScale;\n vec2 uvOffset;\n};\n\nuniform Block _19;\n\nattribute vec2 pos;\nvarying vec2 vUV;\nattribute vec2 uv;\nvarying vec2 vCoverUV;\n\nvoid main()\n{\n gl_Position = vec4((pos * _19.scale) + _19.offset, _19.z, 1.0);\n vUV = (uv * _19.uvScale) + _19.uvOffset;\n vCoverUV = (uv * _19.uvCoverScale) + _19.uvCoverOffset;\n}\n\n",
|
GLES2: "#version 100\n\nstruct Block\n{\n float z;\n vec2 scale;\n vec2 offset;\n vec2 uvCoverScale;\n vec2 uvCoverOffset;\n vec2 uvScale;\n vec2 uvOffset;\n};\n\nuniform Block _19;\n\nattribute vec2 pos;\nvarying vec2 vUV;\nattribute vec2 uv;\nvarying vec2 vCoverUV;\n\nvoid main()\n{\n gl_Position = vec4((pos * _19.scale) + _19.offset, _19.z, 1.0);\n vUV = (uv * _19.uvScale) + _19.uvOffset;\n vCoverUV = (uv * _19.uvCoverScale) + _19.uvCoverOffset;\n}\n\n",
|
||||||
/*
|
/*
|
||||||
@@ -327,10 +296,8 @@ var (
|
|||||||
HLSL: []byte(nil),
|
HLSL: []byte(nil),
|
||||||
}
|
}
|
||||||
shader_intersect_frag = backend.ShaderSources{
|
shader_intersect_frag = backend.ShaderSources{
|
||||||
Textures: []backend.TextureBinding{
|
Textures: []backend.TextureBinding{backend.TextureBinding{Name: "cover", Binding: 0}},
|
||||||
{Name: "cover", Binding: 0},
|
GLES2: "#version 100\nprecision mediump float;\nprecision highp int;\n\nuniform mediump sampler2D cover;\n\nvarying highp vec2 vUV;\n\nvoid main()\n{\n float cover_1 = abs(texture2D(cover, vUV).x);\n gl_FragData[0].x = cover_1;\n}\n\n",
|
||||||
},
|
|
||||||
GLES2: "#version 100\nprecision mediump float;\nprecision highp int;\n\nuniform mediump sampler2D cover;\n\nvarying highp vec2 vUV;\n\nvoid main()\n{\n float cover_1 = abs(texture2D(cover, vUV).x);\n gl_FragData[0].x = cover_1;\n}\n\n",
|
|
||||||
/*
|
/*
|
||||||
Texture2D<float4> cover : register(t0);
|
Texture2D<float4> cover : register(t0);
|
||||||
SamplerState _cover_sampler : register(s0);
|
SamplerState _cover_sampler : register(s0);
|
||||||
@@ -367,14 +334,8 @@ var (
|
|||||||
HLSL: []byte(nil),
|
HLSL: []byte(nil),
|
||||||
}
|
}
|
||||||
shader_intersect_vert = backend.ShaderSources{
|
shader_intersect_vert = backend.ShaderSources{
|
||||||
Inputs: []backend.InputLocation{
|
Inputs: []backend.InputLocation{backend.InputLocation{Name: "pos", Location: 0, Semantic: "POSITION", SemanticIndex: 0, Type: 0x0, Size: 2}, backend.InputLocation{Name: "uv", Location: 1, Semantic: "NORMAL", SemanticIndex: 0, Type: 0x0, Size: 2}},
|
||||||
{Name: "pos", Location: 0, Semantic: "POSITION", SemanticIndex: 0, Type: 0, Size: 2},
|
Uniforms: []backend.UniformLocation{backend.UniformLocation{Name: "_40.scale", Type: 0x0, Size: 2, Offset: 0}, backend.UniformLocation{Name: "_40.offset", Type: 0x0, Size: 2, Offset: 8}},
|
||||||
{Name: "uv", Location: 1, Semantic: "NORMAL", SemanticIndex: 0, Type: 0, Size: 2},
|
|
||||||
},
|
|
||||||
Uniforms: []backend.UniformLocation{
|
|
||||||
{Name: "_40.scale", Type: 0, Size: 2, Offset: 0},
|
|
||||||
{Name: "_40.offset", Type: 0, Size: 2, Offset: 8},
|
|
||||||
},
|
|
||||||
UniformSize: 16,
|
UniformSize: 16,
|
||||||
GLES2: "#version 100\n\nstruct Block\n{\n vec2 scale;\n vec2 offset;\n};\n\nuniform Block _40;\n\nattribute vec2 pos;\nvarying vec2 vUV;\nattribute vec2 uv;\n\nvoid main()\n{\n vec2 p = pos;\n p.y = -p.y;\n gl_Position = vec4(p, 0.0, 1.0);\n vUV = (uv * _40.scale) + _40.offset;\n}\n\n",
|
GLES2: "#version 100\n\nstruct Block\n{\n vec2 scale;\n vec2 offset;\n};\n\nuniform Block _40;\n\nattribute vec2 pos;\nvarying vec2 vUV;\nattribute vec2 uv;\n\nvoid main()\n{\n vec2 p = pos;\n p.y = -p.y;\n gl_Position = vec4(p, 0.0, 1.0);\n vUV = (uv * _40.scale) + _40.offset;\n}\n\n",
|
||||||
/*
|
/*
|
||||||
@@ -489,18 +450,8 @@ var (
|
|||||||
HLSL: []byte(nil),
|
HLSL: []byte(nil),
|
||||||
}
|
}
|
||||||
shader_stencil_vert = backend.ShaderSources{
|
shader_stencil_vert = backend.ShaderSources{
|
||||||
Inputs: []backend.InputLocation{
|
Inputs: []backend.InputLocation{backend.InputLocation{Name: "corner", Location: 0, Semantic: "POSITION", SemanticIndex: 0, Type: 0x0, Size: 2}, backend.InputLocation{Name: "maxy", Location: 1, Semantic: "NORMAL", SemanticIndex: 0, Type: 0x0, Size: 1}, backend.InputLocation{Name: "from", Location: 2, Semantic: "TEXCOORD", SemanticIndex: 0, Type: 0x0, Size: 2}, backend.InputLocation{Name: "ctrl", Location: 3, Semantic: "TEXCOORD", SemanticIndex: 1, Type: 0x0, Size: 2}, backend.InputLocation{Name: "to", Location: 4, Semantic: "TEXCOORD", SemanticIndex: 2, Type: 0x0, Size: 2}},
|
||||||
{Name: "corner", Location: 0, Semantic: "POSITION", SemanticIndex: 0, Type: 0, Size: 2},
|
Uniforms: []backend.UniformLocation{backend.UniformLocation{Name: "_15.scale", Type: 0x0, Size: 2, Offset: 0}, backend.UniformLocation{Name: "_15.offset", Type: 0x0, Size: 2, Offset: 8}, backend.UniformLocation{Name: "_15.pathOffset", Type: 0x0, Size: 2, Offset: 16}},
|
||||||
{Name: "maxy", Location: 1, Semantic: "NORMAL", SemanticIndex: 0, Type: 0, Size: 1},
|
|
||||||
{Name: "from", Location: 2, Semantic: "TEXCOORD", SemanticIndex: 0, Type: 0, Size: 2},
|
|
||||||
{Name: "ctrl", Location: 3, Semantic: "TEXCOORD", SemanticIndex: 1, Type: 0, Size: 2},
|
|
||||||
{Name: "to", Location: 4, Semantic: "TEXCOORD", SemanticIndex: 2, Type: 0, Size: 2},
|
|
||||||
},
|
|
||||||
Uniforms: []backend.UniformLocation{
|
|
||||||
{Name: "_15.scale", Type: 0, Size: 2, Offset: 0},
|
|
||||||
{Name: "_15.offset", Type: 0, Size: 2, Offset: 8},
|
|
||||||
{Name: "_15.pathOffset", Type: 0, Size: 2, Offset: 16},
|
|
||||||
},
|
|
||||||
UniformSize: 24,
|
UniformSize: 24,
|
||||||
GLES2: "#version 100\n\nstruct Block\n{\n vec2 scale;\n vec2 offset;\n vec2 pathOffset;\n};\n\nuniform Block _15;\n\nattribute vec2 from;\nattribute vec2 ctrl;\nattribute vec2 to;\nattribute float maxy;\nattribute vec2 corner;\nvarying vec2 vFrom;\nvarying vec2 vCtrl;\nvarying vec2 vTo;\n\nvoid main()\n{\n vec2 from_1 = from + _15.pathOffset;\n vec2 ctrl_1 = ctrl + _15.pathOffset;\n vec2 to_1 = to + _15.pathOffset;\n float maxy_1 = maxy + _15.pathOffset.y;\n vec2 pos;\n if (corner.x > 0.0)\n {\n pos.x = max(max(from_1.x, ctrl_1.x), to_1.x) + 1.0;\n }\n else\n {\n pos.x = min(min(from_1.x, ctrl_1.x), to_1.x) - 1.0;\n }\n if (corner.y > 0.0)\n {\n pos.y = maxy_1 + 1.0;\n }\n else\n {\n pos.y = min(min(from_1.y, ctrl_1.y), to_1.y) - 1.0;\n }\n vFrom = from_1 - pos;\n vCtrl = ctrl_1 - pos;\n vTo = to_1 - pos;\n pos *= _15.scale;\n pos += _15.offset;\n gl_Position = vec4(pos, 1.0, 1.0);\n}\n\n",
|
GLES2: "#version 100\n\nstruct Block\n{\n vec2 scale;\n vec2 offset;\n vec2 pathOffset;\n};\n\nuniform Block _15;\n\nattribute vec2 from;\nattribute vec2 ctrl;\nattribute vec2 to;\nattribute float maxy;\nattribute vec2 corner;\nvarying vec2 vFrom;\nvarying vec2 vCtrl;\nvarying vec2 vTo;\n\nvoid main()\n{\n vec2 from_1 = from + _15.pathOffset;\n vec2 ctrl_1 = ctrl + _15.pathOffset;\n vec2 to_1 = to + _15.pathOffset;\n float maxy_1 = maxy + _15.pathOffset.y;\n vec2 pos;\n if (corner.x > 0.0)\n {\n pos.x = max(max(from_1.x, ctrl_1.x), to_1.x) + 1.0;\n }\n else\n {\n pos.x = min(min(from_1.x, ctrl_1.x), to_1.x) - 1.0;\n }\n if (corner.y > 0.0)\n {\n pos.y = maxy_1 + 1.0;\n }\n else\n {\n pos.y = min(min(from_1.y, ctrl_1.y), to_1.y) - 1.0;\n }\n vFrom = from_1 - pos;\n vCtrl = ctrl_1 - pos;\n vTo = to_1 - pos;\n pos *= _15.scale;\n pos += _15.offset;\n gl_Position = vec4(pos, 1.0, 1.0);\n}\n\n",
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -15,6 +15,8 @@ import (
|
|||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
"text/template"
|
"text/template"
|
||||||
|
|
||||||
|
"gioui.org/gpu/backend"
|
||||||
)
|
)
|
||||||
|
|
||||||
// This program generates shader variants for
|
// This program generates shader variants for
|
||||||
@@ -28,38 +30,6 @@ type shaderArgs struct {
|
|||||||
Header string
|
Header string
|
||||||
}
|
}
|
||||||
|
|
||||||
// TextureBinding matches gpu.TextureBinding.
|
|
||||||
type TextureBinding struct {
|
|
||||||
Name string
|
|
||||||
Binding int
|
|
||||||
}
|
|
||||||
|
|
||||||
// InputLocation matches gpu.InputLocation.
|
|
||||||
type InputLocation struct {
|
|
||||||
Name string
|
|
||||||
Location int
|
|
||||||
Semantic string
|
|
||||||
SemanticIndex int
|
|
||||||
|
|
||||||
Type DataType
|
|
||||||
Size int
|
|
||||||
}
|
|
||||||
|
|
||||||
type DataType uint8
|
|
||||||
|
|
||||||
// UniformLocation matches gpu.UniformLocation.
|
|
||||||
type UniformLocation struct {
|
|
||||||
Name string
|
|
||||||
Type DataType
|
|
||||||
Size int
|
|
||||||
Offset int
|
|
||||||
}
|
|
||||||
|
|
||||||
const (
|
|
||||||
DataTypeFloat DataType = iota
|
|
||||||
DataTypeShort
|
|
||||||
)
|
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
if err := generate(); err != nil {
|
if err := generate(); err != nil {
|
||||||
@@ -97,9 +67,9 @@ func generate() error {
|
|||||||
gles2 string
|
gles2 string
|
||||||
hlslSrc string
|
hlslSrc string
|
||||||
hlsl []byte
|
hlsl []byte
|
||||||
inputs []InputLocation
|
inputs []backend.InputLocation
|
||||||
uniforms []UniformLocation
|
uniforms []backend.UniformLocation
|
||||||
textures []TextureBinding
|
textures []backend.TextureBinding
|
||||||
uniformSize int
|
uniformSize int
|
||||||
}
|
}
|
||||||
args := [nvariants]shaderArgs{
|
args := [nvariants]shaderArgs{
|
||||||
@@ -163,29 +133,16 @@ func generate() error {
|
|||||||
for _, src := range variants {
|
for _, src := range variants {
|
||||||
fmt.Fprintf(&out, "backend.ShaderSources{\n")
|
fmt.Fprintf(&out, "backend.ShaderSources{\n")
|
||||||
if len(src.inputs) > 0 {
|
if len(src.inputs) > 0 {
|
||||||
fmt.Fprintf(&out, "Inputs: []backend.InputLocation{\n")
|
fmt.Fprintf(&out, "Inputs: %#v,\n", src.inputs)
|
||||||
for _, inp := range src.inputs {
|
|
||||||
fmt.Fprintf(&out, "{Name: %q, Location: %d, Semantic: %q, ", inp.Name, inp.Location, inp.Semantic)
|
|
||||||
fmt.Fprintf(&out, "SemanticIndex: %d, Type: %d, Size: %d},\n", inp.SemanticIndex, inp.Type, inp.Size)
|
|
||||||
}
|
|
||||||
fmt.Fprintf(&out, "},\n")
|
|
||||||
}
|
}
|
||||||
if len(src.uniforms) > 0 {
|
if len(src.uniforms) > 0 {
|
||||||
fmt.Fprintf(&out, "Uniforms: []backend.UniformLocation{\n")
|
fmt.Fprintf(&out, "Uniforms: %#v,\n", src.uniforms)
|
||||||
for _, u := range src.uniforms {
|
|
||||||
fmt.Fprintf(&out, "{Name: %q, Type: %d, Size: %d, Offset: %d},\n", u.Name, u.Type, u.Size, u.Offset)
|
|
||||||
}
|
|
||||||
fmt.Fprintf(&out, "},\n")
|
|
||||||
}
|
}
|
||||||
if src.uniformSize != 0 {
|
if src.uniformSize != 0 {
|
||||||
fmt.Fprintf(&out, "UniformSize: %d,\n", src.uniformSize)
|
fmt.Fprintf(&out, "UniformSize: %d,\n", src.uniformSize)
|
||||||
}
|
}
|
||||||
if len(src.textures) > 0 {
|
if len(src.textures) > 0 {
|
||||||
fmt.Fprintf(&out, "Textures: []backend.TextureBinding{\n")
|
fmt.Fprintf(&out, "Textures: %#v,\n", src.textures)
|
||||||
for _, t := range src.textures {
|
|
||||||
fmt.Fprintf(&out, "{Name: %q, Binding: %d},\n", t.Name, t.Binding)
|
|
||||||
}
|
|
||||||
fmt.Fprintf(&out, "},\n")
|
|
||||||
}
|
}
|
||||||
fmt.Fprintf(&out, "GLES2: %#v,\n", src.gles2)
|
fmt.Fprintf(&out, "GLES2: %#v,\n", src.gles2)
|
||||||
fmt.Fprintf(&out, "/*\n%s\n*/\n", src.hlslSrc)
|
fmt.Fprintf(&out, "/*\n%s\n*/\n", src.hlslSrc)
|
||||||
@@ -211,7 +168,7 @@ func generate() error {
|
|||||||
return ioutil.WriteFile("shaders.go", gosrc, 0644)
|
return ioutil.WriteFile("shaders.go", gosrc, 0644)
|
||||||
}
|
}
|
||||||
|
|
||||||
func parseReflection(jsonData []byte) ([]InputLocation, []UniformLocation, []TextureBinding, int, error) {
|
func parseReflection(jsonData []byte) ([]backend.InputLocation, []backend.UniformLocation, []backend.TextureBinding, int, error) {
|
||||||
type InputReflection struct {
|
type InputReflection struct {
|
||||||
ID int `json:"id"`
|
ID int `json:"id"`
|
||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
@@ -255,14 +212,14 @@ func parseReflection(jsonData []byte) ([]InputLocation, []UniformLocation, []Tex
|
|||||||
if err := json.Unmarshal(jsonData, &reflect); err != nil {
|
if err := json.Unmarshal(jsonData, &reflect); err != nil {
|
||||||
return nil, nil, nil, 0, fmt.Errorf("parseReflection: %v", err)
|
return nil, nil, nil, 0, fmt.Errorf("parseReflection: %v", err)
|
||||||
}
|
}
|
||||||
var inputs []InputLocation
|
var inputs []backend.InputLocation
|
||||||
inputRef := reflect.VS.Inputs
|
inputRef := reflect.VS.Inputs
|
||||||
for _, input := range inputRef {
|
for _, input := range inputRef {
|
||||||
dataType, dataSize, err := parseDataType(input.Type)
|
dataType, dataSize, err := parseDataType(input.Type)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, nil, 0, fmt.Errorf("parseReflection: %v", err)
|
return nil, nil, nil, 0, fmt.Errorf("parseReflection: %v", err)
|
||||||
}
|
}
|
||||||
inputs = append(inputs, InputLocation{
|
inputs = append(inputs, backend.InputLocation{
|
||||||
Name: input.Name,
|
Name: input.Name,
|
||||||
Location: input.Location,
|
Location: input.Location,
|
||||||
Semantic: input.Semantic,
|
Semantic: input.Semantic,
|
||||||
@@ -274,7 +231,7 @@ func parseReflection(jsonData []byte) ([]InputLocation, []UniformLocation, []Tex
|
|||||||
sort.Slice(inputs, func(i, j int) bool {
|
sort.Slice(inputs, func(i, j int) bool {
|
||||||
return inputs[i].Location < inputs[j].Location
|
return inputs[i].Location < inputs[j].Location
|
||||||
})
|
})
|
||||||
var ublocks []UniformLocation
|
var ublocks []backend.UniformLocation
|
||||||
shaderBlocks := reflect.VS.UniformBuffers
|
shaderBlocks := reflect.VS.UniformBuffers
|
||||||
if len(shaderBlocks) == 0 {
|
if len(shaderBlocks) == 0 {
|
||||||
shaderBlocks = reflect.FS.UniformBuffers
|
shaderBlocks = reflect.FS.UniformBuffers
|
||||||
@@ -286,7 +243,7 @@ func parseReflection(jsonData []byte) ([]InputLocation, []UniformLocation, []Tex
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, nil, 0, fmt.Errorf("parseReflection: %v", err)
|
return nil, nil, nil, 0, fmt.Errorf("parseReflection: %v", err)
|
||||||
}
|
}
|
||||||
ublocks = append(ublocks, UniformLocation{
|
ublocks = append(ublocks, backend.UniformLocation{
|
||||||
// Synthetic name generated by glslcc.
|
// Synthetic name generated by glslcc.
|
||||||
Name: fmt.Sprintf("_%d.%s", block.ID, member.Name),
|
Name: fmt.Sprintf("_%d.%s", block.ID, member.Name),
|
||||||
Type: dataType,
|
Type: dataType,
|
||||||
@@ -300,9 +257,9 @@ func parseReflection(jsonData []byte) ([]InputLocation, []UniformLocation, []Tex
|
|||||||
if len(textures) == 0 {
|
if len(textures) == 0 {
|
||||||
textures = reflect.FS.Textures
|
textures = reflect.FS.Textures
|
||||||
}
|
}
|
||||||
var texBinds []TextureBinding
|
var texBinds []backend.TextureBinding
|
||||||
for _, texture := range textures {
|
for _, texture := range textures {
|
||||||
texBinds = append(texBinds, TextureBinding{
|
texBinds = append(texBinds, backend.TextureBinding{
|
||||||
Name: texture.Name,
|
Name: texture.Name,
|
||||||
Binding: texture.Binding,
|
Binding: texture.Binding,
|
||||||
})
|
})
|
||||||
@@ -310,16 +267,16 @@ func parseReflection(jsonData []byte) ([]InputLocation, []UniformLocation, []Tex
|
|||||||
return inputs, ublocks, texBinds, blockOffset, nil
|
return inputs, ublocks, texBinds, blockOffset, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func parseDataType(t string) (DataType, int, error) {
|
func parseDataType(t string) (backend.DataType, int, error) {
|
||||||
switch t {
|
switch t {
|
||||||
case "float":
|
case "float":
|
||||||
return DataTypeFloat, 1, nil
|
return backend.DataTypeFloat, 1, nil
|
||||||
case "float2":
|
case "float2":
|
||||||
return DataTypeFloat, 2, nil
|
return backend.DataTypeFloat, 2, nil
|
||||||
case "float3":
|
case "float3":
|
||||||
return DataTypeFloat, 3, nil
|
return backend.DataTypeFloat, 3, nil
|
||||||
case "float4":
|
case "float4":
|
||||||
return DataTypeFloat, 4, nil
|
return backend.DataTypeFloat, 4, nil
|
||||||
default:
|
default:
|
||||||
return 0, 0, fmt.Errorf("unsupported input data type: %s", t)
|
return 0, 0, fmt.Errorf("unsupported input data type: %s", t)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user