Shader linking i guess

This commit is contained in:
2026-04-12 14:52:33 +03:00
parent 79ceac1005
commit 457b455042
38 changed files with 12534 additions and 114 deletions

View File

@@ -72,6 +72,9 @@ void CSlangVulkanSpirvShaderCompiler::CompileShaderStage( EShaderStage eStage, c
case SHADER_STAGE_CALLABLE:
eSlangStage = SLANG_STAGE_CALLABLE;
break;
case SHADER_STAGE_CALLABLE_SOFTWARE:
eSlangStage = SLANG_STAGE_COMPUTE;
break;
default:
break;
}
@@ -88,16 +91,16 @@ void CSlangVulkanSpirvShaderCompiler::CompileShaderStage( EShaderStage eStage, c
VariableLayoutReflection *pVar = pProgramLayout->getParameterByIndex(u);
input = {};
input.uCount = 1;
V_printf("%s %i\n", pVar->getName(), pVar->getType()->getKind());
//V_printf("%s %i\n", pVar->getName(), pVar->getType()->getKind());
TypeReflection *pType = pVar->getType();
trygetkind:
V_printf("%s %i\n", pType->getName(), pType->getKind());
//V_printf("%s %i\n", pType->getName(), pType->getKind());
switch(pType->getKind())
{
case slang::TypeReflection::Kind::ConstantBuffer:
input.eDescriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
break;
V_printf("%s: %i\n", pType->getName(), pType->getResourceShape());
//V_printf("%s: %i\n", pType->getName(), pType->getResourceShape());
switch(pType->getResourceShape())
{
case SLANG_TEXTURE_2D:
@@ -111,7 +114,7 @@ trygetkind:
}
break;
case slang::TypeReflection::Kind::Resource:
V_printf("%s: %i\n", pType->getName(), pType->getResourceShape());
//V_printf("%s: %i\n", pType->getName(), pType->getResourceShape());
switch(pType->getResourceShape())
{
case SLANG_TEXTURE_2D:
@@ -187,13 +190,9 @@ trygetkind:
pShaderObject->m_nMetadataLump = pShader->AllocateLump(sizeof(VulkanInputMetaData_t));
V_memcpy(pShader->GetLumpPtr(pShaderObject->m_nDataLump), pBinary->getBufferPointer(), pBinary->getBufferSize());
V_memcpy(pShader->GetLumpPtr(pShaderObject->m_nMetadataLump), &stMetadata, sizeof(VulkanInputMetaData_t));
if (eStage == SHADER_STAGE_CALLABLE)
{
IFileHandle *ph = filesystem->Open("a.txt", FILEMODE_WRITE);
filesystem->Write(ph, pBinary->getBufferPointer(), pBinary->getBufferSize());
filesystem->Close(ph);
}
IFileHandle *ph = filesystem->Open(szMain, FILEMODE_WRITE);
filesystem->Write(ph, pBinary->getBufferPointer(), pBinary->getBufferSize());
filesystem->Close(ph);
pEntryPoint->release();
}
@@ -246,10 +245,6 @@ void CSlangVulkanSpirvShaderCompiler::CompileShader( const char *szInput, CCompi
szMainName = "psMain";
stStageMacroDesc[0] = { "PS_SHADER", "Enabled" };
break;
case SHADER_STAGE_CALLABLE:
szMainName = "brdfMain";
stStageMacroDesc[0] = { "BRDF_SHADER", "Enabled" };
break;
case SHADER_STAGE_RAYGEN:
szMainName = "rayMain";
stStageMacroDesc[0] = { "RAY_SHADER", "Enabled" };
@@ -260,6 +255,16 @@ void CSlangVulkanSpirvShaderCompiler::CompileShader( const char *szInput, CCompi
stStageMacroDesc[1] = { "SOFTWARE_RAY_TRACING", "Enabled" };
stSessionDesc.preprocessorMacroCount = 2;
break;
case SHADER_STAGE_CALLABLE:
szMainName = "CallableMain";
stStageMacroDesc[0] = { "CALLABLE_SHADER", "Enabled" };
break;
case SHADER_STAGE_CALLABLE_SOFTWARE:
szMainName = "CallableMain";
stStageMacroDesc[0] = { "CALLABLE_SHADER", "Enabled" };
stStageMacroDesc[1] = { "SOFTWARE_RAY_TRACING", "Enabled" };
stSessionDesc.preprocessorMacroCount = 2;
break;
default:
break;
}
@@ -267,7 +272,7 @@ void CSlangVulkanSpirvShaderCompiler::CompileShader( const char *szInput, CCompi
if ( szMainName == NULL )
continue;
pSession = NULL;
V_printf("Cool\n");
//V_printf("Cool\n");
s_pGlobalSession->createSession(stSessionDesc, &pSession);
pModule = pSession->loadModuleFromSource("main", szInput, pShaderSourceBlob, &m_pDiagnostics);