From d941446ca05a62d60f3723215e692ec2debdf9a0 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Sun, 10 Dec 2017 21:13:22 +0100 Subject: [PATCH] [dxbc] Fixed bug in decoder that would return wrong component masks --- src/dxbc/dxbc_decoder.cpp | 5 +++-- src/dxbc/dxbc_decoder.h | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/dxbc/dxbc_decoder.cpp b/src/dxbc/dxbc_decoder.cpp index de99958a..73980b05 100644 --- a/src/dxbc/dxbc_decoder.cpp +++ b/src/dxbc/dxbc_decoder.cpp @@ -168,8 +168,9 @@ namespace dxvk { uint32_t numOpcodeTokens = 1; if (token.isExtended()) { - while (DxbcOpcodeTokenExt(m_op.getWord(numOpcodeTokens++)).isExtended()) - continue; + numOpcodeTokens += 1; + while (DxbcOpcodeTokenExt(m_op.getWord(numOpcodeTokens)).isExtended()) + numOpcodeTokens += 1; } m_args = m_op + numOpcodeTokens; diff --git a/src/dxbc/dxbc_decoder.h b/src/dxbc/dxbc_decoder.h index 3bafe342..c77edc66 100644 --- a/src/dxbc/dxbc_decoder.h +++ b/src/dxbc/dxbc_decoder.h @@ -284,7 +284,8 @@ namespace dxvk { * \c DxbcComponentSelectionMode::Select1. */ DxbcComponentMask componentSelection() const { - return DxbcComponentMask(bit::extract(m_token, 4, 5)); + uint32_t id = bit::extract(m_token, 4, 5); + return DxbcComponentMask(id == 0, id == 1, id == 2, id == 3); } /**