1
0
mirror of https://github.com/EduApps-CDG/OpenDX synced 2024-12-30 09:45:37 +01:00

[dxbc] Implement ImmAtomic*Min/Max instructions

This commit is contained in:
Philip Rebohle 2018-04-02 10:58:26 +02:00
parent 00a145906c
commit d2c6ec5c41
4 changed files with 16 additions and 12 deletions

View File

@ -2061,24 +2061,28 @@ namespace dxvk {
break; break;
case DxbcOpcode::AtomicIMin: case DxbcOpcode::AtomicIMin:
case DxbcOpcode::ImmAtomicIMin:
value.id = m_module.opAtomicSMin(typeId, value.id = m_module.opAtomicSMin(typeId,
pointer.id, scopeId, semanticsId, pointer.id, scopeId, semanticsId,
src[0].id); src[0].id);
break; break;
case DxbcOpcode::AtomicIMax: case DxbcOpcode::AtomicIMax:
case DxbcOpcode::ImmAtomicIMax:
value.id = m_module.opAtomicSMax(typeId, value.id = m_module.opAtomicSMax(typeId,
pointer.id, scopeId, semanticsId, pointer.id, scopeId, semanticsId,
src[0].id); src[0].id);
break; break;
case DxbcOpcode::AtomicUMin: case DxbcOpcode::AtomicUMin:
case DxbcOpcode::ImmAtomicUMin:
value.id = m_module.opAtomicUMin(typeId, value.id = m_module.opAtomicUMin(typeId,
pointer.id, scopeId, semanticsId, pointer.id, scopeId, semanticsId,
src[0].id); src[0].id);
break; break;
case DxbcOpcode::AtomicUMax: case DxbcOpcode::AtomicUMax:
case DxbcOpcode::ImmAtomicUMax:
value.id = m_module.opAtomicUMax(typeId, value.id = m_module.opAtomicUMax(typeId,
pointer.id, scopeId, semanticsId, pointer.id, scopeId, semanticsId,
src[0].id); src[0].id);

View File

@ -927,28 +927,28 @@ namespace dxvk {
{ DxbcOperandKind::SrcReg, DxbcScalarType::Uint32 }, { DxbcOperandKind::SrcReg, DxbcScalarType::Uint32 },
{ DxbcOperandKind::SrcReg, DxbcScalarType::Uint32 }, { DxbcOperandKind::SrcReg, DxbcScalarType::Uint32 },
} }, } },
/* ImmAtomicImax */ /* ImmAtomicIMax */
{ 4, DxbcInstClass::Atomic, { { 4, DxbcInstClass::Atomic, {
{ DxbcOperandKind::DstReg, DxbcScalarType::Sint32 }, { DxbcOperandKind::DstReg, DxbcScalarType::Sint32 },
{ DxbcOperandKind::DstReg, DxbcScalarType::Sint32 }, { DxbcOperandKind::DstReg, DxbcScalarType::Sint32 },
{ DxbcOperandKind::SrcReg, DxbcScalarType::Sint32 }, { DxbcOperandKind::SrcReg, DxbcScalarType::Sint32 },
{ DxbcOperandKind::SrcReg, DxbcScalarType::Sint32 }, { DxbcOperandKind::SrcReg, DxbcScalarType::Sint32 },
} }, } },
/* ImmAtomicImin */ /* ImmAtomicIMin */
{ 4, DxbcInstClass::Atomic, { { 4, DxbcInstClass::Atomic, {
{ DxbcOperandKind::DstReg, DxbcScalarType::Sint32 }, { DxbcOperandKind::DstReg, DxbcScalarType::Sint32 },
{ DxbcOperandKind::DstReg, DxbcScalarType::Sint32 }, { DxbcOperandKind::DstReg, DxbcScalarType::Sint32 },
{ DxbcOperandKind::SrcReg, DxbcScalarType::Sint32 }, { DxbcOperandKind::SrcReg, DxbcScalarType::Sint32 },
{ DxbcOperandKind::SrcReg, DxbcScalarType::Sint32 }, { DxbcOperandKind::SrcReg, DxbcScalarType::Sint32 },
} }, } },
/* ImmAtomicUmax */ /* ImmAtomicUMax */
{ 4, DxbcInstClass::Atomic, { { 4, DxbcInstClass::Atomic, {
{ DxbcOperandKind::DstReg, DxbcScalarType::Uint32 }, { DxbcOperandKind::DstReg, DxbcScalarType::Uint32 },
{ DxbcOperandKind::DstReg, DxbcScalarType::Uint32 }, { DxbcOperandKind::DstReg, DxbcScalarType::Uint32 },
{ DxbcOperandKind::SrcReg, DxbcScalarType::Sint32 }, { DxbcOperandKind::SrcReg, DxbcScalarType::Sint32 },
{ DxbcOperandKind::SrcReg, DxbcScalarType::Uint32 }, { DxbcOperandKind::SrcReg, DxbcScalarType::Uint32 },
} }, } },
/* ImmAtomicUmin */ /* ImmAtomicUMin */
{ 4, DxbcInstClass::Atomic, { { 4, DxbcInstClass::Atomic, {
{ DxbcOperandKind::DstReg, DxbcScalarType::Uint32 }, { DxbcOperandKind::DstReg, DxbcScalarType::Uint32 },
{ DxbcOperandKind::DstReg, DxbcScalarType::Uint32 }, { DxbcOperandKind::DstReg, DxbcScalarType::Uint32 },

View File

@ -194,10 +194,10 @@ namespace dxvk {
ImmAtomicXor = 183, ImmAtomicXor = 183,
ImmAtomicExch = 184, ImmAtomicExch = 184,
ImmAtomicCmpExch = 185, ImmAtomicCmpExch = 185,
ImmAtomicImax = 186, ImmAtomicIMax = 186,
ImmAtomicImin = 187, ImmAtomicIMin = 187,
ImmAtomicUmax = 188, ImmAtomicUMax = 188,
ImmAtomicUmin = 189, ImmAtomicUMin = 189,
Sync = 190, Sync = 190,
DAdd = 191, DAdd = 191,
DMax = 192, DMax = 192,

View File

@ -190,10 +190,10 @@ std::ostream& operator << (std::ostream& os, DxbcOpcode e) {
ENUM_NAME(DxbcOpcode::ImmAtomicXor); ENUM_NAME(DxbcOpcode::ImmAtomicXor);
ENUM_NAME(DxbcOpcode::ImmAtomicExch); ENUM_NAME(DxbcOpcode::ImmAtomicExch);
ENUM_NAME(DxbcOpcode::ImmAtomicCmpExch); ENUM_NAME(DxbcOpcode::ImmAtomicCmpExch);
ENUM_NAME(DxbcOpcode::ImmAtomicImax); ENUM_NAME(DxbcOpcode::ImmAtomicIMax);
ENUM_NAME(DxbcOpcode::ImmAtomicImin); ENUM_NAME(DxbcOpcode::ImmAtomicIMin);
ENUM_NAME(DxbcOpcode::ImmAtomicUmax); ENUM_NAME(DxbcOpcode::ImmAtomicUMax);
ENUM_NAME(DxbcOpcode::ImmAtomicUmin); ENUM_NAME(DxbcOpcode::ImmAtomicUMin);
ENUM_NAME(DxbcOpcode::Sync); ENUM_NAME(DxbcOpcode::Sync);
ENUM_NAME(DxbcOpcode::DAdd); ENUM_NAME(DxbcOpcode::DAdd);
ENUM_NAME(DxbcOpcode::DMax); ENUM_NAME(DxbcOpcode::DMax);