DirectXShaderCompiler/lib/DXIL/DxilNodeProps.cpp

117 строки
3.9 KiB
C++

///////////////////////////////////////////////////////////////////////////////
// //
// DxilNodeProps.cpp //
// Copyright (C) Microsoft Corporation. All rights reserved. //
// This file is distributed under the University of Illinois Open Source //
// License. See LICENSE.TXT for details. //
// //
///////////////////////////////////////////////////////////////////////////////
#include "dxc/DXIL/DxilNodeProps.h"
namespace hlsl {
//------------------------------------------------------------------------------
//
// NodeFlags methods
//
NodeFlags::NodeFlags() : m_Flags(DXIL::NodeIOFlags::None) {}
NodeFlags::NodeFlags(DXIL::NodeIOFlags flags) : m_Flags(flags) {}
NodeFlags::NodeFlags(DXIL::NodeIOKind kind)
: m_Flags((DXIL::NodeIOFlags)kind) {}
NodeFlags::NodeFlags(uint32_t F) : NodeFlags((DXIL::NodeIOFlags)F) {}
bool NodeFlags::operator==(const hlsl::NodeFlags &o) const {
return m_Flags == o.m_Flags;
}
NodeFlags::operator uint32_t() const { return (uint32_t)m_Flags; }
DXIL::NodeIOKind NodeFlags::GetNodeIOKind() const {
return (DXIL::NodeIOKind)((uint32_t)m_Flags &
(uint32_t)DXIL::NodeIOFlags::NodeIOKindMask);
}
DXIL::NodeIOFlags NodeFlags::GetNodeIOFlags() const { return m_Flags; }
bool NodeFlags::IsInputRecord() const {
return ((uint32_t)m_Flags & (uint32_t)DXIL::NodeIOFlags::Input) != 0;
}
bool NodeFlags::IsOutput() const {
return ((uint32_t)m_Flags & (uint32_t)DXIL::NodeIOFlags::Output) != 0;
}
bool NodeFlags::IsRecord() const {
return ((uint32_t)m_Flags &
(uint32_t)DXIL::NodeIOFlags::RecordGranularityMask) != 0;
}
bool NodeFlags::IsOutputNode() const { return IsOutput() && !IsRecord(); }
bool NodeFlags::IsOutputRecord() const { return IsOutput() && IsRecord(); }
bool NodeFlags::IsReadWrite() const {
return ((uint32_t)m_Flags & (uint32_t)DXIL::NodeIOFlags::ReadWrite) != 0;
}
bool NodeFlags::IsEmpty() const {
return ((uint32_t)m_Flags & (uint32_t)DXIL::NodeIOFlags::EmptyRecord) != 0;
}
bool NodeFlags::IsEmptyInput() const { return IsEmpty() && IsInputRecord(); }
bool NodeFlags::IsValidNodeKind() const {
return GetNodeIOKind() != DXIL::NodeIOKind::Invalid;
}
bool NodeFlags::RecordTypeMatchesLaunchType(
DXIL::NodeLaunchType launchType) const {
DXIL::NodeIOFlags recordLaunchType = (DXIL::NodeIOFlags)(
(uint32_t)m_Flags & (uint32_t)DXIL::NodeIOFlags::RecordGranularityMask);
return (launchType == DXIL::NodeLaunchType::Broadcasting &&
recordLaunchType == DXIL::NodeIOFlags::DispatchRecord) ||
(launchType == DXIL::NodeLaunchType::Coalescing &&
recordLaunchType == DXIL::NodeIOFlags::GroupRecord) ||
(launchType == DXIL::NodeLaunchType::Thread &&
recordLaunchType == DXIL::NodeIOFlags::ThreadRecord);
}
void NodeFlags::SetTrackRWInputSharing() {
m_Flags = (DXIL::NodeIOFlags)(
(uint32_t)m_Flags | (uint32_t)DXIL::NodeIOFlags::TrackRWInputSharing);
}
bool NodeFlags::GetTrackRWInputSharing() const {
return ((uint32_t)m_Flags &
(uint32_t)DXIL::NodeIOFlags::TrackRWInputSharing) != 0;
}
void NodeFlags::SetGloballyCoherent() {
m_Flags = (DXIL::NodeIOFlags)((uint32_t)m_Flags |
(uint32_t)DXIL::NodeIOFlags::GloballyCoherent);
}
bool NodeFlags::GetGloballyCoherent() const {
return ((uint32_t)m_Flags & (uint32_t)DXIL::NodeIOFlags::GloballyCoherent) !=
0;
}
//------------------------------------------------------------------------------
//
// NodeIOProperties methods.
//
NodeInfo NodeIOProperties::GetNodeInfo() const {
return NodeInfo(Flags.GetNodeIOFlags(), RecordType.size);
}
NodeRecordInfo NodeIOProperties::GetNodeRecordInfo() const {
return NodeInfo(Flags.GetNodeIOFlags(), RecordType.size);
}
} // namespace hlsl