1
0
mirror of https://github.com/doitsujin/dxvk.git synced 2025-03-13 19:29:14 +01:00

[dxbc] Added tess level interface variables

This commit is contained in:
Philip Rebohle 2018-03-05 14:07:15 +01:00
parent 5f3bfde727
commit 3501186d38
No known key found for this signature in database
GPG Key ID: C8CC613427A31C99
2 changed files with 44 additions and 4 deletions

View File

@ -5001,7 +5001,8 @@ namespace dxvk {
m_module.enableCapability(spv::CapabilityClipDistance);
m_module.enableCapability(spv::CapabilityCullDistance);
// TODO implement
m_hs.builtinTessLevelOuter = emitBuiltinTessLevelOuter(spv::StorageClassOutput);
m_hs.builtinTessLevelInner = emitBuiltinTessLevelInner(spv::StorageClassOutput);
}
@ -5010,7 +5011,8 @@ namespace dxvk {
m_module.enableCapability(spv::CapabilityClipDistance);
m_module.enableCapability(spv::CapabilityCullDistance);
// TODO implement
m_ds.builtinTessLevelOuter = emitBuiltinTessLevelOuter(spv::StorageClassInput);
m_ds.builtinTessLevelInner = emitBuiltinTessLevelInner(spv::StorageClassInput);
}
@ -5263,6 +5265,32 @@ namespace dxvk {
m_entryPointInterfaces.push_back(varId);
return varId;
}
uint32_t DxbcCompiler::emitBuiltinTessLevelOuter(spv::StorageClass storageClass) {
uint32_t id = emitNewBuiltinVariable(
DxbcRegisterInfo {
{ DxbcScalarType::Float32, 0, 4 },
storageClass },
spv::BuiltInTessLevelOuter,
"bTessLevelOuter");
m_module.decorate(id, spv::DecorationPatch);
return id;
}
uint32_t DxbcCompiler::emitBuiltinTessLevelInner(spv::StorageClass storageClass) {
uint32_t id = emitNewBuiltinVariable(
DxbcRegisterInfo {
{ DxbcScalarType::Float32, 0, 2 },
storageClass },
spv::BuiltInTessLevelInner,
"bTessLevelInner");
m_module.decorate(id, spv::DecorationPatch);
return id;
}
DxbcCfgBlock* DxbcCompiler::cfgFindBlock(

View File

@ -199,8 +199,11 @@ namespace dxvk {
DxbcCompilerHsPhase currPhaseType = DxbcCompilerHsPhase::None;
size_t currPhaseId = 0;
uint32_t vertexCountIn = 0;
uint32_t vertexCountOut = 0;
uint32_t vertexCountIn = 0;
uint32_t vertexCountOut = 0;
uint32_t builtinTessLevelOuter = 0;
uint32_t builtinTessLevelInner = 0;
DxbcCompilerHsControlPointPhase cpPhase;
std::vector<DxbcCompilerHsForkJoinPhase> forkPhases;
@ -213,6 +216,9 @@ namespace dxvk {
*/
struct DxbcCompilerDsPart {
uint32_t functionId = 0;
uint32_t builtinTessLevelOuter = 0;
uint32_t builtinTessLevelInner = 0;
};
@ -882,6 +888,12 @@ namespace dxvk {
spv::BuiltIn builtIn,
const char* name);
uint32_t emitBuiltinTessLevelOuter(
spv::StorageClass storageClass);
uint32_t emitBuiltinTessLevelInner(
spv::StorageClass storageClass);
////////////////
// Misc methods
DxbcCfgBlock* cfgFindBlock(