aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Neto <dneto@google.com>2022-01-27 12:02:25 -0500
committerDavid Neto <dneto@google.com>2022-01-27 12:53:40 -0500
commit50c1da3c0c82279741081b0503a590e777d18238 (patch)
tree078bf7c6a5a8feb5fbc57aae4c8f46aa0f129781
parente72186b66bb90ed06aaf15cbdc9a053581a0616b (diff)
downloadshaderc-50c1da3c0c82279741081b0503a590e777d18238.tar.gz
Support Vulkan 1.3
When compiling to Vulkan 1.3, SPIR-V 1.6 is generated by default. Update DEPS to point to dependencies supporting Vulkan 1.3 SPIRV-Toosl v2022.1 Glslang as of 2022-01-27
-rw-r--r--DEPS6
-rw-r--r--glslc/src/main.cc5
-rw-r--r--glslc/test/option_target_env.py10
-rw-r--r--glslc/test/parameter_tests.py2
-rw-r--r--libshaderc/include/shaderc/env.h1
-rw-r--r--libshaderc/src/shaderc.cc4
-rw-r--r--libshaderc_util/include/libshaderc_util/compiler.h1
-rw-r--r--libshaderc_util/src/compiler.cc3
-rw-r--r--libshaderc_util/src/compiler_test.cc2
-rw-r--r--libshaderc_util/src/spirv_tools_wrapper.cc2
10 files changed, 32 insertions, 4 deletions
diff --git a/DEPS b/DEPS
index bc28706..fa71e3e 100644
--- a/DEPS
+++ b/DEPS
@@ -5,11 +5,11 @@ vars = {
'khronos_git': 'https://github.com/KhronosGroup',
'effcee_revision' : '2ec8f8738118cc483b67c04a759fee53496c5659',
- 'glslang_revision': '9b20b25138bfe916173c9341075b996be14baa69',
+ 'glslang_revision': '9ebd8ff6c1d2c401cff3037cd798814001c92947',
'googletest_revision': '389cb68b87193358358ae87cc56d257fd0d80189',
're2_revision': '7107ebc4fbf7205151d8d2a57b2fc6e7853125d4',
- 'spirv_headers_revision': 'eddd4dfc930f1374a70797460240a501c7d333f7',
- 'spirv_tools_revision': '7d768812e20296c877a44ce0633d71f952fbf83c',
+ 'spirv_headers_revision': 'b42ba6d92faf6b4938e6f22ddd186dbdacc98d78',
+ 'spirv_tools_revision': 'b1877de5cd776117050bd42f08d04b52bce16099',
}
deps = {
diff --git a/glslc/src/main.cc b/glslc/src/main.cc
index c291387..54ae3ff 100644
--- a/glslc/src/main.cc
+++ b/glslc/src/main.cc
@@ -159,6 +159,7 @@ Options:
vulkan1.0 # The default
vulkan1.1
vulkan1.2
+ vulkan1.3
vulkan # Same as vulkan1.0
opengl4.5
opengl # Same as opengl4.5
@@ -169,6 +170,7 @@ Options:
For example, default for vulkan1.0 is spv1.0, and
the default for vulkan1.1 is spv1.3,
the default for vulkan1.2 is spv1.5.
+ the default for vulkan1.3 is spv1.6.
Values are:
spv1.0, spv1.1, spv1.2, spv1.3, spv1.4, spv1.5, spv1.6
--version Display compiler version information.
@@ -438,6 +440,9 @@ int main(int argc, char** argv) {
} else if (target_env_str == "vulkan1.2") {
target_env = shaderc_target_env_vulkan;
version = shaderc_env_version_vulkan_1_2;
+ } else if (target_env_str == "vulkan1.3") {
+ target_env = shaderc_target_env_vulkan;
+ version = shaderc_env_version_vulkan_1_3;
} else if (target_env_str == "opengl") {
target_env = shaderc_target_env_opengl;
} else if (target_env_str == "opengl4.5") {
diff --git a/glslc/test/option_target_env.py b/glslc/test/option_target_env.py
index 4805581..91e6022 100644
--- a/glslc/test/option_target_env.py
+++ b/glslc/test/option_target_env.py
@@ -131,6 +131,16 @@ class TestTargetEnvEqVulkan1_2WithVulkan1_1ShaderSucceeds(expect.ValidObjectFile
glslc_args = ['--target-env=vulkan1.2', '-c', shader]
@inside_glslc_testsuite('OptionTargetEnv')
+class TestTargetEnvEqVulkan1_2WithVulkan1_0ShaderSucceeds(expect.ValidObjectFile1_6):
+ shader = FileShader(vulkan_vertex_shader(), '.vert')
+ glslc_args = ['--target-env=vulkan1.3', '-c', shader]
+
+@inside_glslc_testsuite('OptionTargetEnv')
+class TestTargetEnvEqVulkan1_2WithVulkan1_1ShaderSucceeds(expect.ValidObjectFile1_6):
+ shader = FileShader(vulkan_compute_subgroup_shader(), '.comp')
+ glslc_args = ['--target-env=vulkan1.3', '-c', shader]
+
+@inside_glslc_testsuite('OptionTargetEnv')
class TestTargetEnvEqOpenGL4_5WithOpenGLShaderSucceeds(expect.ValidObjectFile):
shader = FileShader(opengl_vertex_shader(), '.vert')
glslc_args = ['--target-env=opengl4.5', '-c', shader]
diff --git a/glslc/test/parameter_tests.py b/glslc/test/parameter_tests.py
index 520a02b..ce41d8f 100644
--- a/glslc/test/parameter_tests.py
+++ b/glslc/test/parameter_tests.py
@@ -163,6 +163,7 @@ Options:
vulkan1.0 # The default
vulkan1.1
vulkan1.2
+ vulkan1.3
vulkan # Same as vulkan1.0
opengl4.5
opengl # Same as opengl4.5
@@ -173,6 +174,7 @@ Options:
For example, default for vulkan1.0 is spv1.0, and
the default for vulkan1.1 is spv1.3,
the default for vulkan1.2 is spv1.5.
+ the default for vulkan1.3 is spv1.6.
Values are:
spv1.0, spv1.1, spv1.2, spv1.3, spv1.4, spv1.5, spv1.6
--version Display compiler version information.
diff --git a/libshaderc/include/shaderc/env.h b/libshaderc/include/shaderc/env.h
index 2947af2..14b418d 100644
--- a/libshaderc/include/shaderc/env.h
+++ b/libshaderc/include/shaderc/env.h
@@ -40,6 +40,7 @@ typedef enum {
shaderc_env_version_vulkan_1_0 = ((1u << 22)),
shaderc_env_version_vulkan_1_1 = ((1u << 22) | (1 << 12)),
shaderc_env_version_vulkan_1_2 = ((1u << 22) | (2 << 12)),
+ shaderc_env_version_vulkan_1_3 = ((1u << 22) | (3 << 12)),
// For OpenGL, use the number from #version in shaders.
// TODO(dneto): Currently no difference between OpenGL 4.5 and 4.6.
// See glslang/Standalone/Standalone.cpp
diff --git a/libshaderc/src/shaderc.cc b/libshaderc/src/shaderc.cc
index 7fdd516..712f3dc 100644
--- a/libshaderc/src/shaderc.cc
+++ b/libshaderc/src/shaderc.cc
@@ -305,6 +305,10 @@ shaderc_util::Compiler::TargetEnvVersion GetCompilerTargetEnvVersion(
version_number) {
return Compiler::TargetEnvVersion::Vulkan_1_2;
}
+ if (static_cast<uint32_t>(Compiler::TargetEnvVersion::Vulkan_1_3) ==
+ version_number) {
+ return Compiler::TargetEnvVersion::Vulkan_1_3;
+ }
if (static_cast<uint32_t>(Compiler::TargetEnvVersion::OpenGL_4_5) ==
version_number) {
return Compiler::TargetEnvVersion::OpenGL_4_5;
diff --git a/libshaderc_util/include/libshaderc_util/compiler.h b/libshaderc_util/include/libshaderc_util/compiler.h
index 2efd4a2..1a46f4e 100644
--- a/libshaderc_util/include/libshaderc_util/compiler.h
+++ b/libshaderc_util/include/libshaderc_util/compiler.h
@@ -85,6 +85,7 @@ class Compiler {
Vulkan_1_0 = ((1 << 22)), // Vulkan 1.0
Vulkan_1_1 = ((1 << 22) | (1 << 12)), // Vulkan 1.1
Vulkan_1_2 = ((1 << 22) | (2 << 12)), // Vulkan 1.2
+ Vulkan_1_3 = ((1 << 22) | (3 << 12)), // Vulkan 1.2
// For OpenGL, use the numbering from #version in shaders.
OpenGL_4_5 = 450,
};
diff --git a/libshaderc_util/src/compiler.cc b/libshaderc_util/src/compiler.cc
index 7c66eaa..7c1206c 100644
--- a/libshaderc_util/src/compiler.cc
+++ b/libshaderc_util/src/compiler.cc
@@ -720,6 +720,9 @@ GlslangClientInfo GetGlslangClientInfo(
} else if (env_version == Compiler::TargetEnvVersion::Vulkan_1_2) {
result.client_version = glslang::EShTargetVulkan_1_2;
result.target_language_version = glslang::EShTargetSpv_1_5;
+ } else if (env_version == Compiler::TargetEnvVersion::Vulkan_1_3) {
+ result.client_version = glslang::EShTargetVulkan_1_3;
+ result.target_language_version = glslang::EShTargetSpv_1_6;
} else {
errs << "error:" << error_tag << ": Invalid target client version "
<< static_cast<uint32_t>(env_version) << " for Vulkan environment "
diff --git a/libshaderc_util/src/compiler_test.cc b/libshaderc_util/src/compiler_test.cc
index 5d05cc7..a0a964d 100644
--- a/libshaderc_util/src/compiler_test.cc
+++ b/libshaderc_util/src/compiler_test.cc
@@ -165,7 +165,7 @@ void main() { o = clamp(i, vec4(0.5), vec4(1.0)); }
std::string Disassemble(const std::vector<uint32_t> binary) {
std::string result;
shaderc_util::SpirvToolsDisassemble(Compiler::TargetEnv::Vulkan,
- Compiler::TargetEnvVersion::Vulkan_1_2,
+ Compiler::TargetEnvVersion::Vulkan_1_3,
binary, &result);
return result;
}
diff --git a/libshaderc_util/src/spirv_tools_wrapper.cc b/libshaderc_util/src/spirv_tools_wrapper.cc
index 8ce5253..63bff6a 100644
--- a/libshaderc_util/src/spirv_tools_wrapper.cc
+++ b/libshaderc_util/src/spirv_tools_wrapper.cc
@@ -37,6 +37,8 @@ spv_target_env GetSpirvToolsTargetEnv(Compiler::TargetEnv env,
return SPV_ENV_VULKAN_1_1;
case Compiler::TargetEnvVersion::Vulkan_1_2:
return SPV_ENV_VULKAN_1_2;
+ case Compiler::TargetEnvVersion::Vulkan_1_3:
+ return SPV_ENV_VULKAN_1_3;
default:
break;
}