From 57380798911ab37afbf37e22b373212fd9f9761c Mon Sep 17 00:00:00 2001 From: fallenoak Date: Tue, 7 Mar 2023 08:51:06 -0600 Subject: [PATCH] feat(gx): add device states to d3d backend --- src/gx/d3d/CGxDeviceD3d.cpp | 4 + src/gx/d3d/CGxDeviceD3d.hpp | 190 +++++++++++++++++++++++++++++++++++- 2 files changed, 193 insertions(+), 1 deletion(-) diff --git a/src/gx/d3d/CGxDeviceD3d.cpp b/src/gx/d3d/CGxDeviceD3d.cpp index 194219f..97d22c4 100644 --- a/src/gx/d3d/CGxDeviceD3d.cpp +++ b/src/gx/d3d/CGxDeviceD3d.cpp @@ -227,6 +227,10 @@ CGxDeviceD3d::CGxDeviceD3d() : CGxDevice() { // TODO + memset(this->m_deviceStates, 0xFF, sizeof(this->m_deviceStates)); + + // TODO + this->DeviceCreatePools(); this->DeviceCreateStreamBufs(); } diff --git a/src/gx/d3d/CGxDeviceD3d.hpp b/src/gx/d3d/CGxDeviceD3d.hpp index 4afdad3..322f4b6 100644 --- a/src/gx/d3d/CGxDeviceD3d.hpp +++ b/src/gx/d3d/CGxDeviceD3d.hpp @@ -1,13 +1,200 @@ #ifndef GX_D3D_C_GX_DEVICE_D3D_HPP #define GX_D3D_C_GX_DEVICE_D3D_HPP -#include "gx/CGxDevice.hpp" +#include "gx/CGxDevice.hpp" #include #include #include class CGxDeviceD3d : public CGxDevice { public: + // Types + enum EDeviceState { + Ds_SrcBlend, + Ds_DstBlend, + Ds_TssMagFilter0, + Ds_TssMagFilter1, + Ds_TssMagFilter2, + Ds_TssMagFilter3, + Ds_TssMagFilter4, + Ds_TssMagFilter5, + Ds_TssMagFilter6, + Ds_TssMagFilter7, + Ds_TssMagFilter8, + Ds_TssMagFilter9, + Ds_TssMagFilter10, + Ds_TssMagFilter11, + Ds_TssMagFilter12, + Ds_TssMagFilter13, + Ds_TssMagFilter14, + Ds_TssMagFilter15, + Ds_TssMinFilter0, + Ds_TssMinFilter1, + Ds_TssMinFilter2, + Ds_TssMinFilter3, + Ds_TssMinFilter4, + Ds_TssMinFilter5, + Ds_TssMinFilter6, + Ds_TssMinFilter7, + Ds_TssMinFilter8, + Ds_TssMinFilter9, + Ds_TssMinFilter10, + Ds_TssMinFilter11, + Ds_TssMinFilter12, + Ds_TssMinFilter13, + Ds_TssMinFilter14, + Ds_TssMinFilter15, + Ds_TssMipFilter0, + Ds_TssMipFilter1, + Ds_TssMipFilter2, + Ds_TssMipFilter3, + Ds_TssMipFilter4, + Ds_TssMipFilter5, + Ds_TssMipFilter6, + Ds_TssMipFilter7, + Ds_TssMipFilter8, + Ds_TssMipFilter9, + Ds_TssMipFilter10, + Ds_TssMipFilter11, + Ds_TssMipFilter12, + Ds_TssMipFilter13, + Ds_TssMipFilter14, + Ds_TssMipFilter15, + Ds_TssWrapU0, + Ds_TssWrapU1, + Ds_TssWrapU2, + Ds_TssWrapU3, + Ds_TssWrapU4, + Ds_TssWrapU5, + Ds_TssWrapU6, + Ds_TssWrapU7, + Ds_TssWrapU8, + Ds_TssWrapU9, + Ds_TssWrapU10, + Ds_TssWrapU11, + Ds_TssWrapU12, + Ds_TssWrapU13, + Ds_TssWrapU14, + Ds_TssWrapU15, + Ds_TssWrapV0, + Ds_TssWrapV1, + Ds_TssWrapV2, + Ds_TssWrapV3, + Ds_TssWrapV4, + Ds_TssWrapV5, + Ds_TssWrapV6, + Ds_TssWrapV7, + Ds_TssWrapV8, + Ds_TssWrapV9, + Ds_TssWrapV10, + Ds_TssWrapV11, + Ds_TssWrapV12, + Ds_TssWrapV13, + Ds_TssWrapV14, + Ds_TssWrapV15, + Ds_TssTTF0, + Ds_TssTTF1, + Ds_TssTTF2, + Ds_TssTTF3, + Ds_TssTTF4, + Ds_TssTTF5, + Ds_TssTTF6, + Ds_TssTTF7, + Ds_TssMaxAnisotropy0, + Ds_TssMaxAnisotropy1, + Ds_TssMaxAnisotropy2, + Ds_TssMaxAnisotropy3, + Ds_TssMaxAnisotropy4, + Ds_TssMaxAnisotropy5, + Ds_TssMaxAnisotropy6, + Ds_TssMaxAnisotropy7, + Ds_TssMaxAnisotropy8, + Ds_TssMaxAnisotropy9, + Ds_TssMaxAnisotropy10, + Ds_TssMaxAnisotropy11, + Ds_TssMaxAnisotropy12, + Ds_TssMaxAnisotropy13, + Ds_TssMaxAnisotropy14, + Ds_TssMaxAnisotropy15, + Ds_TssTexCoordIndex0, + Ds_TssTexCoordIndex1, + Ds_TssTexCoordIndex2, + Ds_TssTexCoordIndex3, + Ds_TssTexCoordIndex4, + Ds_TssTexCoordIndex5, + Ds_TssTexCoordIndex6, + Ds_TssTexCoordIndex7, + Ds_TssColorOp0, + Ds_TssColorOp1, + Ds_TssColorOp2, + Ds_TssColorOp3, + Ds_TssColorOp4, + Ds_TssColorOp5, + Ds_TssColorOp6, + Ds_TssColorOp7, + Ds_TssAlphaOp0, + Ds_TssAlphaOp1, + Ds_TssAlphaOp2, + Ds_TssAlphaOp3, + Ds_TssAlphaOp4, + Ds_TssAlphaOp5, + Ds_TssAlphaOp6, + Ds_TssAlphaOp7, + Ds_TssColorArg10, + Ds_TssColorArg11, + Ds_TssColorArg12, + Ds_TssColorArg13, + Ds_TssColorArg14, + Ds_TssColorArg15, + Ds_TssColorArg16, + Ds_TssColorArg17, + Ds_TssColorArg20, + Ds_TssColorArg21, + Ds_TssColorArg22, + Ds_TssColorArg23, + Ds_TssColorArg24, + Ds_TssColorArg25, + Ds_TssColorArg26, + Ds_TssColorArg27, + Ds_TssAlphaArg10, + Ds_TssAlphaArg11, + Ds_TssAlphaArg12, + Ds_TssAlphaArg13, + Ds_TssAlphaArg14, + Ds_TssAlphaArg15, + Ds_TssAlphaArg16, + Ds_TssAlphaArg17, + Ds_TssAlphaArg20, + Ds_TssAlphaArg21, + Ds_TssAlphaArg22, + Ds_TssAlphaArg23, + Ds_TssAlphaArg24, + Ds_TssAlphaArg25, + Ds_TssAlphaArg26, + Ds_TssAlphaArg27, + Ds_AmbientMaterialSource, + Ds_DiffuseMaterialSource, + Ds_SpecularMaterialSource, + Ds_EmissiveMaterialSource, + Ds_Ambient, + Ds_AlphaBlendEnable, + Ds_AlphaTestEnable, + Ds_AlphaRef, + Ds_FogEnable, + Ds_ZWriteEnable, + Ds_ColorWriteEnable, + Ds_Lighting, + Ds_SpecularEnable, + Ds_CullMode, + Ds_ClipPlaneEnable, + Ds_ZFunc, + Ds_PointScaleA, + Ds_PointScaleB, + Ds_PointScaleC, + Ds_PointScaleEnable, + DeviceStates_Last, + }; + // Static variables static D3DFORMAT s_GxFormatToD3dFormat[]; static D3DFORMAT s_GxTexFmtToD3dFmt[]; @@ -29,6 +216,7 @@ class CGxDeviceD3d : public CGxDevice { D3DCAPS9 m_d3dCaps; int32_t m_d3dIsHwDevice = 0; D3DDISPLAYMODE m_desktopDisplayMode; + uint32_t m_deviceStates[DeviceStates_Last]; // Virtual member functions virtual void ITexMarkAsUpdated(CGxTex* texId);