1
0
mirror of https://github.com/doitsujin/dxvk.git synced 2025-03-14 22:29:15 +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::CapabilityClipDistance);
m_module.enableCapability(spv::CapabilityCullDistance); 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::CapabilityClipDistance);
m_module.enableCapability(spv::CapabilityCullDistance); 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); m_entryPointInterfaces.push_back(varId);
return 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( DxbcCfgBlock* DxbcCompiler::cfgFindBlock(

View File

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