a bit of stuff, time to add spirv-link into this project
This commit is contained in:
@@ -63,6 +63,9 @@ void CSlangVulkanSpirvShaderCompiler::CompileShaderStage( EShaderStage eStage, c
|
||||
case SHADER_STAGE_PIXEL:
|
||||
eSlangStage = SLANG_STAGE_PIXEL;
|
||||
break;
|
||||
case SHADER_STAGE_CALLABLE:
|
||||
eSlangStage = SLANG_STAGE_CALLABLE;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -70,6 +73,8 @@ void CSlangVulkanSpirvShaderCompiler::CompileShaderStage( EShaderStage eStage, c
|
||||
pProgramLayout = pModule->getLayout();
|
||||
uint32_t uCount = pProgramLayout->getParameterCount();
|
||||
|
||||
// we want to get all inputs
|
||||
// just for the sake of making vulkan simple
|
||||
CUtlVector<VulkanDescriptor_t> inputs;
|
||||
VulkanDescriptor_t input = {};
|
||||
for ( uint32_t u = 0; u < uCount; u++ )
|
||||
@@ -86,7 +91,6 @@ trygetkind:
|
||||
case slang::TypeReflection::Kind::ConstantBuffer:
|
||||
input.eDescriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
|
||||
break;
|
||||
case slang::TypeReflection::Kind::Resource:
|
||||
V_printf("%s: %i\n", pType->getName(), pType->getResourceShape());
|
||||
switch(pType->getResourceShape())
|
||||
{
|
||||
@@ -122,16 +126,34 @@ trygetkind:
|
||||
V_printf("%i\n", input.uCount);
|
||||
inputs.AppendTail(input);
|
||||
}
|
||||
|
||||
|
||||
|
||||
pModule->findAndCheckEntryPoint(szMain, eSlangStage, &pEntryPoint, &m_pDiagnostics);
|
||||
|
||||
// stage was not defined
|
||||
if (pEntryPoint == NULL)
|
||||
{
|
||||
// fool it
|
||||
m_pDiagnostics = NULL;
|
||||
return;
|
||||
}
|
||||
CheckDiagnostics();
|
||||
|
||||
pEntryPoint->link(&pLinked, &m_pDiagnostics);
|
||||
CheckDiagnostics();
|
||||
if (pLinked == NULL)
|
||||
{
|
||||
pEntryPoint->release();
|
||||
return;
|
||||
}
|
||||
|
||||
pLinked->getEntryPointCode(0, 0, &pBinary, &m_pDiagnostics);
|
||||
CheckDiagnostics();
|
||||
if (pBinary == NULL)
|
||||
{
|
||||
pEntryPoint->release();
|
||||
return;
|
||||
}
|
||||
|
||||
pShaderObject = pShader->AllocateShader();
|
||||
pShaderObject->m_eBackend = SHADER_BACKEND_SPIRV_VULKAN;
|
||||
@@ -145,6 +167,13 @@ 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);
|
||||
|
||||
}
|
||||
|
||||
pEntryPoint->release();
|
||||
}
|
||||
@@ -196,6 +225,10 @@ void CSlangVulkanSpirvShaderCompiler::CompileShader( const char *szInput, CCompi
|
||||
szMainName = "psMain";
|
||||
stStageMacroDesc = { "PS_SHADER", "Enabled" };
|
||||
break;
|
||||
case SHADER_STAGE_CALLABLE:
|
||||
szMainName = "brdfMain";
|
||||
stStageMacroDesc = { "BRDF_SHADER", "Enabled" };
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -212,7 +245,8 @@ void CSlangVulkanSpirvShaderCompiler::CompileShader( const char *szInput, CCompi
|
||||
|
||||
CompileShaderStage((EShaderStage)i, szMainName, pSession, pModule, pShader);
|
||||
pModule->release();
|
||||
pSession->release();
|
||||
// ah yes free(): corrupted unsorted chunks
|
||||
//pSession->release();
|
||||
}
|
||||
|
||||
V_free((void*)szShaderSource);
|
||||
@@ -224,6 +258,7 @@ void CSlangVulkanSpirvShaderCompiler::CheckDiagnostics()
|
||||
{
|
||||
V_printf("%s\n",(const char*)m_pDiagnostics->getBufferPointer());
|
||||
}
|
||||
m_pDiagnostics = NULL;
|
||||
};
|
||||
|
||||
void CSlangVulkanSpirvShaderCompiler::Init()
|
||||
|
||||
Reference in New Issue
Block a user