mirror of
https://github.com/doitsujin/dxvk.git
synced 2024-11-29 01:24:11 +01:00
[d3d9+dxso] Switch constant buffer order
This commit is contained in:
parent
791d533a1d
commit
869f75895c
@ -21,9 +21,9 @@ namespace dxvk {
|
||||
: 0;
|
||||
}
|
||||
|
||||
uint32_t floatOffset() const { return 0; }
|
||||
uint32_t intOffset() const { return floatOffset() + floatSize(); }
|
||||
uint32_t bitmaskOffset() const { return intOffset() + intSize(); }
|
||||
uint32_t intOffset() const { return 0; }
|
||||
uint32_t floatOffset() const { return intOffset() + intSize(); }
|
||||
uint32_t bitmaskOffset() const { return floatOffset() + floatSize(); }
|
||||
|
||||
uint32_t totalSize() const { return floatSize() + intSize() + bitmaskSize(); }
|
||||
};
|
||||
|
@ -21,20 +21,20 @@ namespace dxvk {
|
||||
|
||||
// We make an assumption later based on the packing of this struct for copying.
|
||||
struct D3D9ShaderConstantsVSSoftware {
|
||||
Vector4 fConsts[caps::MaxFloatConstantsSoftware];
|
||||
Vector4i iConsts[caps::MaxOtherConstantsSoftware];
|
||||
Vector4 fConsts[caps::MaxFloatConstantsSoftware];
|
||||
uint32_t bConsts[caps::MaxOtherConstantsSoftware / 32];
|
||||
};
|
||||
|
||||
struct D3D9ShaderConstantsVSHardware {
|
||||
Vector4 fConsts[caps::MaxFloatConstantsVS];
|
||||
Vector4i iConsts[caps::MaxOtherConstants];
|
||||
Vector4 fConsts[caps::MaxFloatConstantsVS];
|
||||
uint32_t bConsts[1];
|
||||
};
|
||||
|
||||
struct D3D9ShaderConstantsPS {
|
||||
Vector4 fConsts[caps::MaxFloatConstantsPS];
|
||||
Vector4i iConsts[caps::MaxOtherConstants];
|
||||
Vector4 fConsts[caps::MaxFloatConstantsPS];
|
||||
uint32_t bConsts[1];
|
||||
};
|
||||
|
||||
|
@ -4979,7 +4979,7 @@ namespace dxvk {
|
||||
std::memcpy(dst->iConsts, Src.iConsts, constSet.meta.maxConstIndexI * sizeof(Vector4i));
|
||||
|
||||
if (constSet.meta.needsConstantCopies) {
|
||||
Vector4* data = reinterpret_cast<Vector4*>(slice.mapPtr);
|
||||
Vector4* data = reinterpret_cast<Vector4*>(dst->fConsts);
|
||||
|
||||
auto& shaderConsts = GetCommonShader(Shader)->GetConstants();
|
||||
|
||||
|
@ -289,15 +289,15 @@ namespace dxvk {
|
||||
|
||||
void DxsoCompiler::emitDclConstantBuffer() {
|
||||
std::array<uint32_t, 2> members = {
|
||||
// float f[256 or 224 or 8192]
|
||||
m_module.defArrayTypeUnique(
|
||||
getVectorTypeId({ DxsoScalarType::Float32, 4 }),
|
||||
m_module.constu32(m_layout->floatCount)),
|
||||
|
||||
// int i[16 or 2048]
|
||||
m_module.defArrayTypeUnique(
|
||||
getVectorTypeId({ DxsoScalarType::Sint32, 4 }),
|
||||
m_module.constu32(m_layout->intCount))
|
||||
m_module.constu32(m_layout->intCount)),
|
||||
|
||||
// float f[256 or 224 or 8192]
|
||||
m_module.defArrayTypeUnique(
|
||||
getVectorTypeId({ DxsoScalarType::Float32, 4 }),
|
||||
m_module.constu32(m_layout->floatCount))
|
||||
};
|
||||
|
||||
// Decorate array strides, this is required.
|
||||
@ -311,8 +311,8 @@ namespace dxvk {
|
||||
? spv::DecorationBufferBlock
|
||||
: spv::DecorationBlock);
|
||||
|
||||
m_module.memberDecorateOffset(structType, 0, m_layout->floatOffset());
|
||||
m_module.memberDecorateOffset(structType, 1, m_layout->intOffset());
|
||||
m_module.memberDecorateOffset(structType, 0, m_layout->intOffset());
|
||||
m_module.memberDecorateOffset(structType, 1, m_layout->floatOffset());
|
||||
|
||||
m_module.setDebugName(structType, "cbuffer_t");
|
||||
m_module.setDebugMemberName(structType, 0, "f");
|
||||
@ -1007,7 +1007,7 @@ namespace dxvk {
|
||||
structIdx = m_module.constu32(0);
|
||||
cBufferId = m_cFloatBuffer;
|
||||
} else {
|
||||
structIdx = m_module.constu32(0);
|
||||
structIdx = m_module.constu32(1);
|
||||
cBufferId = m_cBuffer;
|
||||
}
|
||||
} else {
|
||||
@ -1015,7 +1015,7 @@ namespace dxvk {
|
||||
structIdx = m_module.constu32(0);
|
||||
cBufferId = m_cIntBuffer;
|
||||
} else {
|
||||
structIdx = m_module.constu32(1);
|
||||
structIdx = m_module.constu32(0);
|
||||
cBufferId = m_cBuffer;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user