mirror of
https://git.sr.ht/~eliasnaur/gio
synced 2026-07-01 07:35:40 +00:00
gpu: pack 2D transforms in vec4 values
Instead of separate 2d scale and transform, pack them into a single 4d value. Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
+8
-14
@@ -224,7 +224,7 @@ type blitter struct {
|
||||
type blitColUniforms struct {
|
||||
vert struct {
|
||||
blitUniforms
|
||||
_ [8]byte // Padding to a multiple of 16.
|
||||
_ [10]byte // Padding to a multiple of 16.
|
||||
}
|
||||
frag struct {
|
||||
colorUniforms
|
||||
@@ -234,7 +234,7 @@ type blitColUniforms struct {
|
||||
type blitTexUniforms struct {
|
||||
vert struct {
|
||||
blitUniforms
|
||||
_ [8]byte // Padding to a multiple of 16.
|
||||
_ [10]byte // Padding to a multiple of 16.
|
||||
}
|
||||
}
|
||||
|
||||
@@ -250,12 +250,9 @@ type program struct {
|
||||
}
|
||||
|
||||
type blitUniforms struct {
|
||||
z float32
|
||||
_ float32 // Padding.
|
||||
scale [2]float32
|
||||
offset [2]float32
|
||||
uvScale [2]float32
|
||||
uvOffset [2]float32
|
||||
transform [4]float32
|
||||
uvTransform [4]float32
|
||||
z float32
|
||||
}
|
||||
|
||||
type colorUniforms struct {
|
||||
@@ -554,8 +551,7 @@ func (r *renderer) intersectPath(p *pathOp, clip image.Rectangle) {
|
||||
fbo := r.pather.stenciler.cover(p.place.Idx)
|
||||
r.ctx.BindTexture(0, fbo.tex)
|
||||
coverScale, coverOff := texSpaceTransform(toRectF(uv), fbo.size)
|
||||
r.pather.stenciler.iprog.uniforms.vert.uvScale = [2]float32{coverScale.X, coverScale.Y}
|
||||
r.pather.stenciler.iprog.uniforms.vert.uvOffset = [2]float32{coverOff.X, coverOff.Y}
|
||||
r.pather.stenciler.iprog.uniforms.vert.uvTransform = [4]float32{coverScale.X, coverScale.Y, coverOff.X, coverOff.Y}
|
||||
r.pather.stenciler.iprog.prog.UploadUniforms()
|
||||
r.ctx.DrawArrays(backend.DrawModeTriangleStrip, 0, 4)
|
||||
}
|
||||
@@ -911,13 +907,11 @@ func (b *blitter) blit(z float32, mat materialType, col [4]float32, scale, off,
|
||||
b.colUniforms.frag.color = col
|
||||
uniforms = &b.colUniforms.vert.blitUniforms
|
||||
case materialTexture:
|
||||
b.texUniforms.vert.uvScale = [2]float32{uvScale.X, uvScale.Y}
|
||||
b.texUniforms.vert.uvOffset = [2]float32{uvOff.X, uvOff.Y}
|
||||
b.texUniforms.vert.uvTransform = [4]float32{uvScale.X, uvScale.Y, uvOff.X, uvOff.Y}
|
||||
uniforms = &b.texUniforms.vert.blitUniforms
|
||||
}
|
||||
uniforms.z = z
|
||||
uniforms.scale = [2]float32{scale.X, scale.Y}
|
||||
uniforms.offset = [2]float32{off.X, off.Y}
|
||||
uniforms.transform = [4]float32{scale.X, scale.Y, off.X, off.Y}
|
||||
p.UploadUniforms()
|
||||
b.ctx.DrawArrays(backend.DrawModeTriangleStrip, 0, 4)
|
||||
}
|
||||
|
||||
+12
-22
@@ -35,14 +35,14 @@ type coverer struct {
|
||||
type coverTexUniforms struct {
|
||||
vert struct {
|
||||
coverUniforms
|
||||
_ [8]byte // Padding to multiple of 16.
|
||||
_ [12]byte // Padding to multiple of 16.
|
||||
}
|
||||
}
|
||||
|
||||
type coverColUniforms struct {
|
||||
vert struct {
|
||||
coverUniforms
|
||||
_ [8]byte // Padding to multiple of 16.
|
||||
_ [12]byte // Padding to multiple of 16.
|
||||
}
|
||||
frag struct {
|
||||
colorUniforms
|
||||
@@ -50,14 +50,10 @@ type coverColUniforms struct {
|
||||
}
|
||||
|
||||
type coverUniforms struct {
|
||||
z float32
|
||||
_ float32 // Padding.
|
||||
scale [2]float32
|
||||
offset [2]float32
|
||||
uvCoverScale [2]float32
|
||||
uvCoverOffset [2]float32
|
||||
uvScale [2]float32
|
||||
uvOffset [2]float32
|
||||
transform [4]float32
|
||||
uvCoverTransform [4]float32
|
||||
uvTransform [4]float32
|
||||
z float32
|
||||
}
|
||||
|
||||
type stenciler struct {
|
||||
@@ -79,8 +75,7 @@ type stenciler struct {
|
||||
|
||||
type stencilUniforms struct {
|
||||
vert struct {
|
||||
scale [2]float32
|
||||
offset [2]float32
|
||||
transform [4]float32
|
||||
pathOffset [2]float32
|
||||
_ [8]byte // Padding to multiple of 16.
|
||||
}
|
||||
@@ -88,8 +83,7 @@ type stencilUniforms struct {
|
||||
|
||||
type intersectUniforms struct {
|
||||
vert struct {
|
||||
uvScale [2]float32
|
||||
uvOffset [2]float32
|
||||
uvTransform [4]float32
|
||||
}
|
||||
}
|
||||
|
||||
@@ -329,8 +323,7 @@ func (s *stenciler) stencilPath(bounds image.Rectangle, offset f32.Point, uv ima
|
||||
texSize := f32.Point{X: float32(bounds.Dx()), Y: float32(bounds.Dy())}
|
||||
scale := f32.Point{X: 2 / texSize.X, Y: 2 / texSize.Y}
|
||||
orig := f32.Point{X: -1 - float32(bounds.Min.X)*2/texSize.X, Y: -1 - float32(bounds.Min.Y)*2/texSize.Y}
|
||||
s.prog.uniforms.vert.scale = [2]float32{scale.X, scale.Y}
|
||||
s.prog.uniforms.vert.offset = [2]float32{orig.X, orig.Y}
|
||||
s.prog.uniforms.vert.transform = [4]float32{scale.X, scale.Y, orig.X, orig.Y}
|
||||
s.prog.uniforms.vert.pathOffset = [2]float32{offset.X, offset.Y}
|
||||
s.prog.prog.UploadUniforms()
|
||||
// Draw in batches that fit in uint16 indices.
|
||||
@@ -361,15 +354,12 @@ func (c *coverer) cover(z float32, mat materialType, col [4]float32, scale, off,
|
||||
c.colUniforms.frag.color = col
|
||||
uniforms = &c.colUniforms.vert.coverUniforms
|
||||
case materialTexture:
|
||||
c.texUniforms.vert.uvScale = [2]float32{uvScale.X, uvScale.Y}
|
||||
c.texUniforms.vert.uvOffset = [2]float32{uvOff.X, uvOff.Y}
|
||||
c.texUniforms.vert.uvTransform = [4]float32{uvScale.X, uvScale.Y, uvOff.X, uvOff.Y}
|
||||
uniforms = &c.texUniforms.vert.coverUniforms
|
||||
}
|
||||
uniforms.z = z
|
||||
uniforms.scale = [2]float32{scale.X, scale.Y}
|
||||
uniforms.offset = [2]float32{off.X, off.Y}
|
||||
uniforms.uvCoverScale = [2]float32{coverScale.X, coverScale.Y}
|
||||
uniforms.uvCoverOffset = [2]float32{coverOff.X, coverOff.Y}
|
||||
uniforms.transform = [4]float32{scale.X, scale.Y, off.X, off.Y}
|
||||
uniforms.uvCoverTransform = [4]float32{coverScale.X, coverScale.Y, coverOff.X, coverOff.Y}
|
||||
p.UploadUniforms()
|
||||
c.ctx.DrawArrays(backend.DrawModeTriangleStrip, 0, 4)
|
||||
}
|
||||
|
||||
+39
-49
@@ -94,19 +94,17 @@ var (
|
||||
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}},
|
||||
Uniforms: backend.UniformsReflection{
|
||||
Blocks: []backend.UniformBlock{backend.UniformBlock{Name: "Block", Binding: 0}},
|
||||
Locations: []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}},
|
||||
Size: 40,
|
||||
Locations: []backend.UniformLocation{backend.UniformLocation{Name: "_16.transform", Type: 0x0, Size: 4, Offset: 0}, backend.UniformLocation{Name: "_16.uvTransform", Type: 0x0, Size: 4, Offset: 16}, backend.UniformLocation{Name: "_16.z", Type: 0x0, Size: 1, Offset: 32}},
|
||||
Size: 36,
|
||||
},
|
||||
GLSL100ES: "#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",
|
||||
GLSL300ES: "#version 300 es\n\nlayout(std140) uniform Block\n{\n float z;\n vec2 scale;\n vec2 offset;\n vec2 uvScale;\n vec2 uvOffset;\n} _15;\n\nlayout(location = 0) in vec2 pos;\nout vec2 vUV;\nlayout(location = 1) in 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",
|
||||
GLSL100ES: "#version 100\n\nstruct Block\n{\n vec4 transform;\n vec4 uvTransform;\n float z;\n};\n\nuniform Block _16;\n\nattribute vec2 pos;\nvarying vec2 vUV;\nattribute vec2 uv;\n\nvoid main()\n{\n vec2 p = (pos * _16.transform.xy) + _16.transform.zw;\n gl_Position = vec4(p, _16.z, 1.0);\n vUV = (uv * _16.uvTransform.xy) + _16.uvTransform.zw;\n}\n\n",
|
||||
GLSL300ES: "#version 300 es\n\nlayout(std140) uniform Block\n{\n vec4 transform;\n vec4 uvTransform;\n float z;\n} _16;\n\nlayout(location = 0) in vec2 pos;\nout vec2 vUV;\nlayout(location = 1) in vec2 uv;\n\nvoid main()\n{\n vec2 p = (pos * _16.transform.xy) + _16.transform.zw;\n gl_Position = vec4(p, _16.z, 1.0);\n vUV = (uv * _16.uvTransform.xy) + _16.uvTransform.zw;\n}\n\n",
|
||||
/*
|
||||
cbuffer Block : register(b0)
|
||||
{
|
||||
float _15_z : packoffset(c0);
|
||||
float2 _15_scale : packoffset(c0.z);
|
||||
float2 _15_offset : packoffset(c1);
|
||||
float2 _15_uvScale : packoffset(c1.z);
|
||||
float2 _15_uvOffset : packoffset(c2);
|
||||
float4 _16_transform : packoffset(c0);
|
||||
float4 _16_uvTransform : packoffset(c1);
|
||||
float _16_z : packoffset(c2);
|
||||
};
|
||||
|
||||
|
||||
@@ -129,11 +127,9 @@ var (
|
||||
|
||||
void vert_main()
|
||||
{
|
||||
float2 p = pos;
|
||||
p *= _15_scale;
|
||||
p += _15_offset;
|
||||
gl_Position = float4(p, _15_z, 1.0f);
|
||||
vUV = (uv * _15_uvScale) + _15_uvOffset;
|
||||
float2 p = (pos * _16_transform.xy) + _16_transform.zw;
|
||||
gl_Position = float4(p, _16_z, 1.0f);
|
||||
vUV = (uv * _16_uvTransform.xy) + _16_uvTransform.zw;
|
||||
}
|
||||
|
||||
SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input)
|
||||
@@ -254,21 +250,18 @@ var (
|
||||
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}},
|
||||
Uniforms: backend.UniformsReflection{
|
||||
Blocks: []backend.UniformBlock{backend.UniformBlock{Name: "Block", Binding: 0}},
|
||||
Locations: []backend.UniformLocation{backend.UniformLocation{Name: "_58.z", Type: 0x0, Size: 1, Offset: 0}, backend.UniformLocation{Name: "_58.scale", Type: 0x0, Size: 2, Offset: 8}, backend.UniformLocation{Name: "_58.offset", Type: 0x0, Size: 2, Offset: 16}, backend.UniformLocation{Name: "_58.uvCoverScale", Type: 0x0, Size: 2, Offset: 24}, backend.UniformLocation{Name: "_58.uvCoverOffset", Type: 0x0, Size: 2, Offset: 32}, backend.UniformLocation{Name: "_58.uvScale", Type: 0x0, Size: 2, Offset: 40}, backend.UniformLocation{Name: "_58.uvOffset", Type: 0x0, Size: 2, Offset: 48}},
|
||||
Size: 56,
|
||||
Locations: []backend.UniformLocation{backend.UniformLocation{Name: "_58.transform", Type: 0x0, Size: 4, Offset: 0}, backend.UniformLocation{Name: "_58.uvCoverTransform", Type: 0x0, Size: 4, Offset: 16}, backend.UniformLocation{Name: "_58.uvTransform", Type: 0x0, Size: 4, Offset: 32}, backend.UniformLocation{Name: "_58.z", Type: 0x0, Size: 1, Offset: 48}},
|
||||
Size: 52,
|
||||
},
|
||||
GLSL100ES: "#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 _58;\n\nattribute vec2 pos;\nvarying vec2 vUV;\nattribute vec2 uv;\nvarying vec2 vCoverUV;\n\nvec3[2] fboTextureTransform()\n{\n vec3 t[2];\n t[0] = vec3(1.0, 0.0, 0.0);\n t[1] = vec3(0.0, 1.0, 0.0);\n return t;\n}\n\nvec3 transform3x2(vec3 t[2], vec3 v)\n{\n return vec3(dot(t[0], v), dot(t[1], v), dot(vec3(0.0, 0.0, 1.0), v));\n}\n\nvoid main()\n{\n gl_Position = vec4((pos * _58.scale) + _58.offset, _58.z, 1.0);\n vUV = (uv * _58.uvScale) + _58.uvOffset;\n vec3 fboTrans[2] = fboTextureTransform();\n vec3 param[2] = fboTrans;\n vec3 param_1 = vec3(uv, 1.0);\n vec3 uv3 = transform3x2(param, param_1);\n vCoverUV = ((uv3 * vec3(_58.uvCoverScale, 1.0)) + vec3(_58.uvCoverOffset, 0.0)).xy;\n}\n\n",
|
||||
GLSL300ES: "#version 300 es\n\nlayout(std140) uniform Block\n{\n float z;\n vec2 scale;\n vec2 offset;\n vec2 uvCoverScale;\n vec2 uvCoverOffset;\n vec2 uvScale;\n vec2 uvOffset;\n} _58;\n\nlayout(location = 0) in vec2 pos;\nout vec2 vUV;\nlayout(location = 1) in vec2 uv;\nout vec2 vCoverUV;\n\nvec3[2] fboTextureTransform()\n{\n vec3 t[2];\n t[0] = vec3(1.0, 0.0, 0.0);\n t[1] = vec3(0.0, 1.0, 0.0);\n return t;\n}\n\nvec3 transform3x2(vec3 t[2], vec3 v)\n{\n return vec3(dot(t[0], v), dot(t[1], v), dot(vec3(0.0, 0.0, 1.0), v));\n}\n\nvoid main()\n{\n gl_Position = vec4((pos * _58.scale) + _58.offset, _58.z, 1.0);\n vUV = (uv * _58.uvScale) + _58.uvOffset;\n vec3 fboTrans[2] = fboTextureTransform();\n vec3 param[2] = fboTrans;\n vec3 param_1 = vec3(uv, 1.0);\n vec3 uv3 = transform3x2(param, param_1);\n vCoverUV = ((uv3 * vec3(_58.uvCoverScale, 1.0)) + vec3(_58.uvCoverOffset, 0.0)).xy;\n}\n\n",
|
||||
GLSL100ES: "#version 100\n\nstruct Block\n{\n vec4 transform;\n vec4 uvCoverTransform;\n vec4 uvTransform;\n float z;\n};\n\nuniform Block _58;\n\nattribute vec2 pos;\nvarying vec2 vUV;\nattribute vec2 uv;\nvarying vec2 vCoverUV;\n\nvec3[2] fboTextureTransform()\n{\n vec3 t[2];\n t[0] = vec3(1.0, 0.0, 0.0);\n t[1] = vec3(0.0, 1.0, 0.0);\n return t;\n}\n\nvec3 transform3x2(vec3 t[2], vec3 v)\n{\n return vec3(dot(t[0], v), dot(t[1], v), dot(vec3(0.0, 0.0, 1.0), v));\n}\n\nvoid main()\n{\n gl_Position = vec4((pos * _58.transform.xy) + _58.transform.zw, _58.z, 1.0);\n vUV = (uv * _58.uvTransform.xy) + _58.uvTransform.zw;\n vec3 fboTrans[2] = fboTextureTransform();\n vec3 param[2] = fboTrans;\n vec3 param_1 = vec3(uv, 1.0);\n vec3 uv3 = transform3x2(param, param_1);\n vCoverUV = ((uv3 * vec3(_58.uvCoverTransform.xy, 1.0)) + vec3(_58.uvCoverTransform.zw, 0.0)).xy;\n}\n\n",
|
||||
GLSL300ES: "#version 300 es\n\nlayout(std140) uniform Block\n{\n vec4 transform;\n vec4 uvCoverTransform;\n vec4 uvTransform;\n float z;\n} _58;\n\nlayout(location = 0) in vec2 pos;\nout vec2 vUV;\nlayout(location = 1) in vec2 uv;\nout vec2 vCoverUV;\n\nvec3[2] fboTextureTransform()\n{\n vec3 t[2];\n t[0] = vec3(1.0, 0.0, 0.0);\n t[1] = vec3(0.0, 1.0, 0.0);\n return t;\n}\n\nvec3 transform3x2(vec3 t[2], vec3 v)\n{\n return vec3(dot(t[0], v), dot(t[1], v), dot(vec3(0.0, 0.0, 1.0), v));\n}\n\nvoid main()\n{\n gl_Position = vec4((pos * _58.transform.xy) + _58.transform.zw, _58.z, 1.0);\n vUV = (uv * _58.uvTransform.xy) + _58.uvTransform.zw;\n vec3 fboTrans[2] = fboTextureTransform();\n vec3 param[2] = fboTrans;\n vec3 param_1 = vec3(uv, 1.0);\n vec3 uv3 = transform3x2(param, param_1);\n vCoverUV = ((uv3 * vec3(_58.uvCoverTransform.xy, 1.0)) + vec3(_58.uvCoverTransform.zw, 0.0)).xy;\n}\n\n",
|
||||
/*
|
||||
cbuffer Block : register(b0)
|
||||
{
|
||||
float _58_z : packoffset(c0);
|
||||
float2 _58_scale : packoffset(c0.z);
|
||||
float2 _58_offset : packoffset(c1);
|
||||
float2 _58_uvCoverScale : packoffset(c1.z);
|
||||
float2 _58_uvCoverOffset : packoffset(c2);
|
||||
float2 _58_uvScale : packoffset(c2.z);
|
||||
float2 _58_uvOffset : packoffset(c3);
|
||||
float4 _58_transform : packoffset(c0);
|
||||
float4 _58_uvCoverTransform : packoffset(c1);
|
||||
float4 _58_uvTransform : packoffset(c2);
|
||||
float _58_z : packoffset(c3);
|
||||
};
|
||||
|
||||
|
||||
@@ -306,15 +299,15 @@ var (
|
||||
|
||||
void vert_main()
|
||||
{
|
||||
gl_Position = float4((pos * _58_scale) + _58_offset, _58_z, 1.0f);
|
||||
vUV = (uv * _58_uvScale) + _58_uvOffset;
|
||||
float3 _88[2];
|
||||
fboTextureTransform(_88);
|
||||
float3 fboTrans[2] = _88;
|
||||
gl_Position = float4((pos * _58_transform.xy) + _58_transform.zw, _58_z, 1.0f);
|
||||
vUV = (uv * _58_uvTransform.xy) + _58_uvTransform.zw;
|
||||
float3 _91[2];
|
||||
fboTextureTransform(_91);
|
||||
float3 fboTrans[2] = _91;
|
||||
float3 param[2] = fboTrans;
|
||||
float3 param_1 = float3(uv, 1.0f);
|
||||
float3 uv3 = transform3x2(param, param_1);
|
||||
vCoverUV = ((uv3 * float3(_58_uvCoverScale, 1.0f)) + float3(_58_uvCoverOffset, 0.0f)).xy;
|
||||
vCoverUV = ((uv3 * float3(_58_uvCoverTransform.xy, 1.0f)) + float3(_58_uvCoverTransform.zw, 0.0f)).xy;
|
||||
}
|
||||
|
||||
SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input)
|
||||
@@ -375,16 +368,15 @@ var (
|
||||
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}},
|
||||
Uniforms: backend.UniformsReflection{
|
||||
Blocks: []backend.UniformBlock{backend.UniformBlock{Name: "Block", Binding: 0}},
|
||||
Locations: []backend.UniformLocation{backend.UniformLocation{Name: "_40.scale", Type: 0x0, Size: 2, Offset: 0}, backend.UniformLocation{Name: "_40.offset", Type: 0x0, Size: 2, Offset: 8}},
|
||||
Locations: []backend.UniformLocation{backend.UniformLocation{Name: "_40.uvTransform", Type: 0x0, Size: 4, Offset: 0}},
|
||||
Size: 16,
|
||||
},
|
||||
GLSL100ES: "#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",
|
||||
GLSL300ES: "#version 300 es\n\nlayout(std140) uniform Block\n{\n vec2 scale;\n vec2 offset;\n} _40;\n\nlayout(location = 0) in vec2 pos;\nout vec2 vUV;\nlayout(location = 1) in 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",
|
||||
GLSL100ES: "#version 100\n\nstruct Block\n{\n vec4 uvTransform;\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.uvTransform.xy) + _40.uvTransform.zw;\n}\n\n",
|
||||
GLSL300ES: "#version 300 es\n\nlayout(std140) uniform Block\n{\n vec4 uvTransform;\n} _40;\n\nlayout(location = 0) in vec2 pos;\nout vec2 vUV;\nlayout(location = 1) in 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.uvTransform.xy) + _40.uvTransform.zw;\n}\n\n",
|
||||
/*
|
||||
cbuffer Block : register(b0)
|
||||
{
|
||||
float2 _40_scale : packoffset(c0);
|
||||
float2 _40_offset : packoffset(c0.z);
|
||||
float4 _40_uvTransform : packoffset(c0);
|
||||
};
|
||||
|
||||
|
||||
@@ -410,7 +402,7 @@ var (
|
||||
float2 p = pos;
|
||||
p.y = -p.y;
|
||||
gl_Position = float4(p, 0.0f, 1.0f);
|
||||
vUV = (uv * _40_scale) + _40_offset;
|
||||
vUV = (uv * _40_uvTransform.xy) + _40_uvTransform.zw;
|
||||
}
|
||||
|
||||
SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input)
|
||||
@@ -496,17 +488,16 @@ var (
|
||||
Inputs: []backend.InputLocation{backend.InputLocation{Name: "corner", Location: 0, Semantic: "POSITION", SemanticIndex: 0, Type: 0x1, 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}},
|
||||
Uniforms: backend.UniformsReflection{
|
||||
Blocks: []backend.UniformBlock{backend.UniformBlock{Name: "Block", Binding: 0}},
|
||||
Locations: []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}},
|
||||
Locations: []backend.UniformLocation{backend.UniformLocation{Name: "_16.transform", Type: 0x0, Size: 4, Offset: 0}, backend.UniformLocation{Name: "_16.pathOffset", Type: 0x0, Size: 2, Offset: 16}},
|
||||
Size: 24,
|
||||
},
|
||||
GLSL100ES: "#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 ivec2 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)\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)\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",
|
||||
GLSL300ES: "#version 300 es\n\nlayout(std140) uniform Block\n{\n vec2 scale;\n vec2 offset;\n vec2 pathOffset;\n} _15;\n\nlayout(location = 2) in vec2 from;\nlayout(location = 3) in vec2 ctrl;\nlayout(location = 4) in vec2 to;\nlayout(location = 1) in float maxy;\nlayout(location = 0) in ivec2 corner;\nout vec2 vFrom;\nout vec2 vCtrl;\nout 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)\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)\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",
|
||||
GLSL100ES: "#version 100\n\nstruct Block\n{\n vec4 transform;\n vec2 pathOffset;\n};\n\nuniform Block _16;\n\nattribute vec2 from;\nattribute vec2 ctrl;\nattribute vec2 to;\nattribute float maxy;\nattribute ivec2 corner;\nvarying vec2 vFrom;\nvarying vec2 vCtrl;\nvarying vec2 vTo;\n\nvoid main()\n{\n vec2 from_1 = from + _16.pathOffset;\n vec2 ctrl_1 = ctrl + _16.pathOffset;\n vec2 to_1 = to + _16.pathOffset;\n float maxy_1 = maxy + _16.pathOffset.y;\n vec2 pos;\n if (corner.x > 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)\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 = (pos * _16.transform.xy) + _16.transform.zw;\n gl_Position = vec4(pos, 1.0, 1.0);\n}\n\n",
|
||||
GLSL300ES: "#version 300 es\n\nlayout(std140) uniform Block\n{\n vec4 transform;\n vec2 pathOffset;\n} _16;\n\nlayout(location = 2) in vec2 from;\nlayout(location = 3) in vec2 ctrl;\nlayout(location = 4) in vec2 to;\nlayout(location = 1) in float maxy;\nlayout(location = 0) in ivec2 corner;\nout vec2 vFrom;\nout vec2 vCtrl;\nout vec2 vTo;\n\nvoid main()\n{\n vec2 from_1 = from + _16.pathOffset;\n vec2 ctrl_1 = ctrl + _16.pathOffset;\n vec2 to_1 = to + _16.pathOffset;\n float maxy_1 = maxy + _16.pathOffset.y;\n vec2 pos;\n if (corner.x > 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)\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 = (pos * _16.transform.xy) + _16.transform.zw;\n gl_Position = vec4(pos, 1.0, 1.0);\n}\n\n",
|
||||
/*
|
||||
cbuffer Block : register(b0)
|
||||
{
|
||||
float2 _15_scale : packoffset(c0);
|
||||
float2 _15_offset : packoffset(c0.z);
|
||||
float2 _15_pathOffset : packoffset(c1);
|
||||
float4 _16_transform : packoffset(c0);
|
||||
float2 _16_pathOffset : packoffset(c1);
|
||||
};
|
||||
|
||||
|
||||
@@ -539,10 +530,10 @@ var (
|
||||
|
||||
void vert_main()
|
||||
{
|
||||
float2 from_1 = from + _15_pathOffset;
|
||||
float2 ctrl_1 = ctrl + _15_pathOffset;
|
||||
float2 to_1 = to + _15_pathOffset;
|
||||
float maxy_1 = maxy + _15_pathOffset.y;
|
||||
float2 from_1 = from + _16_pathOffset;
|
||||
float2 ctrl_1 = ctrl + _16_pathOffset;
|
||||
float2 to_1 = to + _16_pathOffset;
|
||||
float maxy_1 = maxy + _16_pathOffset.y;
|
||||
float2 pos;
|
||||
if (corner.x > 0)
|
||||
{
|
||||
@@ -563,8 +554,7 @@ var (
|
||||
vFrom = from_1 - pos;
|
||||
vCtrl = ctrl_1 - pos;
|
||||
vTo = to_1 - pos;
|
||||
pos *= _15_scale;
|
||||
pos += _15_offset;
|
||||
pos = (pos * _16_transform.xy) + _16_transform.zw;
|
||||
gl_Position = float4(pos, 1.0f, 1.0f);
|
||||
}
|
||||
|
||||
|
||||
@@ -5,11 +5,9 @@
|
||||
precision highp float;
|
||||
|
||||
layout(binding = 0) uniform Block {
|
||||
vec4 transform;
|
||||
vec4 uvTransform;
|
||||
float z;
|
||||
vec2 scale;
|
||||
vec2 offset;
|
||||
vec2 uvScale;
|
||||
vec2 uvOffset;
|
||||
};
|
||||
|
||||
layout(location = 0) in vec2 pos;
|
||||
@@ -19,9 +17,7 @@ layout(location = 1) in vec2 uv;
|
||||
layout(location = 0) out vec2 vUV;
|
||||
|
||||
void main() {
|
||||
vec2 p = pos;
|
||||
p *= scale;
|
||||
p += offset;
|
||||
vec2 p = pos*transform.xy + transform.zw;
|
||||
gl_Position = vec4(p, z, 1);
|
||||
vUV = uv*uvScale + uvOffset;
|
||||
vUV = uv*uvTransform.xy + uvTransform.zw;
|
||||
}
|
||||
|
||||
@@ -7,13 +7,10 @@ precision highp float;
|
||||
#include <common.inc>
|
||||
|
||||
layout(binding = 0) uniform Block {
|
||||
vec4 transform;
|
||||
vec4 uvCoverTransform;
|
||||
vec4 uvTransform;
|
||||
float z;
|
||||
vec2 scale;
|
||||
vec2 offset;
|
||||
vec2 uvCoverScale;
|
||||
vec2 uvCoverOffset;
|
||||
vec2 uvScale;
|
||||
vec2 uvOffset;
|
||||
};
|
||||
|
||||
layout(location = 0) in vec2 pos;
|
||||
@@ -24,9 +21,9 @@ layout(location = 1) in vec2 uv;
|
||||
layout(location = 1) out vec2 vUV;
|
||||
|
||||
void main() {
|
||||
gl_Position = vec4(pos*scale + offset, z, 1);
|
||||
vUV = uv*uvScale + uvOffset;
|
||||
gl_Position = vec4(pos*transform.xy + transform.zw, z, 1);
|
||||
vUV = uv*uvTransform.xy + uvTransform.zw;
|
||||
vec3[2] fboTrans = fboTextureTransform();
|
||||
vec3 uv3 = transform3x2(fboTrans, vec3(uv, 1.0));
|
||||
vCoverUV = (uv3*vec3(uvCoverScale, 1.0)+vec3(uvCoverOffset, 0.0)).xy;
|
||||
vCoverUV = (uv3*vec3(uvCoverTransform.xy, 1.0)+vec3(uvCoverTransform.zw, 0.0)).xy;
|
||||
}
|
||||
|
||||
@@ -8,8 +8,7 @@ layout(location = 0) in vec2 pos;
|
||||
layout(location = 1) in vec2 uv;
|
||||
|
||||
layout(binding = 0) uniform Block {
|
||||
vec2 scale;
|
||||
vec2 offset;
|
||||
vec4 uvTransform;
|
||||
};
|
||||
|
||||
layout(location = 0) out vec2 vUV;
|
||||
@@ -18,5 +17,5 @@ void main() {
|
||||
vec2 p = pos;
|
||||
p.y = -p.y;
|
||||
gl_Position = vec4(p, 0, 1);
|
||||
vUV = uv*scale + offset;
|
||||
vUV = uv*uvTransform.xy + uvTransform.zw;
|
||||
}
|
||||
|
||||
@@ -5,8 +5,7 @@
|
||||
precision highp float;
|
||||
|
||||
layout(binding = 0) uniform Block {
|
||||
vec2 scale;
|
||||
vec2 offset;
|
||||
vec4 transform;
|
||||
vec2 pathOffset;
|
||||
};
|
||||
|
||||
@@ -46,8 +45,7 @@ void main() {
|
||||
vFrom = from-pos;
|
||||
vCtrl = ctrl-pos;
|
||||
vTo = to-pos;
|
||||
pos *= scale;
|
||||
pos += offset;
|
||||
pos = pos*transform.xy + transform.zw;
|
||||
gl_Position = vec4(pos, 1, 1);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user