소스 검색

Use Spir-V 1.4 because of ray tracing

Panagiotis Christopoulos Charitos 4 년 전
부모
커밋
c3afe06bc4
3개의 변경된 파일13개의 추가작업 그리고 1개의 파일을 삭제
  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_TIMELINE_SEMAPHORE = 1 << 16,
 	KHR_SHADER_FLOAT16_INT8 = 1 << 17,
 	KHR_SHADER_FLOAT16_INT8 = 1 << 17,
 	KHR_SHADER_ATOMIC_INT64 = 1 << 18,
 	KHR_SHADER_ATOMIC_INT64 = 1 << 18,
+	KHR_SPIRV_1_4 = 1 << 19,
 };
 };
 ANKI_ENUM_ALLOW_NUMERIC_OPERATIONS(VulkanExtensions)
 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;
 				m_extensions |= VulkanExtensions::KHR_SHADER_ATOMIC_INT64;
 				extensionsToEnable[extensionsToEnableCount++] = extensionName.cstr();
 				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:");
 		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;
 	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]};
 	Array<const char*, 1> csrc = {&src[0]};
 	shader.setStrings(&csrc[0], 1);
 	shader.setStrings(&csrc[0], 1);
 	shader.setEnvClient(glslang::EShClientVulkan, glslang::EShTargetVulkan_1_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))
 	if(!shader.parse(&GLSLANG_LIMITS, 100, false, messages))
 	{
 	{
 		ANKI_CHECK(logShaderErrorCode(shader.getInfoLog(), src, tmpAlloc));
 		ANKI_CHECK(logShaderErrorCode(shader.getInfoLog(), src, tmpAlloc));