117 строки
3.9 KiB
C++
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
|