From bb4fc18bab0412928373a24d64b101fffc631c8e Mon Sep 17 00:00:00 2001 From: Dege Date: Wed, 30 Sep 2020 16:03:56 +0200 Subject: [PATCH] Adding the current version of dgVoodooAPI --- dgVoodooAPI/Bin/Release/dgVoodooAPI.dll | Bin 0 -> 75264 bytes dgVoodooAPI/Bin/Spec Release/dgVoodooAPI.dll | Bin 0 -> 102400 bytes dgVoodooAPI/Doc/dgVoodooAPI.chm | Bin 0 -> 54741 bytes dgVoodooAPI/Inc/APIDebugObj.hpp | 106 ++++ dgVoodooAPI/Inc/APIObject.hpp | 31 + dgVoodooAPI/Inc/APITypes.h | 45 ++ dgVoodooAPI/Inc/IAPIDataStream.hpp | 48 ++ dgVoodooAPI/Inc/ICPLDDI.hpp | 108 ++++ dgVoodooAPI/Inc/IConfig.hpp | 47 ++ dgVoodooAPI/Inc/IIniParser.hpp | 66 ++ dgVoodooAPI/Inc/IMainFactory.hpp | 39 ++ dgVoodooAPI/Inc/dgVoodooConfig.hpp | 565 ++++++++++++++++++ dgVoodooAPI/Lib/dgVoodooAPI.lib | Bin 0 -> 2262 bytes dgVoodooAPI/SampleApp/ReadMe.txt | 1 + dgVoodooAPI/SampleApp/SampleApp.cpp | 332 ++++++++++ dgVoodooAPI/SampleApp/SampleApp.sln | 22 + dgVoodooAPI/SampleApp/SampleApp.vcxproj | 171 ++++++ .../SampleApp/TestFiles/INIPropertySet.ini | 10 + .../SampleApp/TestFiles/TestConfig.conf | 13 + 19 files changed, 1604 insertions(+) create mode 100644 dgVoodooAPI/Bin/Release/dgVoodooAPI.dll create mode 100644 dgVoodooAPI/Bin/Spec Release/dgVoodooAPI.dll create mode 100644 dgVoodooAPI/Doc/dgVoodooAPI.chm create mode 100644 dgVoodooAPI/Inc/APIDebugObj.hpp create mode 100644 dgVoodooAPI/Inc/APIObject.hpp create mode 100644 dgVoodooAPI/Inc/APITypes.h create mode 100644 dgVoodooAPI/Inc/IAPIDataStream.hpp create mode 100644 dgVoodooAPI/Inc/ICPLDDI.hpp create mode 100644 dgVoodooAPI/Inc/IConfig.hpp create mode 100644 dgVoodooAPI/Inc/IIniParser.hpp create mode 100644 dgVoodooAPI/Inc/IMainFactory.hpp create mode 100644 dgVoodooAPI/Inc/dgVoodooConfig.hpp create mode 100644 dgVoodooAPI/Lib/dgVoodooAPI.lib create mode 100644 dgVoodooAPI/SampleApp/ReadMe.txt create mode 100644 dgVoodooAPI/SampleApp/SampleApp.cpp create mode 100644 dgVoodooAPI/SampleApp/SampleApp.sln create mode 100644 dgVoodooAPI/SampleApp/SampleApp.vcxproj create mode 100644 dgVoodooAPI/SampleApp/TestFiles/INIPropertySet.ini create mode 100644 dgVoodooAPI/SampleApp/TestFiles/TestConfig.conf diff --git a/dgVoodooAPI/Bin/Release/dgVoodooAPI.dll b/dgVoodooAPI/Bin/Release/dgVoodooAPI.dll new file mode 100644 index 0000000000000000000000000000000000000000..c2e93e52215275d6dd6f1fadd710c2b5f7e78ac9 GIT binary patch literal 75264 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 z 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 y%$|>ed%ojbRJg6zyAxPIl~bE literal 0 HcmV?d00001 diff --git a/dgVoodooAPI/Doc/dgVoodooAPI.chm b/dgVoodooAPI/Doc/dgVoodooAPI.chm new file mode 100644 index 0000000000000000000000000000000000000000..50c3e28bbd50931c029666ef843fc6eaf949f5ea GIT binary patch literal 54741 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 koqOMZHJlv3^5jo9@@;9Jx%zh1WdFB;_ + +namespace dgVoodoo { + +// --- ICPLDDI ----------------------------------------------------------------- + +class ICPLDDI +{ +public: + + enum APIType + { + AT_Unknown = 0, + AT_D3D11, + AT_D3D12 + }; + + enum FeatureLevel + { + FL_Unknown = 0, + FL_D3D10_0, + FL_D3D10_1, + FL_D3D11_0, + FL_D3D11_1, + FL_D3D12_0, + FL_D3D12_1, + }; + + + struct OutputDesc + { + WCHAR name[32]; + WCHAR desc[128]; + HMONITOR hMonitor; + }; + + + struct ModeDesc + { + UInt32 xRes; + UInt32 yRes; + UInt32 refreshRateNumerator; + UInt32 refreshRateDenominator; + UInt32 refreshRateSimple; + + ModeDesc (): + xRes (0), + yRes (0), + refreshRateNumerator (0), + refreshRateDenominator (0), + refreshRateSimple (0) + { + } + }; + +protected: + const APIDebugObj* pDebug; + +public: + + void inline SetDebugObject (const APIDebugObj* _pDebug) { pDebug = _pDebug; } + + virtual const char* GetAPIName () = 0; + virtual ConfigGeneral::RendererAPI GetAPI () = 0; + virtual APIType GetAPIType () = 0; + + virtual bool Activate () = 0; + virtual void Deactivate () = 0; + + virtual UInt32 GetNumberOfAdapters () = 0; + virtual bool GetAdapterName (UInt32 adapterIdx, WCHAR* pName) = 0; + virtual bool IsAdapterSoftware (UInt32 adapterIdx) = 0; + + virtual UInt32 GetNumberOfOutputs (UInt32 adapterIdx) = 0; + virtual bool GetOutputDesc (UInt32 adapterIdx, UInt32 outputIdx, OutputDesc* pDesc) = 0; + + virtual UInt32 GetNumberOfMSAALevels (UInt32 adapterIdx) = 0; + virtual UInt32 GetMSAALevel (UInt32 adapterIdx, UInt32 idx) = 0; + + virtual UInt32 GetNumberOfResolutions (UInt32 adapterIdx, UInt32 outputIndex, + ConfigGeneral::ScanlineOrder scanlineOrder) = 0; + virtual bool GetResolution (UInt32 adapterIdx, UInt32 outputIdx, ConfigGeneral::ScanlineOrder scanlineOrder, + UInt32 resIdx, ModeDesc* pDesc) = 0; + + virtual UInt32 GetRefreshRateSimple (UInt32 refRateNumerator, UInt32 refRateDenominator) = 0; +}; + + +} // namespace dgVoodoo + +#endif // ICPLDDI_HPP \ No newline at end of file diff --git a/dgVoodooAPI/Inc/IConfig.hpp b/dgVoodooAPI/Inc/IConfig.hpp new file mode 100644 index 0000000..55dd5b7 --- /dev/null +++ b/dgVoodooAPI/Inc/IConfig.hpp @@ -0,0 +1,47 @@ +// ***************************************************************************** +// File: IConfig.hpp +// +// Description: dgVoodoo Config functionality interface +// +// Contact person: DG +// +// ***************************************************************************** + +#ifndef ICONFIG_HPP +#define ICONFIG_HPP + +// --- Includes ---------------------------------------------------------------- + +#include "APITypes.h" +#include "dgVoodooConfig.hpp" +#include "APIDebugObj.hpp" + +namespace dgVoodoo { + +// --- IConfig ----------------------------------------------------------------- + +class IConfig +{ + +public: + virtual bool ReadConfig (Config& toConfig, const char* pFileName, const APIDebugObj* pDebug = NULL) = 0; + virtual bool ReadConfig (Config& toConfig, const wchar_t* pFileName, const APIDebugObj* pDebug = NULL) = 0; + virtual bool ReadConfig (Config& toConfig, HANDLE hFile, const APIDebugObj* pDebug = NULL) = 0; + virtual bool ReadConfig (Config& toConfig, IAPIDataStream* pFromStream, const APIDebugObj* pDebug = NULL) = 0; + + virtual bool WriteConfig (const Config& fromConfig, const char* pFileName, const char* pINITemplate = NULL, const APIDebugObj* pDebug = NULL) = 0; + virtual bool WriteConfig (const Config& fromConfig, const wchar_t* pFileName, const char* pINITemplate = NULL, const APIDebugObj* pDebug = NULL) = 0; + virtual bool WriteConfig (const Config& fromConfig, HANDLE hFile, const char* pINITemplate = NULL, const APIDebugObj* pDebug = NULL) = 0; + virtual bool WriteConfig (const Config& fromConfig, IAPIDataStream* pToStream, const char* pINITemplate = NULL, const APIDebugObj* pDebug = NULL) = 0; + + virtual bool ValidateConfig (const Config& config, const APIDebugObj* pDebug = NULL) = 0; + virtual const char* GetINITemplate () = 0; + + virtual bool IsResolutionTypeDynamic (UInt32 width, UInt32 height) = 0; +}; + + +} // namespace dgVoodoo + + +#endif // ICONFIG_HPP \ No newline at end of file diff --git a/dgVoodooAPI/Inc/IIniParser.hpp b/dgVoodooAPI/Inc/IIniParser.hpp new file mode 100644 index 0000000..757ae8f --- /dev/null +++ b/dgVoodooAPI/Inc/IIniParser.hpp @@ -0,0 +1,66 @@ +// ***************************************************************************** +// File: IIniParser.hpp +// +// Description: Ini file parser interface +// +// Contact person: DG +// +// ***************************************************************************** + +#ifndef IINIPARSER_HPP +#define IINIPARSER_HPP + +// --- Includes ---------------------------------------------------------------- + +#include "APIObject.hpp" + +namespace dgVoodoo { + +// --- Predeclarations --------------------------------------------------------- + +class IAPIDataStream; + +// --- IIniParser -------------------------------------------------------------- + +class IIniParser: public APIObject +{ +public: + enum StringType + { + CaseSensitive = 0, + LowerCase, + UpperCase + }; + +public: + virtual ~IIniParser () {} + + virtual bool Parse (const char* pFileName, StringType stringType) = 0; + virtual bool Parse (const wchar_t* pFileName, StringType stringType) = 0; + virtual bool Parse (IAPIDataStream* pStream, StringType stringType) = 0; + + virtual UInt32 GetNumberOfSections () const = 0; + virtual const char* GetSectionName (UInt32 sectionIdx) const = 0; + + virtual UInt32 GetNumberOfProperties (UInt32 sectionIdx) const = 0; + virtual const char* GetPropertyName (UInt32 sectionIdx, UInt32 propertyIdx) const = 0; + + virtual UInt32 GetNumberOfPropertyValues (UInt32 sectionIdx, UInt32 propertyIdx) const = 0; + virtual const char* GetPropertyValueAsString (UInt32 sectionIdx, UInt32 propertyIdx, UInt32 valueIdx) const = 0; + virtual bool GetPropertyValueAsInt (UInt32 sectionIdx, UInt32 propertyIdx, UInt32 valueIdx, Int32& value) const = 0; + //virtual bool GetPropertyValueAsFloat (UInt32 sectionIdx, UInt32 propertyIdx, UInt32 valueIdx, float& value) const = 0; + + virtual UInt32 GetNumberOfSubProperties (UInt32 sectionIdx, UInt32 propertyIdx) const = 0; + virtual const char* GetSubPropertyName (UInt32 sectionIdx, UInt32 propertyIdx, UInt32 subPropertyIdx) const = 0; + virtual const char* GetSubPropertyValueAsString (UInt32 sectionIdx, UInt32 propertyIdx, UInt32 subPropertyIdx) const = 0; + virtual bool GetSubPropertyValueAsInt (UInt32 sectionIdx, UInt32 propertyIdx, UInt32 subPropertyIdx, Int32& value) const = 0; + //virtual bool GetSubPropertyValueAsFloat (UInt32 sectionIdx, UInt32 propertyIdx, UInt32 subPropertyIdx, float& value) const = 0; + + // Debug version only functions + + virtual void DbgDump () = 0; +}; + +} // namespace dgVoodoo + +#endif // !IINIPARSER_HPP diff --git a/dgVoodooAPI/Inc/IMainFactory.hpp b/dgVoodooAPI/Inc/IMainFactory.hpp new file mode 100644 index 0000000..3abe15e --- /dev/null +++ b/dgVoodooAPI/Inc/IMainFactory.hpp @@ -0,0 +1,39 @@ +// ***************************************************************************** +// File: IMainFactory.hpp +// +// Description: dgVoodoo Main Factory interface +// +// Contact person: DG +// +// ***************************************************************************** + +// --- Includes ---------------------------------------------------------------- + +#include "APITypes.h" +#include "ICPLDDI.hpp" +#include "IConfig.hpp" +#include "IIniParser.hpp" + +using namespace dgVoodoo; + +// --- Factory interface ------------------------------------------------------- + +class IMainFactory +{ +public: + + virtual ICPLDDI* GetCPLDDIObject (ConfigGeneral::RendererAPI api, const APIDebugObj* pDebug = NULL) = 0; + virtual IConfig* GetIConfig () = 0; + virtual IIniParser* CreateIniParser (const APIDebugObj* pDebug = NULL) = 0; +}; + + +// --- Functions --------------------------------------------------------------- + +extern "C" { + +IMainFactory API_EXPORT * dgVoodoo_API_Init (); +void API_EXPORT dgVoodoo_API_Exit (); +UInt32 API_EXPORT dgVoodoo_API_GetVersion (); + +} \ No newline at end of file diff --git a/dgVoodooAPI/Inc/dgVoodooConfig.hpp b/dgVoodooAPI/Inc/dgVoodooConfig.hpp new file mode 100644 index 0000000..c12f528 --- /dev/null +++ b/dgVoodooAPI/Inc/dgVoodooConfig.hpp @@ -0,0 +1,565 @@ +// ***************************************************************************** +// File: dgVoodooConfig.hpp +// +// Description: dgVoodoo configuration +// +// Contact person: DG +// +// ***************************************************************************** + +#ifndef DGVOODOOCONFIG_HPP +#define DGVOODOOCONFIG_HPP + +// --- Includes ---------------------------------------------------------------- + +#include "APITypes.h" +#include "string.h" + +// --- Defines ----------------------------------------------------------------- + +#define MAX_NUM_OF_DX_EXTRA_RESOLUTIONS 16 + +// --- Predeclarations --------------------------------------------------------- + +typedef void * HANDLE; + +namespace dgVoodoo { + +class IAPIDataStream; + +// --- Config structures ------------------------------------------------------- + +#pragma pack(push) +#pragma pack(1) + +// --- General ----------------------------------------------------------------- + +struct ConfigGeneral +{ + enum RendererAPI + { + API_BestAvailable = 0, + API_Direct3D11_FL10_0, + API_Direct3D11_FL10_1, + API_Direct3D11_MS_WARP_FL10_1, + API_Direct3D11_FL11_0, + API_Direct3D12_FL11_0, + API_Direct3D12_FL12_0, + + NumOfAPITypes + }; + + + enum Adapter + { + AdapterAll = 0 + }; + + + enum ScanlineOrder + { + SO_OutputDefault = 0, + SO_Progressive, + SO_Undefined, + + NumOfScanlineOrders + }; + + + enum ScalingMode + { + SM_Unspecified = 0, + SM_Centered, + SM_Stretched, + SM_AspectRatio, + SM_AspectRatio4_3, + SM_AspectRatio4_3_CRTLike, + SM_AspectRatio4_3_C64Like, + SM_CenteredAspectRatio, + + NumOfScalingModes + }; + + + enum Resolution + { + R_Unforced = 0, + R_Max = 0xFFFFFFFF, // It can have a parameter, the aspect ratio + R_Max_ISF = 0xFFFFFFFE, + R_MaxFHD = 0xFFFFFFFD, + R_MaxFHD_ISF = 0xFFFFFFFC, + R_MaxQHD = 0xFFFFFFFB, + R_MaxQHD_ISF = 0xFFFFFFFA, + R_IntegerScaled = 0xFFFFFFF9, // It has the integer scale value as a parameter + + // Optional parameters for R_Max + + PR_Max_4_3 = 0x100, + PR_Max_16_9 = 0x101 + }; + + RendererAPI rendererAPI; + UInt32 rendererDevice; // AdapterAll or adapter ordinal + UInt32 renderingOutput; // 0 == default + UInt32 brightnessScale; + UInt32 colorScale; + UInt32 contrastScale; + ScanlineOrder scanlineOrder; + ScalingMode scalingMode; + bool windowed; + bool keepApectRatio; + bool enumerateRefreshRates; + bool captureMouse; + bool centerAppWindow; + bool inheritColorProfile; + + ConfigGeneral (): + rendererAPI (API_BestAvailable), + rendererDevice (0), + renderingOutput (0), + brightnessScale (100), + colorScale (100), + contrastScale (100), + scanlineOrder (SO_OutputDefault), + scalingMode (SM_Unspecified), + windowed (false), + keepApectRatio (true), + enumerateRefreshRates (false), + captureMouse (true), + centerAppWindow (false), + inheritColorProfile (false) + { + } +}; + + +// --- GeneralExt -------------------------------------------------------------- + +struct ConfigGeneralExt +{ + enum Environment + { + Env_Unspecified = 0, + Env_DosBox, + Env_QEmu + }; + + + enum WindowedAttributes + { + WA_DefaultAttributes = 0x0, + + WA_BorderlessFlag = 0x1, + WA_AlwaysOnTop = 0x2, + WA_FullscreenSize = 0x4, + + WA_FlagsMask = 0x7 + }; + + + enum DisplayROIPosition + { + DROI_Centered = 0xFFFFFFFF + }; + + + enum DisplayROISize + { + DROI_Rational = 0xFFFFFFFF + }; + + + enum Resampling + { + RS_PointSampled = 0, + RS_Bilinear, + RS_Bicubic, + RS_Lanczos_2, + RS_Lanczos_3 + }; + + + UInt32 desktopResWidth; + UInt32 desktopResHeight; + UInt32 desktopRefRateNumerator; + UInt32 desktopRefRateDenominator; + UInt32 desktopBitDepth; + UInt32 deframerSize; + UInt32 imageXScaleFactor; + UInt32 imageYScaleFactor; + UInt32 displayROIPosX; + UInt32 displayROIPosY; + UInt32 displayROISizeX; + UInt32 displayROISizeY; + Environment environment; + UInt32 windowedAttributes; + Resampling resampling; + bool freeMouse; + bool enableGDIHooking; + + ConfigGeneralExt (): + desktopResWidth (0), + desktopResHeight (0), + desktopRefRateNumerator (0), + desktopRefRateDenominator (0), + desktopBitDepth (0), + deframerSize (1), + imageXScaleFactor (1), + imageYScaleFactor (1), + displayROIPosX (0), + displayROIPosY (0), + displayROISizeX (0), + displayROISizeY (0), + environment (Env_Unspecified), + windowedAttributes (WA_DefaultAttributes), + resampling (RS_Bilinear), + freeMouse (false), + enableGDIHooking (false) + { + } +}; + +// --- Glide ------------------------------------------------------------------- + +struct ConfigGlide +{ + enum CardType + { + VoodooGraphics = 0, + VoodooRush = 1, + Voodoo2 = 2, + VoodooBanshee = 3, + Other = 4, + + NumOfCardTypes + }; + + enum TexFilterType + { + TF_AppDriven = 0, + TF_ForcePoint = 0x100, + TF_ForceBilinear = 0x200 + }; + + CardType cardType; + UInt32 onBoardMemSize; + UInt32 texMemSize; + Int32 numOfTMUs; + UInt32 resWidth; + UInt32 resHeight; + UInt32 msaaLevel; + UInt32 refRateNumerator; + UInt32 refRateDenominator; + TexFilterType texFilterType; + bool disableMipMapping; + bool enableGammaRamp; + bool pointCastPalette; + bool forceVSync; + bool forceEmulateLfbPCI; + bool use16BitDepthBuffer; + bool enable3DfxWaterMark; + bool enableSplashScreen; + bool enableInactiveAppState; + + ConfigGlide (): + cardType (Voodoo2), + onBoardMemSize (8*1024*1024), + texMemSize (4*1024*1024), + numOfTMUs (2), + resWidth (0), + resHeight (0), + msaaLevel (0), + refRateNumerator (0), + refRateDenominator (0), + texFilterType (TF_AppDriven), + disableMipMapping (false), + enableGammaRamp (true), + pointCastPalette (false), + forceVSync (true), + forceEmulateLfbPCI (false), + use16BitDepthBuffer (false), + enable3DfxWaterMark (true), + enableSplashScreen (false), + enableInactiveAppState (false) + { + } +}; + +// --- GlideExt ---------------------------------------------------------------- + +struct ConfigGlideExt +{ + enum DitheringEffect + { + DE_Pure32Bit = 0, + DE_Dither2x2, + DE_Dither4x4, + + NumOfDitherinEffects, + }; + + enum Dithering + { + DT_Disabled = 0, + DT_AppDriven, + DT_ForceAlways, + + NumOfDitheringBehaviors + }; + + DitheringEffect ditheringEffect; + Dithering dithering; + UInt32 ditherOrderedMatrixSizeScale; + + ConfigGlideExt (): + ditheringEffect (DE_Pure32Bit), + dithering (DT_ForceAlways), + ditherOrderedMatrixSizeScale (0) + { + } +}; + +// --- ConfigDirectX ----------------------------------------------------------- + +struct ConfigDirectX +{ + enum CardType + { + SVGA = 0, + Virtual3D, + Geforce4Ti4800, + Radeon8500, + MatroxParhelia512, + GeforceFX5700Ultra, + + NumOfCardTypes + }; + + + enum TexFilterType + { + TF_AppDriven = 0, + TF_ForcePoint = 0x100, + TF_ForceBilinear = 0x200, + TF_ForceLinearMip = 0x300, + TF_ForceTrilinear = 0x400, + TF_ForceAniso1x = 1, + TF_ForceAniso2x = 2, + TF_ForceAniso3x = 3, + TF_ForceAniso4x = 4, + TF_ForceAniso5x = 5, + TF_ForceAniso6x = 6, + TF_ForceAniso7x = 7, + TF_ForceAniso8x = 8, + TF_ForceAniso9x = 9, + TF_ForceAniso10x = 10, + TF_ForceAniso11x = 11, + TF_ForceAniso12x = 12, + TF_ForceAniso13x = 13, + TF_ForceAniso14x = 14, + TF_ForceAniso15x = 15, + TF_ForceAniso16x = 16, + + TF_AnisoMask = 0xFF + }; + + CardType cardType; + UInt64 videoMemSize; + UInt32 resWidth; + UInt32 resHeight; + UInt32 msaaLevel; + UInt32 refRateNumerator; + UInt32 refRateDenominator; + UInt32 texFilterType; + bool disabledAndPassThru; + bool appControlledScreenState; + bool disableAltEnter; + bool watermark; + bool linearBltStretch; + bool applyPhongShading; + bool forceVSync; + bool disableMipmapping; + bool fastVideoMemAccess; + + ConfigDirectX (): + cardType (Virtual3D), + videoMemSize (256*1024*1024), + resWidth (0), + resHeight (0), + msaaLevel (0), + refRateNumerator (0), + refRateDenominator (0), + texFilterType (TF_AppDriven), + disabledAndPassThru (false), + appControlledScreenState (true), + disableAltEnter (true), + watermark (true), + linearBltStretch (false), + applyPhongShading (false), + forceVSync (false), + disableMipmapping (false), + fastVideoMemAccess (false) + { + } +}; + +// --- DirectXExt -------------------------------------------------------------- + +struct ConfigDirectXExt +{ + enum AdapterIDType + { + AIDT_Default = 0, + AIDT_nVidia, + AIDT_AMD, + AIDT_Intel + }; + + + enum DitheringEffect + { + DE_Pure32Bit = 0, + DE_Ordered2x2, + DE_Ordered4x4, + + NumOfDitheringEffects, + }; + + + enum Dithering + { + DT_Disabled = 0, + DT_AppDriven, + DT_ForceOn16Bit, + DT_ForceAlways, + + NumOfDitheringBehaviors + }; + + + enum DepthBufferBitDepth + { + DBD_AppDriven = 0, + DBD_ForceMin24, + DBD_Force32, + + NumOfDepthBufferBitDepths + }; + + + enum DefEnumResolutions + { + DER_None = 0, + DER_Classics, + DER_All, + + NumOfDefEnumResolutions + }; + + + enum EnumResBitDepths + { + ERBD_8 = 0x1, + ERBD_16 = 0x2, + ERBD_32 = 0x4, + + ERBD_All = 0x7 + }; + + + struct ExtraResolution + { + UInt32 width; + UInt32 height; + UInt32 refRate; + }; + + AdapterIDType adapterIDType; + UInt32 vendorID; + UInt32 deviceID; + UInt32 subSysID; + UInt32 revisionID; + ExtraResolution extraResolutions[MAX_NUM_OF_DX_EXTRA_RESOLUTIONS]; + DitheringEffect ditheringEffect; + Dithering dithering; + UInt32 ditherOrderedMatrixSizeScale; + DepthBufferBitDepth depthBuffersBitDepth; + DefEnumResolutions defaultEnumeratedResolutions; + UInt32 enumeratedResolutionBitDepths; + UInt32 maxVSConstRegisters; + bool msD3DDeviceNames; + bool rtTexturesForceScaleAndMSAA; + bool smoothedDepthSampling; + bool deferredScreenModeSwitch; + bool primarySurfaceBatchedUpdate; + + ConfigDirectXExt () : + adapterIDType (AIDT_Default), + vendorID (0xFFFFFFFF), + deviceID (0xFFFFFFFF), + subSysID (0xFFFFFFFF), + revisionID (0xFFFFFFFF), + ditheringEffect (DE_Pure32Bit), + dithering (DT_ForceAlways), + ditherOrderedMatrixSizeScale (0), + depthBuffersBitDepth (DBD_AppDriven), + defaultEnumeratedResolutions (DER_All), + enumeratedResolutionBitDepths (ERBD_All), + maxVSConstRegisters (256), + msD3DDeviceNames (false), + rtTexturesForceScaleAndMSAA (true), + smoothedDepthSampling (true), + deferredScreenModeSwitch (false), + primarySurfaceBatchedUpdate (false) + { + memset (extraResolutions, 0, sizeof (extraResolutions)); + } +}; + +// --- Debug ------------------------------------------------------------------- + +struct ConfigDebug +{ + enum Severity + { + D_Disable, + D_Enable, + D_EnableBreak + }; + + Severity info; + Severity warning; + Severity error; + UInt32 maxTraceLevel; + bool logToFile; + + ConfigDebug (): + info (D_Enable), + warning (D_Enable), + error (D_Enable), + maxTraceLevel (0), + logToFile (false) + { + } +}; + +// --- Config ------------------------------------------------------------------ + +struct Config +{ + ConfigGeneral general; + ConfigGlide glide; + ConfigDirectX directX; + + ConfigGeneralExt generalExt; + ConfigGlideExt glideExt; + ConfigDirectXExt directXExt; + + ConfigDebug debug; +}; + +#pragma pack(pop) + +} // namespace dgVoodoo + +#endif // !DGVOODOOCONFIG_HPP \ No newline at end of file diff --git a/dgVoodooAPI/Lib/dgVoodooAPI.lib b/dgVoodooAPI/Lib/dgVoodooAPI.lib new file mode 100644 index 0000000000000000000000000000000000000000..8910c69fe8fe922f073220e48e48ec8c131d16be GIT binary patch literal 2262 zcmcIlPj6B|5dXagrAUkt+jzieXe7}dq=!Mz##t2Ig3rQ*Qm`T5aaE>I?_&i8@_zr4<|IJZ}ys z6skeOmq_uKE5(-u1q{ax6ec7ZY z#5SZr%O>2`u-?a$AU++qFC<=6Jfr!{g*>ouTwS4`S~GetIConfig (); + if (pConfig != NULL) { + + // Let's use a debug object for feedback from the debug layer + dgVoodoo::APIDebugObj debug (APIDebugObj::EnableInfo, APIDebugObj::EnableWarning, APIDebugObj::EnableError, "[TestApp] ", 0); + + // Read a config file that defines only some of the properties + dgVoodoo::Config config; + if (pConfig->ReadConfig (config, "TestFiles\\TestConfig.conf", &debug)) { + + printf ("'TestConfig.conf' is successfully read.\n"); + + // Let's change scaling mode to 'Centered, keep Aspect Ratio' + config.general.scalingMode = dgVoodoo::ConfigGeneral::SM_CenteredAspectRatio; + + // Write a binary and an INI version from it into files + const char* pINITemplate = pConfig->GetINITemplate (); + if (pConfig->WriteConfig (config, "WrittenTestFiles\\ConfigBin.conf", NULL, &debug)) { + printf ("'ConfigBin.conf' is successfully written.\n"); + } + if (pConfig->WriteConfig (config, "WrittenTestFiles\\ConfigINI.conf", pINITemplate, &debug)) { + printf ("'ConfigINI.conf' is successfully written.\n"); + } + } else { + printf ("Cannot read testconfig.conf. Test failed.\n"); + } + } +} + + +// --- Config read-from-custom-stream and write-to-file sample ----------------- + +static void ConfigFromCustomINIStream (IMainFactory* pFactory) +{ + class MyINIStream: public IAPIDataStream + { + protected: + const char* pStreamData; + mutable Int32 currentPos; + mutable Status status; + + protected: + virtual Status Seek (Int32 move, Origin origin, UInt32* newPos = NULL) const override + { + switch (origin) { + case IAPIDataStream::OCurr: + currentPos += move; + break; + + case IAPIDataStream::OSet: + currentPos = move; + break; + + case IAPIDataStream::OEnd: + currentPos = strlen (pStreamData); + break; + + default: + currentPos = -1; + break; + } + + status = (currentPos >= 0 && currentPos < (Int32) strlen (pStreamData)) ? StatusOk : StatusError; + return status; + } + + + virtual Status Read (UInt32 count, void* buffer, UInt32* readBytes = NULL) const + { + if (status == IAPIDataStream::StatusOk) { + UInt32 maxReadable = strlen (pStreamData) - currentPos; + if (count > maxReadable) { + count = maxReadable; + } + memcpy (buffer, pStreamData + currentPos, count); + currentPos += count; + if (readBytes != NULL) { + *readBytes = count; + } + } + return status; + } + + + virtual Status Write (UInt32 /*count*/, void* /*buffer*/, UInt32* /*writtenBytes*/) const + { + // no need to implement + return StatusError; + } + + + virtual UInt32 GetSize () const + { + return strlen (pStreamData); + } + + public: + MyINIStream (const char* pStreamData): + currentPos (0), + status (IAPIDataStream::StatusOk), + pStreamData (pStreamData) + { + } + + }; + + IConfig* pConfig = pFactory->GetIConfig (); + if (pConfig != NULL) { + + // --- Test for a right configuration + { + const char* pStreamData = "version = 0x255\n"\ + "[general]\n"\ + "outputapi = d3d11warp\n"\ + "brightness = 150\n"\ + "[directxext]\n"\ + "extraenumeratedresolutions = \"400x300 @ 56\" 1000x800\n"\ + "ditheringeffect = ordered4x4\n"\ + "dithering = forceon16bit"; + + MyINIStream myStream (pStreamData); + + printf ("\n==== Config read from custom stream and write to file test (right configuration) =====\n\n"); + + // Let's use a debug object for feedback from the debug layer + dgVoodoo::APIDebugObj debug (APIDebugObj::EnableInfo, APIDebugObj::EnableWarning, APIDebugObj::EnableError, "[TestApp] ", 0); + + // Read the config from out custom INI-stream + dgVoodoo::Config config; + if (pConfig->ReadConfig (config, &myStream, &debug)) { + + printf ("Config is successfully read from MyStream.\n"); + + // Write full config into a file + if (pConfig->WriteConfig (config, "WrittenTestFiles\\ConfigFromStreamINI.conf", pConfig->GetINITemplate (), &debug)) { + printf ("'ConfigFromStreamINI.conf' is successfully written.\n"); + } + } else { + printf ("Couldn't read config from MyStream. Test failed.\n"); + } + } + + // --- Test for a wrong configuration + // --- Let's redirect the output of the debug layer from the default output to a custom stream - that writes output to the console window + { + class DebugLayerOutput: public IAPIDataStream + { + protected: + virtual Status Seek (Int32 move, Origin origin, UInt32* newPos = NULL) const override + { + // no need to implement + return StatusError; + } + + + virtual Status Read (UInt32 count, void* buffer, UInt32* readBytes = NULL) const + { + // no need to implement + return StatusError; + } + + + virtual Status Write (UInt32 count, void* buffer, UInt32* writtenBytes) const + { + // Ok, it's a lame solution here, serves only demonstrating purposes + char localBuffer[1024]; + memcpy (localBuffer, buffer, count); + localBuffer[count] = 0x0; + printf ("%s", localBuffer); + + return StatusOk; + } + + + virtual UInt32 GetSize () const + { + // no need to implement + return StatusError; + } + } debugLayerOutput; + + // 'unknownsection' is invalid for dgVoodoo config property set + const char* pStreamData = "version = 0x255\n"\ + "[unknownsection]\n"\ + "dithering = forceon16bit"; + + MyINIStream myStream (pStreamData); + printf ("\n==== Config read from custom stream and write to file test (bad config) =====\n\n"); + + // Let's use a debug object for feedback from the debug layer, redirected to our stream + dgVoodoo::APIDebugObj debug (APIDebugObj::EnableInfo, APIDebugObj::EnableWarning, APIDebugObj::EnableError, "[TestApp] ", 0, &debugLayerOutput); + + // Read the config from out custom INI-stream + dgVoodoo::Config config; + pConfig->ReadConfig (config, &myStream, &debug); + } + } +} + + +// --- INI property set read sample -------------------------------------------- + +static void INIPropertySetRead (IMainFactory* pFactory) +{ + printf ("\n==== INI property set test =====\n\n"); + + // Let's use a debug object for feedback from the debug layer + dgVoodoo::APIDebugObj debug (APIDebugObj::EnableInfo, APIDebugObj::EnableWarning, APIDebugObj::EnableError, "[TestApp] ", 0); + + IIniParser* pParser = pFactory->CreateIniParser (&debug); + if (pParser != NULL) { + + if (pParser->Parse ("TestFiles\\INIPropertySet.ini", IIniParser::LowerCase)) { + + printf ("INIPropertySet.ini is successfully parsed. Dumping its content:\n\n"); + + // Dump the property set to the console window + for (UInt32 i = 0; i < pParser->GetNumberOfSections (); i++) { + const char* pSectionName = pParser->GetSectionName (i); + printf (pSectionName != NULL ? "[%s]\n" : "{global}\n", pSectionName); + + for (UInt32 j = 0; j < pParser->GetNumberOfProperties (i); j++) { + const char* pPropertyName = pParser->GetPropertyName (i, j); + printf ("%s = ", pPropertyName); + + for (UInt32 k = 0; k < pParser->GetNumberOfPropertyValues (i, j); k++) { + const char* pValue = pParser->GetPropertyValueAsString (i, j, k); + printf ("\"%s\" ", pValue); + } + for (UInt32 k = 0; k < pParser->GetNumberOfSubProperties (i, j); k++) { + const char* pName = pParser->GetSubPropertyName (i, j, k); + const char* pValue = pParser->GetSubPropertyValueAsString (i, j, k); + printf ("%s:%s ", pName, pValue); + } + printf ("\n"); + } + printf ("\n"); + } + } else { + printf ("Parsing INIPropertySet.ini has failed. Test failed.\n"); + } + + pParser->Release (); + } else { + printf ("Couldn't create iniparser object. Test failed.\n"); + } +} + + +static void DumpGraphicsSystemInformation (IMainFactory* pFactory) +{ + printf ("\n==== Graphics system information test =====\n\n"); + + // Let's use a debug object for feedback from the debug layer + dgVoodoo::APIDebugObj debug (APIDebugObj::EnableInfo, APIDebugObj::EnableWarning, APIDebugObj::EnableError, "[TestApp] ", 0); + + ICPLDDI* pCPLDDI = pFactory->GetCPLDDIObject (dgVoodoo::ConfigGeneral::API_BestAvailable, &debug); + if (pCPLDDI != NULL) { + if (pCPLDDI->Activate ()) { + + printf ("\nAPI: %s", pCPLDDI->GetAPIName ()); + + UInt32 numAdapters = pCPLDDI->GetNumberOfAdapters (); + printf ("\nNumber of adapters: %d", numAdapters); + + for (UInt32 i = 0; i < numAdapters; i++) { + WCHAR adapterName[256]; + + pCPLDDI->GetAdapterName (i, adapterName); + printf ("\nAdapter %i: %ls", i, adapterName); + + UInt32 numOutputs = pCPLDDI->GetNumberOfOutputs (i); + printf ("\n Number of outputs: %d\n", numOutputs); + for (UInt32 j = 0; j < numOutputs; j++) { + UInt32 numRes = pCPLDDI->GetNumberOfResolutions (i, j, dgVoodoo::ConfigGeneral::SO_OutputDefault); + printf ("\n Number of resolutions on output %d: %d\n", j, numRes); + + for (UInt32 k = 0; k < numRes; k++) { + dgVoodoo::ICPLDDI::ModeDesc desc; + if (pCPLDDI->GetResolution (i, j, dgVoodoo::ConfigGeneral::SO_OutputDefault, k, &desc)) { + printf ("\n %dx%d, %dHz", desc.xRes, desc.yRes, desc.refreshRateSimple); + } + } + printf ("\n"); + } + } + } else { + printf ("\nActivating CPL DDI object has failed. Test failed."); + } + } else { + printf ("\nRetrieving CPL DDI object has failed. Test failed."); + } +} + + +int main() +{ + UInt32 version = dgVoodoo_API_GetVersion (); + printf ("\ndgVoodoo API version: %x.%x%x", version >> 8, (version >> 4) & 0xF, (version >> 0) & 0xF); + + IMainFactory* pFactory = dgVoodoo_API_Init (); + if (pFactory != NULL) { + + ConfigReadWrite (pFactory); + ConfigFromCustomINIStream (pFactory); + INIPropertySetRead (pFactory); + DumpGraphicsSystemInformation (pFactory); + + dgVoodoo_API_Exit (); + } + + return 0; +} + diff --git a/dgVoodooAPI/SampleApp/SampleApp.sln b/dgVoodooAPI/SampleApp/SampleApp.sln new file mode 100644 index 0000000..01e9c04 --- /dev/null +++ b/dgVoodooAPI/SampleApp/SampleApp.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.25420.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SampleApp", "SampleApp.vcxproj", "{CD7EACA5-A639-4264-9F8D-5044F8489A15}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x86 = Debug|x86 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {CD7EACA5-A639-4264-9F8D-5044F8489A15}.Debug|x86.ActiveCfg = Debug|Win32 + {CD7EACA5-A639-4264-9F8D-5044F8489A15}.Debug|x86.Build.0 = Debug|Win32 + {CD7EACA5-A639-4264-9F8D-5044F8489A15}.Release|x86.ActiveCfg = Release|Win32 + {CD7EACA5-A639-4264-9F8D-5044F8489A15}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/dgVoodooAPI/SampleApp/SampleApp.vcxproj b/dgVoodooAPI/SampleApp/SampleApp.vcxproj new file mode 100644 index 0000000..095c0be --- /dev/null +++ b/dgVoodooAPI/SampleApp/SampleApp.vcxproj @@ -0,0 +1,171 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + {CD7EACA5-A639-4264-9F8D-5044F8489A15} + Win32Proj + SampleApp + 10.0.17763.0 + + + + Application + true + v141 + Unicode + + + Application + false + v141 + true + Unicode + + + Application + true + v141 + Unicode + + + Application + false + v141 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + + + true + + + false + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + $(SolutionDir)\..\Inc\ + + + Console + true + $(SolutionDir)\..\Lib\ + dgVoodooAPI.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + + + + + Level3 + Disabled + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + $(SolutionDir)\..\Inc\ + + + Console + true + true + true + $(SolutionDir)\..\Lib\ + dgVoodooAPI.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + + + Level3 + + + MaxSpeed + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/dgVoodooAPI/SampleApp/TestFiles/INIPropertySet.ini b/dgVoodooAPI/SampleApp/TestFiles/INIPropertySet.ini new file mode 100644 index 0000000..6658b34 --- /dev/null +++ b/dgVoodooAPI/SampleApp/TestFiles/INIPropertySet.ini @@ -0,0 +1,10 @@ +Color1 = BLUE + +[Geometry] +Shapes1 = rectangle, triangle +Shapes2 = "rotated rectangle" circle +Shapes3 = + +[Topology] [] + +Color2 = red R:255 G:0 B:0 \ No newline at end of file diff --git a/dgVoodooAPI/SampleApp/TestFiles/TestConfig.conf b/dgVoodooAPI/SampleApp/TestFiles/TestConfig.conf new file mode 100644 index 0000000..7152da9 --- /dev/null +++ b/dgVoodooAPI/SampleApp/TestFiles/TestConfig.conf @@ -0,0 +1,13 @@ +version = 0x255 + +[General] + +ScalingMode = stretched_ar + +[Glide] + +Resolution = max + +[DirectX] + +Resolution = 2x \ No newline at end of file