Skip to content

Commit

Permalink
[d3d8] VS: Declare correct usage indices
Browse files Browse the repository at this point in the history
  • Loading branch information
AlpyneDreams committed Feb 23, 2023
1 parent 01895c1 commit a651c55
Showing 1 changed file with 10 additions and 11 deletions.
21 changes: 10 additions & 11 deletions src/d3d8/d3d8_shader.cpp
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@

#include "d3d8_shader.h"

#define VSD_SHIFT_MASK(token, field) ( (token & field ## MASK) >> field ## SHIFT )
#define VSD_SHIFT_MASK(token, field) ((token & field ## MASK) >> field ## SHIFT)

#define VS_SHIFT_MASK(token, field) ((token << field ## _SHIFT) & field ## _MASK)

// Magic number from D3DVSD_REG()
#define VSD_SKIP_FLAG 0x10000000
Expand Down Expand Up @@ -98,11 +100,11 @@ namespace dxvk {
* \param [in] regType DxsoRegisterType
* \cite https://learn.microsoft.com/en-us/windows-hardware/drivers/display/dcl-instruction
*/
constexpr DWORD encodeDeclaration(d3d9::D3DDECLUSAGE usage) {
constexpr DWORD encodeDeclaration(d3d9::D3DDECLUSAGE usage, DWORD index) {
DWORD token = 0;
token |= usage & 0x1F; // bits 0:4 DxsoUsage
token |= 0 << 16; // bits 16:19 usageIndex (TODO: should this change?)
token |= 1 << 31; // bit 31 always 1
token |= VS_SHIFT_MASK(usage, D3DSP_DCL_USAGE); // bits 0:4 DxsoUsage (TODO: missing MSB)
token |= VS_SHIFT_MASK(index, D3DSP_DCL_USAGEINDEX); // bits 16:19 usageIndex
token |= 1 << 31; // bit 31 always 1
return token;
}

Expand Down Expand Up @@ -275,12 +277,9 @@ namespace dxvk {
DWORD usage = D3D8_VERTEX_INPUT_REGISTERS[vn][0];
DWORD index = D3D8_VERTEX_INPUT_REGISTERS[vn][1];

DWORD dclUsage = (usage << D3DSP_DCL_USAGE_SHIFT) & D3DSP_DCL_USAGE_MASK; // usage
dclUsage |= (index << D3DSP_DCL_USAGEINDEX_SHIFT) & D3DSP_DCL_USAGEINDEX_MASK; // usage index

tokens.push_back(encodeInstruction(d3d9::D3DSIO_DCL)); // dcl opcode
tokens.push_back(encodeDeclaration(d3d9::D3DDECLUSAGE(dclUsage))); // usage token
tokens.push_back(encodeDestRegister(d3d9::D3DSPR_INPUT, vn)); // dest register num
tokens.push_back(encodeInstruction(d3d9::D3DSIO_DCL)); // dcl opcode
tokens.push_back(encodeDeclaration(d3d9::D3DDECLUSAGE(usage), index)); // usage token
tokens.push_back(encodeDestRegister(d3d9::D3DSPR_INPUT, vn)); // dest register num
}
}

Expand Down

0 comments on commit a651c55

Please sign in to comment.