1
0
mirror of https://github.com/doitsujin/dxvk.git synced 2025-02-21 22:54:16 +01:00

[d3d8] Alignment and formatting improvements

This commit is contained in:
WinterSnowfall 2025-01-09 11:59:59 +02:00 committed by Philip Rebohle
parent 639f815432
commit 4151d35e8e
24 changed files with 120 additions and 94 deletions

View File

@ -16,7 +16,9 @@ namespace dxvk {
// Vertex buffer that can handle many tiny locks while
// still maintaing the lock ordering of direct-mapped buffers.
class D3D8BatchBuffer final : public D3D8VertexBuffer {
public:
D3D8BatchBuffer(
D3D8Device* pDevice,
D3DPOOL Pool,
@ -67,8 +69,10 @@ namespace dxvk {
}
private:
std::vector<BYTE> m_data;
DWORD m_fvf;
};
@ -86,6 +90,7 @@ namespace dxvk {
};
public:
D3D8Batcher(D3D8Device* pDevice8, Com<d3d9::IDirect3DDevice9>&& pDevice9)
: m_device8(pDevice8)
, m_device(std::move(pDevice9)) {
@ -231,6 +236,7 @@ namespace dxvk {
}
private:
D3D8Device* m_device8;
Com<d3d9::IDirect3DDevice9> m_device;
@ -239,5 +245,7 @@ namespace dxvk {
D3D8IndexBuffer* m_indices = nullptr;
INT m_baseVertexIndex = 0;
std::array<Batch, D3DPT_COUNT> m_batches;
};
}

View File

@ -172,5 +172,5 @@ namespace dxvk {
default: return d3d9::D3DSAMPLERSTATETYPE(-1u);
}
}
}
}

View File

@ -32,12 +32,12 @@ namespace dxvk {
};
D3D8Device::D3D8Device(
D3D8Interface* pParent,
Com<d3d9::IDirect3DDevice9>&& pDevice,
D3DDEVTYPE DeviceType,
HWND hFocusWindow,
DWORD BehaviorFlags,
D3DPRESENT_PARAMETERS* pParams)
D3D8Interface* pParent,
Com<d3d9::IDirect3DDevice9>&& pDevice,
D3DDEVTYPE DeviceType,
HWND hFocusWindow,
DWORD BehaviorFlags,
D3DPRESENT_PARAMETERS* pParams)
: D3D8DeviceBase(std::move(pDevice))
, m_d3d8Options(pParent->GetOptions())
, m_parent(pParent)
@ -165,7 +165,7 @@ namespace dxvk {
HRESULT res = GetD3D9()->GetDeviceCaps(&caps9);
if (likely(SUCCEEDED(res)))
dxvk::ConvertCaps8(caps9, pCaps);
ConvertCaps8(caps9, pCaps);
return res;
}

View File

@ -27,15 +27,16 @@ namespace dxvk {
class D3D8Device final : public D3D8DeviceBase {
friend class D3D8StateBlock;
public:
D3D8Device(
D3D8Interface* pParent,
Com<d3d9::IDirect3DDevice9>&& pDevice,
D3DDEVTYPE DeviceType,
HWND hFocusWindow,
DWORD BehaviorFlags,
D3DPRESENT_PARAMETERS* pParams);
D3D8Interface* pParent,
Com<d3d9::IDirect3DDevice9>&& pDevice,
D3DDEVTYPE DeviceType,
HWND hFocusWindow,
DWORD BehaviorFlags,
D3DPRESENT_PARAMETERS* pParams);
~D3D8Device();
@ -356,8 +357,6 @@ namespace dxvk {
HRESULT STDMETHODCALLTYPE DeletePatch(UINT Handle);
public: // Internal Methods //
const D3D8Options* GetOptions() const {
return &m_d3d8Options;
}

View File

@ -3,6 +3,7 @@
#include "d3d8_include.h"
namespace dxvk {
constexpr bool isDXT(D3DFORMAT fmt) {
return fmt == D3DFMT_DXT1
|| fmt == D3DFMT_DXT2
@ -208,7 +209,6 @@ namespace dxvk {
return size;
}
constexpr UINT getSurfaceSize(D3DFORMAT Format, UINT Width, UINT Height) {
if (isDXT(Format)) {
Width = ((Width + 3) >> 2);

View File

@ -5,8 +5,8 @@
#include <cstring>
namespace dxvk
{
namespace dxvk {
D3D8Interface::D3D8Interface() {
m_d3d9 = d3d9::Direct3DCreate9(D3D_SDK_VERSION);

View File

@ -138,7 +138,7 @@ namespace dxvk {
HRESULT res = m_d3d9->GetDeviceCaps(Adapter, (d3d9::D3DDEVTYPE)DeviceType, &caps9);
if (likely(SUCCEEDED(res)))
dxvk::ConvertCaps8(caps9, pCaps);
ConvertCaps8(caps9, pCaps);
return res;
}

View File

@ -1,6 +1,7 @@
#include "d3d8_interface.h"
namespace dxvk {
Logger Logger::s_instance("d3d8.log");
HRESULT CreateD3D8(IDirect3D8** ppDirect3D8) {
@ -10,6 +11,7 @@ namespace dxvk {
*ppDirect3D8 = ref(new D3D8Interface());
return D3D_OK;
}
}
extern "C" {

View File

@ -1,4 +1,5 @@
#include "d3d8_options.h"
#include "../d3d9/d3d9_bridge.h"
#include "../util/config/config.h"
#include "../util/util_string.h"
@ -6,6 +7,7 @@
#include <charconv>
namespace dxvk {
static inline uint32_t parseDword(std::string_view str) {
uint32_t value = UINT32_MAX;
std::from_chars(str.data(), str.data() + str.size(), value);
@ -50,6 +52,6 @@ namespace dxvk {
forceVsDecl.emplace_back(D3DVSDE_REGISTER(reg), D3DVSDT_TYPE(type));
}
}
}

View File

@ -5,6 +5,7 @@
#include "../util/config/config.h"
namespace dxvk {
struct D3D8Options {
/// Some games rely on undefined behavior by using undeclared vertex shader inputs.
@ -42,6 +43,7 @@ namespace dxvk {
bool forceLegacyDiscard = false;
D3D8Options() {}
D3D8Options(const Config& config) {
auto forceVsDeclStr = config.getOption<std::string>("d3d8.forceVsDecl", "");
batching = config.getOption<bool> ("d3d8.batching", batching);
@ -53,4 +55,5 @@ namespace dxvk {
void parseVsDecl(const std::string& decl);
};
}

View File

@ -107,5 +107,4 @@ namespace dxvk {
};
}

View File

@ -333,4 +333,5 @@ namespace dxvk {
return result;
}
}

View File

@ -3,14 +3,14 @@
namespace dxvk {
D3D8StateBlock::D3D8StateBlock(
D3D8Device* pDevice,
D3DSTATEBLOCKTYPE Type,
Com<d3d9::IDirect3DStateBlock9>&& pStateBlock)
: m_device(pDevice)
, m_stateBlock(std::move(pStateBlock))
, m_type(Type)
, m_isSWVP(pDevice->GetD3D9()->GetSoftwareVertexProcessing()) {
D3D8StateBlock::D3D8StateBlock(
D3D8Device* pDevice,
D3DSTATEBLOCKTYPE Type,
Com<d3d9::IDirect3DStateBlock9>&& pStateBlock)
: m_device(pDevice)
, m_stateBlock(std::move(pStateBlock))
, m_type(Type)
, m_isSWVP(pDevice->GetD3D9()->GetSoftwareVertexProcessing()) {
if (Type == D3DSBT_VERTEXSTATE || Type == D3DSBT_ALL) {
// Lights, D3DTSS_TEXCOORDINDEX and D3DTSS_TEXTURETRANSFORMFLAGS,
// vertex shader, VS constants, and various render states.

View File

@ -56,6 +56,7 @@ namespace dxvk {
protected:
IDirect3DBaseTexture8* m_container;
};
}

View File

@ -58,7 +58,6 @@ namespace dxvk {
}
}
private:
Com<D3D9> m_d3d9;

View File

@ -108,4 +108,5 @@ namespace dxvk {
const Config* DxvkD3D8InterfaceBridge::GetConfig() const {
return &m_interface->GetInstance()->config();
}
}

View File

@ -74,8 +74,11 @@ namespace dxvk {
class D3D9InterfaceEx;
class DxvkD3D8Bridge : public IDxvkD3D8Bridge {
public:
DxvkD3D8Bridge(D3D9DeviceEx* pDevice);
~DxvkD3D8Bridge();
ULONG STDMETHODCALLTYPE AddRef();
@ -93,12 +96,17 @@ namespace dxvk {
const POINT* pDestPoint);
private:
D3D9DeviceEx* m_device;
};
class DxvkD3D8InterfaceBridge : public IDxvkD3D8InterfaceBridge {
public:
DxvkD3D8InterfaceBridge(D3D9InterfaceEx* pObject);
~DxvkD3D8InterfaceBridge();
ULONG STDMETHODCALLTYPE AddRef();
@ -112,6 +120,9 @@ namespace dxvk {
const Config* GetConfig() const;
protected:
D3D9InterfaceEx* m_interface;
};
}