Browse Source

Use Spir-V 1.4 because of ray tracing

Panagiotis Christopoulos Charitos 4 years ago
parent
commit
c3afe06bc4
3 changed files with 13 additions and 1 deletions
  1. 1 0
      AnKi/Gr/Vulkan/Common.h
  2. 11 0
      AnKi/Gr/Vulkan/GrManagerImpl.cpp
  3. 1 1
      AnKi/ShaderCompiler/Glslang.cpp

+ 1 - 0
AnKi/Gr/Vulkan/Common.h

@@ -78,6 +78,7 @@ enum class VulkanExtensions : U32
 	KHR_TIMELINE_SEMAPHORE = 1 << 16,
 	KHR_SHADER_FLOAT16_INT8 = 1 << 17,
 	KHR_SHADER_ATOMIC_INT64 = 1 << 18,
+	KHR_SPIRV_1_4 = 1 << 19,
 };
 ANKI_ENUM_ALLOW_NUMERIC_OPERATIONS(VulkanExtensions)
 

+ 11 - 0
AnKi/Gr/Vulkan/GrManagerImpl.cpp

@@ -647,6 +647,11 @@ Error GrManagerImpl::initDevice(const GrManagerInitInfo& init)
 				m_extensions |= VulkanExtensions::KHR_SHADER_ATOMIC_INT64;
 				extensionsToEnable[extensionsToEnableCount++] = extensionName.cstr();
 			}
+			else if(extensionName == VK_KHR_SPIRV_1_4_EXTENSION_NAME)
+			{
+				m_extensions |= VulkanExtensions::KHR_SPIRV_1_4;
+				extensionsToEnable[extensionsToEnableCount++] = extensionName.cstr();
+			}
 		}
 
 		ANKI_VK_LOGI("Will enable the following device extensions:");
@@ -905,6 +910,12 @@ Error GrManagerImpl::initDevice(const GrManagerInitInfo& init)
 		}
 	}
 
+	if(!(m_extensions & VulkanExtensions::KHR_SPIRV_1_4))
+	{
+		ANKI_VK_LOGE("Spir-V 1.4 is not supported");
+		return Error::FUNCTION_FAILED;
+	}
+
 	return Error::NONE;
 }
 

+ 1 - 1
AnKi/ShaderCompiler/Glslang.cpp

@@ -319,7 +319,7 @@ Error compilerGlslToSpirv(CString src, ShaderType shaderType, GenericMemoryPoolA
 	Array<const char*, 1> csrc = {&src[0]};
 	shader.setStrings(&csrc[0], 1);
 	shader.setEnvClient(glslang::EShClientVulkan, glslang::EShTargetVulkan_1_1);
-	shader.setEnvTarget(glslang::EShTargetSpv, glslang::EShTargetSpv_1_3);
+	shader.setEnvTarget(glslang::EShTargetSpv, glslang::EShTargetSpv_1_4);
 	if(!shader.parse(&GLSLANG_LIMITS, 100, false, messages))
 	{
 		ANKI_CHECK(logShaderErrorCode(shader.getInfoLog(), src, tmpAlloc));