GLSL: Support NV barycentrics.
This commit is contained in:
parent
05ea055096
commit
707312b83a
19
reference/opt/shaders/frag/barycentric-nv.frag
Normal file
19
reference/opt/shaders/frag/barycentric-nv.frag
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#version 450
|
||||||
|
#extension GL_NV_fragment_shader_barycentric : require
|
||||||
|
|
||||||
|
layout(binding = 0, std430) readonly buffer Vertices
|
||||||
|
{
|
||||||
|
vec2 uvs[];
|
||||||
|
} _19;
|
||||||
|
|
||||||
|
layout(location = 0) out vec2 value;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
int _23 = 3 * gl_PrimitiveID;
|
||||||
|
int _32 = _23 + 1;
|
||||||
|
int _39 = _23 + 2;
|
||||||
|
value = ((_19.uvs[_23] * gl_BaryCoordNV.x) + (_19.uvs[_32] * gl_BaryCoordNV.y)) + (_19.uvs[_39] * gl_BaryCoordNV.z);
|
||||||
|
value += (((_19.uvs[_23] * gl_BaryCoordNoPerspNV.x) + (_19.uvs[_32] * gl_BaryCoordNoPerspNV.y)) + (_19.uvs[_39] * gl_BaryCoordNoPerspNV.z));
|
||||||
|
}
|
||||||
|
|
20
reference/shaders/frag/barycentric-nv.frag
Normal file
20
reference/shaders/frag/barycentric-nv.frag
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
#version 450
|
||||||
|
#extension GL_NV_fragment_shader_barycentric : require
|
||||||
|
|
||||||
|
layout(binding = 0, std430) readonly buffer Vertices
|
||||||
|
{
|
||||||
|
vec2 uvs[];
|
||||||
|
} _19;
|
||||||
|
|
||||||
|
layout(location = 0) out vec2 value;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
int prim = gl_PrimitiveID;
|
||||||
|
vec2 uv0 = _19.uvs[(3 * prim) + 0];
|
||||||
|
vec2 uv1 = _19.uvs[(3 * prim) + 1];
|
||||||
|
vec2 uv2 = _19.uvs[(3 * prim) + 2];
|
||||||
|
value = ((uv0 * gl_BaryCoordNV.x) + (uv1 * gl_BaryCoordNV.y)) + (uv2 * gl_BaryCoordNV.z);
|
||||||
|
value += (((uv0 * gl_BaryCoordNoPerspNV.x) + (uv1 * gl_BaryCoordNoPerspNV.y)) + (uv2 * gl_BaryCoordNoPerspNV.z));
|
||||||
|
}
|
||||||
|
|
18
shaders/frag/barycentric-nv.frag
Normal file
18
shaders/frag/barycentric-nv.frag
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
#version 450
|
||||||
|
#extension GL_NV_fragment_shader_barycentric : require
|
||||||
|
|
||||||
|
layout(location = 0) out vec2 value;
|
||||||
|
|
||||||
|
layout(set = 0, binding = 0) readonly buffer Vertices
|
||||||
|
{
|
||||||
|
vec2 uvs[];
|
||||||
|
};
|
||||||
|
|
||||||
|
void main () {
|
||||||
|
int prim = gl_PrimitiveID;
|
||||||
|
vec2 uv0 = uvs[3 * prim + 0];
|
||||||
|
vec2 uv1 = uvs[3 * prim + 1];
|
||||||
|
vec2 uv2 = uvs[3 * prim + 2];
|
||||||
|
value = gl_BaryCoordNV.x * uv0 + gl_BaryCoordNV.y * uv1 + gl_BaryCoordNV.z * uv2;
|
||||||
|
value += gl_BaryCoordNoPerspNV.x * uv0 + gl_BaryCoordNoPerspNV.y * uv1 + gl_BaryCoordNoPerspNV.z * uv2;
|
||||||
|
}
|
@ -6156,6 +6156,26 @@ string CompilerGLSL::builtin_to_glsl(BuiltIn builtin, StorageClass storage)
|
|||||||
case BuiltInIncomingRayFlagsNV:
|
case BuiltInIncomingRayFlagsNV:
|
||||||
return "gl_IncomingRayFlagsNV";
|
return "gl_IncomingRayFlagsNV";
|
||||||
|
|
||||||
|
case BuiltInBaryCoordNV:
|
||||||
|
{
|
||||||
|
if (options.es && options.version < 320)
|
||||||
|
SPIRV_CROSS_THROW("gl_BaryCoordNV requires ESSL 320.");
|
||||||
|
else if (!options.es && options.version < 450)
|
||||||
|
SPIRV_CROSS_THROW("gl_BaryCoordNV requires GLSL 450.");
|
||||||
|
require_extension_internal("GL_NV_fragment_shader_barycentric");
|
||||||
|
return "gl_BaryCoordNV";
|
||||||
|
}
|
||||||
|
|
||||||
|
case BuiltInBaryCoordNoPerspNV:
|
||||||
|
{
|
||||||
|
if (options.es && options.version < 320)
|
||||||
|
SPIRV_CROSS_THROW("gl_BaryCoordNoPerspNV requires ESSL 320.");
|
||||||
|
else if (!options.es && options.version < 450)
|
||||||
|
SPIRV_CROSS_THROW("gl_BaryCoordNoPerspNV requires GLSL 450.");
|
||||||
|
require_extension_internal("GL_NV_fragment_shader_barycentric");
|
||||||
|
return "gl_BaryCoordNoPerspNV";
|
||||||
|
}
|
||||||
|
|
||||||
case BuiltInFragStencilRefEXT:
|
case BuiltInFragStencilRefEXT:
|
||||||
{
|
{
|
||||||
if (!options.es)
|
if (!options.es)
|
||||||
|
Loading…
Reference in New Issue
Block a user