mirror of
https://github.com/KhronosGroup/SPIRV-Cross.git
synced 2024-11-09 22:00:05 +00:00
GLSL: Add more extension ladder fallbacks for unusual integer sizes.
This commit is contained in:
parent
533aab00b6
commit
df21a99d1a
@ -1,5 +1,11 @@
|
||||
#version 450
|
||||
#if defined(GL_ARB_gpu_shader_int64)
|
||||
#extension GL_ARB_gpu_shader_int64 : require
|
||||
#elif defined(GL_NV_gpu_shader5)
|
||||
#extension GL_NV_gpu_shader5 : require
|
||||
#else
|
||||
#error No extension available for 64-bit integers.
|
||||
#endif
|
||||
#extension GL_AMD_gcn_shader : require
|
||||
layout(local_size_x = 64, local_size_y = 1, local_size_z = 1) in;
|
||||
|
||||
|
@ -1,5 +1,11 @@
|
||||
#version 450
|
||||
#if defined(GL_ARB_gpu_shader_int64)
|
||||
#extension GL_ARB_gpu_shader_int64 : require
|
||||
#elif defined(GL_NV_gpu_shader5)
|
||||
#extension GL_NV_gpu_shader5 : require
|
||||
#else
|
||||
#error No extension available for 64-bit integers.
|
||||
#endif
|
||||
#extension GL_ARB_shader_ballot : require
|
||||
#extension GL_AMD_shader_ballot : require
|
||||
layout(local_size_x = 64, local_size_y = 1, local_size_z = 1) in;
|
||||
|
@ -1,5 +1,11 @@
|
||||
#version 450
|
||||
#if defined(GL_ARB_gpu_shader_int64)
|
||||
#extension GL_ARB_gpu_shader_int64 : require
|
||||
#elif defined(GL_NV_gpu_shader5)
|
||||
#extension GL_NV_gpu_shader5 : require
|
||||
#else
|
||||
#error No extension available for 64-bit integers.
|
||||
#endif
|
||||
|
||||
layout(location = 0) out vec3 FragColor;
|
||||
layout(location = 0) flat in double vTmp;
|
||||
|
@ -1,5 +1,11 @@
|
||||
#version 450
|
||||
#if defined(GL_ARB_gpu_shader_int64)
|
||||
#extension GL_ARB_gpu_shader_int64 : require
|
||||
#elif defined(GL_NV_gpu_shader5)
|
||||
#extension GL_NV_gpu_shader5 : require
|
||||
#else
|
||||
#error No extension available for 64-bit integers.
|
||||
#endif
|
||||
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
|
||||
|
||||
struct M0
|
||||
|
@ -1,5 +1,9 @@
|
||||
#version 450
|
||||
#if defined(GL_ARB_gpu_shader_int64)
|
||||
#extension GL_ARB_gpu_shader_int64 : require
|
||||
#else
|
||||
#error No extension available for 64-bit integers.
|
||||
#endif
|
||||
#extension GL_EXT_buffer_reference : require
|
||||
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
|
||||
|
||||
|
@ -1,12 +1,20 @@
|
||||
#version 450
|
||||
#if defined(GL_AMD_gpu_shader_int16)
|
||||
#if defined(GL_EXT_shader_explicit_arithmetic_types_int16)
|
||||
#extension GL_EXT_shader_explicit_arithmetic_types_int16 : require
|
||||
#elif defined(GL_AMD_gpu_shader_int16)
|
||||
#extension GL_AMD_gpu_shader_int16 : require
|
||||
#elif defined(GL_NV_gpu_shader5)
|
||||
#extension GL_NV_gpu_shader5 : require
|
||||
#else
|
||||
#error No extension available for Int16.
|
||||
#endif
|
||||
#if defined(GL_EXT_shader_explicit_arithmetic_types_int8)
|
||||
#extension GL_EXT_shader_explicit_arithmetic_types_int8 : require
|
||||
#elif defined(GL_NV_gpu_shader5)
|
||||
#extension GL_NV_gpu_shader5 : require
|
||||
#else
|
||||
#error No extension available for Int8.
|
||||
#endif
|
||||
#if defined(GL_AMD_gpu_shader_half_float)
|
||||
#extension GL_AMD_gpu_shader_half_float : require
|
||||
#elif defined(GL_NV_gpu_shader5)
|
||||
|
@ -1,5 +1,9 @@
|
||||
#version 450
|
||||
#if defined(GL_ARB_gpu_shader_int64)
|
||||
#extension GL_ARB_gpu_shader_int64 : require
|
||||
#else
|
||||
#error No extension available for 64-bit integers.
|
||||
#endif
|
||||
#extension GL_EXT_buffer_reference : require
|
||||
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
|
||||
|
||||
|
@ -1,5 +1,9 @@
|
||||
#version 450
|
||||
#if defined(GL_ARB_gpu_shader_int64)
|
||||
#extension GL_ARB_gpu_shader_int64 : require
|
||||
#else
|
||||
#error No extension available for 64-bit integers.
|
||||
#endif
|
||||
#extension GL_EXT_buffer_reference : require
|
||||
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
|
||||
|
||||
|
@ -1,5 +1,11 @@
|
||||
#version 450
|
||||
#if defined(GL_ARB_gpu_shader_int64)
|
||||
#extension GL_ARB_gpu_shader_int64 : require
|
||||
#elif defined(GL_NV_gpu_shader5)
|
||||
#extension GL_NV_gpu_shader5 : require
|
||||
#else
|
||||
#error No extension available for 64-bit integers.
|
||||
#endif
|
||||
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
|
||||
|
||||
#ifndef SPIRV_CROSS_CONSTANT_ID_0
|
||||
|
@ -6,7 +6,9 @@
|
||||
#else
|
||||
#error No extension available for FP16.
|
||||
#endif
|
||||
#if defined(GL_AMD_gpu_shader_int16)
|
||||
#if defined(GL_EXT_shader_explicit_arithmetic_types_int16)
|
||||
#extension GL_EXT_shader_explicit_arithmetic_types_int16 : require
|
||||
#elif defined(GL_AMD_gpu_shader_int16)
|
||||
#extension GL_AMD_gpu_shader_int16 : require
|
||||
#elif defined(GL_NV_gpu_shader5)
|
||||
#extension GL_NV_gpu_shader5 : require
|
||||
|
@ -1,5 +1,7 @@
|
||||
#version 450
|
||||
#if defined(GL_AMD_gpu_shader_int16)
|
||||
#if defined(GL_EXT_shader_explicit_arithmetic_types_int16)
|
||||
#extension GL_EXT_shader_explicit_arithmetic_types_int16 : require
|
||||
#elif defined(GL_AMD_gpu_shader_int16)
|
||||
#extension GL_AMD_gpu_shader_int16 : require
|
||||
#elif defined(GL_NV_gpu_shader5)
|
||||
#extension GL_NV_gpu_shader5 : require
|
||||
|
@ -1,5 +1,7 @@
|
||||
#version 450
|
||||
#if defined(GL_AMD_gpu_shader_int16)
|
||||
#if defined(GL_EXT_shader_explicit_arithmetic_types_int16)
|
||||
#extension GL_EXT_shader_explicit_arithmetic_types_int16 : require
|
||||
#elif defined(GL_AMD_gpu_shader_int16)
|
||||
#extension GL_AMD_gpu_shader_int16 : require
|
||||
#elif defined(GL_NV_gpu_shader5)
|
||||
#extension GL_NV_gpu_shader5 : require
|
||||
|
@ -1,5 +1,11 @@
|
||||
#version 450
|
||||
#if defined(GL_ARB_gpu_shader_int64)
|
||||
#extension GL_ARB_gpu_shader_int64 : require
|
||||
#elif defined(GL_NV_gpu_shader5)
|
||||
#extension GL_NV_gpu_shader5 : require
|
||||
#else
|
||||
#error No extension available for 64-bit integers.
|
||||
#endif
|
||||
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
|
||||
|
||||
layout(binding = 0, std140) uniform UBO
|
||||
|
@ -6,7 +6,9 @@
|
||||
#else
|
||||
#error No extension available for FP16.
|
||||
#endif
|
||||
#if defined(GL_AMD_gpu_shader_int16)
|
||||
#if defined(GL_EXT_shader_explicit_arithmetic_types_int16)
|
||||
#extension GL_EXT_shader_explicit_arithmetic_types_int16 : require
|
||||
#elif defined(GL_AMD_gpu_shader_int16)
|
||||
#extension GL_AMD_gpu_shader_int16 : require
|
||||
#elif defined(GL_NV_gpu_shader5)
|
||||
#extension GL_NV_gpu_shader5 : require
|
||||
|
@ -1,5 +1,11 @@
|
||||
#version 450
|
||||
#if defined(GL_ARB_gpu_shader_int64)
|
||||
#extension GL_ARB_gpu_shader_int64 : require
|
||||
#elif defined(GL_NV_gpu_shader5)
|
||||
#extension GL_NV_gpu_shader5 : require
|
||||
#else
|
||||
#error No extension available for 64-bit integers.
|
||||
#endif
|
||||
#extension GL_AMD_gcn_shader : require
|
||||
layout(local_size_x = 64, local_size_y = 1, local_size_z = 1) in;
|
||||
|
||||
|
@ -1,5 +1,11 @@
|
||||
#version 450
|
||||
#if defined(GL_ARB_gpu_shader_int64)
|
||||
#extension GL_ARB_gpu_shader_int64 : require
|
||||
#elif defined(GL_NV_gpu_shader5)
|
||||
#extension GL_NV_gpu_shader5 : require
|
||||
#else
|
||||
#error No extension available for 64-bit integers.
|
||||
#endif
|
||||
#extension GL_ARB_shader_ballot : require
|
||||
#extension GL_AMD_shader_ballot : require
|
||||
layout(local_size_x = 64, local_size_y = 1, local_size_z = 1) in;
|
||||
|
@ -1,5 +1,11 @@
|
||||
#version 450
|
||||
#if defined(GL_ARB_gpu_shader_int64)
|
||||
#extension GL_ARB_gpu_shader_int64 : require
|
||||
#elif defined(GL_NV_gpu_shader5)
|
||||
#extension GL_NV_gpu_shader5 : require
|
||||
#else
|
||||
#error No extension available for 64-bit integers.
|
||||
#endif
|
||||
|
||||
layout(location = 0) out vec3 FragColor;
|
||||
layout(location = 0) flat in double vTmp;
|
||||
|
@ -1,5 +1,11 @@
|
||||
#version 450
|
||||
#if defined(GL_ARB_gpu_shader_int64)
|
||||
#extension GL_ARB_gpu_shader_int64 : require
|
||||
#elif defined(GL_NV_gpu_shader5)
|
||||
#extension GL_NV_gpu_shader5 : require
|
||||
#else
|
||||
#error No extension available for 64-bit integers.
|
||||
#endif
|
||||
|
||||
layout(location = 0) out vec4 FragColor;
|
||||
|
||||
|
@ -1,5 +1,11 @@
|
||||
#version 450
|
||||
#if defined(GL_ARB_gpu_shader_int64)
|
||||
#extension GL_ARB_gpu_shader_int64 : require
|
||||
#elif defined(GL_NV_gpu_shader5)
|
||||
#extension GL_NV_gpu_shader5 : require
|
||||
#else
|
||||
#error No extension available for 64-bit integers.
|
||||
#endif
|
||||
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
|
||||
|
||||
struct M0
|
||||
|
@ -1,5 +1,9 @@
|
||||
#version 450
|
||||
#if defined(GL_ARB_gpu_shader_int64)
|
||||
#extension GL_ARB_gpu_shader_int64 : require
|
||||
#else
|
||||
#error No extension available for 64-bit integers.
|
||||
#endif
|
||||
#extension GL_EXT_buffer_reference : require
|
||||
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
|
||||
|
||||
|
@ -1,12 +1,20 @@
|
||||
#version 450
|
||||
#if defined(GL_AMD_gpu_shader_int16)
|
||||
#if defined(GL_EXT_shader_explicit_arithmetic_types_int16)
|
||||
#extension GL_EXT_shader_explicit_arithmetic_types_int16 : require
|
||||
#elif defined(GL_AMD_gpu_shader_int16)
|
||||
#extension GL_AMD_gpu_shader_int16 : require
|
||||
#elif defined(GL_NV_gpu_shader5)
|
||||
#extension GL_NV_gpu_shader5 : require
|
||||
#else
|
||||
#error No extension available for Int16.
|
||||
#endif
|
||||
#if defined(GL_EXT_shader_explicit_arithmetic_types_int8)
|
||||
#extension GL_EXT_shader_explicit_arithmetic_types_int8 : require
|
||||
#elif defined(GL_NV_gpu_shader5)
|
||||
#extension GL_NV_gpu_shader5 : require
|
||||
#else
|
||||
#error No extension available for Int8.
|
||||
#endif
|
||||
#if defined(GL_AMD_gpu_shader_half_float)
|
||||
#extension GL_AMD_gpu_shader_half_float : require
|
||||
#elif defined(GL_NV_gpu_shader5)
|
||||
|
@ -405,10 +405,9 @@ void CompilerGLSL::find_static_extensions()
|
||||
}
|
||||
else if (type.basetype == SPIRType::Int64 || type.basetype == SPIRType::UInt64)
|
||||
{
|
||||
if (options.es)
|
||||
SPIRV_CROSS_THROW("64-bit integers not supported in ES profile.");
|
||||
if (!options.es)
|
||||
require_extension_internal("GL_ARB_gpu_shader_int64");
|
||||
if (options.es && options.version < 310) // GL_NV_gpu_shader5 fallback requires 310.
|
||||
SPIRV_CROSS_THROW("64-bit integers not supported in ES profile before version 310.");
|
||||
require_extension_internal("GL_ARB_gpu_shader_int64");
|
||||
}
|
||||
else if (type.basetype == SPIRType::Half)
|
||||
{
|
||||
@ -826,7 +825,20 @@ void CompilerGLSL::emit_header()
|
||||
|
||||
for (auto &ext : forced_extensions)
|
||||
{
|
||||
if (ext == "GL_EXT_shader_explicit_arithmetic_types_float16")
|
||||
if (ext == "GL_ARB_gpu_shader_int64")
|
||||
{
|
||||
statement("#if defined(GL_ARB_gpu_shader_int64)");
|
||||
statement("#extension GL_ARB_gpu_shader_int64 : require");
|
||||
if (!options.vulkan_semantics || options.es)
|
||||
{
|
||||
statement("#elif defined(GL_NV_gpu_shader5)");
|
||||
statement("#extension GL_NV_gpu_shader5 : require");
|
||||
}
|
||||
statement("#else");
|
||||
statement("#error No extension available for 64-bit integers.");
|
||||
statement("#endif");
|
||||
}
|
||||
else if (ext == "GL_EXT_shader_explicit_arithmetic_types_float16")
|
||||
{
|
||||
// Special case, this extension has a potential fallback to another vendor extension in normal GLSL.
|
||||
// GL_AMD_gpu_shader_half_float is a superset, so try that first.
|
||||
@ -846,13 +858,30 @@ void CompilerGLSL::emit_header()
|
||||
statement("#error No extension available for FP16.");
|
||||
statement("#endif");
|
||||
}
|
||||
else if (ext == "GL_EXT_shader_explicit_arithmetic_types_int8")
|
||||
{
|
||||
if (options.vulkan_semantics)
|
||||
statement("#extension GL_EXT_shader_explicit_arithmetic_types_int8 : require");
|
||||
else
|
||||
{
|
||||
statement("#if defined(GL_EXT_shader_explicit_arithmetic_types_int8)");
|
||||
statement("#extension GL_EXT_shader_explicit_arithmetic_types_int8 : require");
|
||||
statement("#elif defined(GL_NV_gpu_shader5)");
|
||||
statement("#extension GL_NV_gpu_shader5 : require");
|
||||
statement("#else");
|
||||
statement("#error No extension available for Int8.");
|
||||
statement("#endif");
|
||||
}
|
||||
}
|
||||
else if (ext == "GL_EXT_shader_explicit_arithmetic_types_int16")
|
||||
{
|
||||
if (options.vulkan_semantics)
|
||||
statement("#extension GL_EXT_shader_explicit_arithmetic_types_int16 : require");
|
||||
else
|
||||
{
|
||||
statement("#if defined(GL_AMD_gpu_shader_int16)");
|
||||
statement("#if defined(GL_EXT_shader_explicit_arithmetic_types_int16)");
|
||||
statement("#extension GL_EXT_shader_explicit_arithmetic_types_int16 : require");
|
||||
statement("#elif defined(GL_AMD_gpu_shader_int16)");
|
||||
statement("#extension GL_AMD_gpu_shader_int16 : require");
|
||||
statement("#elif defined(GL_NV_gpu_shader5)");
|
||||
statement("#extension GL_NV_gpu_shader5 : require");
|
||||
@ -5313,8 +5342,8 @@ std::string CompilerGLSL::convert_double_to_string(const SPIRConstant &c, uint32
|
||||
|
||||
uint64_t u64_value = c.scalar_u64(col, row);
|
||||
|
||||
if (options.es)
|
||||
SPIRV_CROSS_THROW("64-bit integers/float not supported in ES profile.");
|
||||
if (options.es && options.version < 310) // GL_NV_gpu_shader5 fallback requires 310.
|
||||
SPIRV_CROSS_THROW("64-bit integers not supported in ES profile before version 310.");
|
||||
require_extension_internal("GL_ARB_gpu_shader_int64");
|
||||
|
||||
char print_buffer[64];
|
||||
|
Loading…
Reference in New Issue
Block a user