Shader linking i guess
This commit is contained in:
68
materialsystem/vulkan/rtshader.cpp
Normal file
68
materialsystem/vulkan/rtshader.cpp
Normal file
@@ -0,0 +1,68 @@
|
||||
#include "vulkan_state.h"
|
||||
#include "rtlinker.h"
|
||||
#include "materialsystem/compiledshadermgr.h"
|
||||
|
||||
uint32_t CVkRayTracingShader::GetMissShaderBinding( const char *szName )
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
uint32_t CVkRayTracingShader::GetClosestHitShaderBinding( const char *szName )
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
uint32_t CVkRayTracingShader::GetCallableShaderBinding( const char *szName )
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CVkRayTracingShader::AddShader( const char *szName, const char *szPath )
|
||||
{
|
||||
ICompiledShaderManager *pCompiledShaderManager = (ICompiledShaderManager*)CreateInterface(COMPILED_SHADER_MANAGER_INTERFACE_VERSION, NULL);
|
||||
CCompiledShader shader = {};
|
||||
pCompiledShaderManager->ReadFromFile(&shader, szPath);
|
||||
m_callableShaders.AppendTail( {szName, shader} );
|
||||
}
|
||||
|
||||
void CVkRayTracingShader::RemoveShader( const char *szName )
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CVkRayTracingShader::Build()
|
||||
{
|
||||
if (g_vkAvailableExtensions.bIsSupported_VK_KHR_RAY_TRACING_PIPELINE)
|
||||
BuildTrace();
|
||||
else
|
||||
BuildCompute();
|
||||
|
||||
}
|
||||
|
||||
void CVkRayTracingShader::BuildCompute()
|
||||
{
|
||||
CVkShaderLinker linker = {};
|
||||
ShaderObject_t *pShader;
|
||||
|
||||
pShader = m_shader.FindShaderObject(SHADER_BACKEND_SPIRV_VULKAN, SHADER_STAGE_RAYGEN_SOFTWARE);
|
||||
if (!pShader)
|
||||
return;
|
||||
|
||||
linker.SetMainSpirv(m_shader.GetLumpSize(pShader->m_nDataLump)/4,
|
||||
(uint32_t*)m_shader.GetLumpPtr(pShader->m_nDataLump));
|
||||
for ( auto s: m_callableShaders )
|
||||
{
|
||||
pShader = s.m_shader.FindShaderObject(SHADER_BACKEND_SPIRV_VULKAN, SHADER_STAGE_CALLABLE_SOFTWARE);
|
||||
if (!pShader)
|
||||
continue;
|
||||
linker.AddSpirv(s.m_shader.GetLumpSize(pShader->m_nDataLump)/4,
|
||||
(uint32_t*)s.m_shader.GetLumpPtr(pShader->m_nDataLump));
|
||||
}
|
||||
linker.Build();
|
||||
|
||||
}
|
||||
|
||||
void CVkRayTracingShader::BuildTrace()
|
||||
{
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user