Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/workflows/cibuild.yml
Original file line number Diff line number Diff line change
Expand Up @@ -81,15 +81,15 @@ jobs:
if: ${{ matrix.Platform == 'x64' }}
run: |
sudo apt-get update -qq
sudo apt-get install -qq -y libsdl2-dev libglew-dev liblzo2-dev libjpeg-dev &&
sudo apt-get install -qq -y meson libsdl2-dev libglew-dev liblzo2-dev libjpeg-dev &&
sudo apt-get install -qq -y libopenal-dev libogg-dev libtheora-dev libvorbis-dev

- name: Install x86 packages
if: ${{ matrix.Platform == 'x86' }}
run: |
sudo dpkg --add-architecture i386
sudo apt-get update -qq
sudo apt-get install -qq -y libsdl2-dev:i386 libglew-dev:i386 liblzo2-dev:i386 libjpeg-dev:i386 &&
sudo apt-get install -qq -y meson libsdl2-dev:i386 libglew-dev:i386 liblzo2-dev:i386 libjpeg-dev:i386 &&
sudo apt-get install -qq -y libopenal-dev:i386 libogg-dev:i386 libtheora-dev:i386 libvorbis-dev:i386

- name: Install GCC x64
Expand Down Expand Up @@ -187,7 +187,7 @@ jobs:
with:
arch: ${{ matrix.Platform }}
branch: 'latest-stable'
packages: build-base cmake mold sdl2-dev glew-dev lzo-dev libjpeg-turbo-dev openal-soft-dev libogg-dev libtheora-dev libvorbis-dev
packages: build-base cmake meson mold sdl2-dev glew-dev lzo-dev libjpeg-turbo-dev openal-soft-dev libogg-dev libtheora-dev libvorbis-dev

- name: Run CMake x64
if: ${{ matrix.Platform == 'x86_64' }}
Expand Down
41 changes: 41 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,10 @@ if (STATIC_BUILD)
#add_definitions(-DXRAY_STATIC_BUILD)
endif()

if (NOT WIN32)
option(USE_MESA_NINE "Use Gallium Nine from Mesa (without WINE) for D3D9 API" OFF)
endif()

function(xr_install tgt)
if (NOT MSVC)
install(TARGETS ${tgt} DESTINATION "."
Expand Down Expand Up @@ -251,6 +255,43 @@ if (NOT WIN32)
find_package(Theora REQUIRED)
find_package(LZO REQUIRED)
find_package(mimalloc NAMES mimalloc2 mimalloc2.0 mimalloc)

if (USE_MESA_NINE) # for Gallium Nine
message("Using Gallium Nine for native D3D9 API")

#sudo apt install libd3dadapter9-mesa-dev
find_package(PkgConfig REQUIRED)
pkg_check_modules(D3D REQUIRED IMPORTED_TARGET d3d)

add_subdirectory(nine-native)
set(NINE_NATIVE_INCLUDE_DIRS
"${CMAKE_CURRENT_SOURCE_DIR}/Externals/nine-native/include"
"${CMAKE_CURRENT_SOURCE_DIR}/Externals/nine-native/include/D3D9"
)
include_directories("${NINE_NATIVE_INCLUDE_DIRS}")
else() # for DXVK Native
message("Using DXVK-native for D3D9 API")

include(ExternalProject)
ExternalProject_Add(dxvk-native
GIT_REPOSITORY https://github.com/q4a/dxvk-native
GIT_TAG 304434892a241d1c5be580f5a66f8a7418cbd675
GIT_SHALLOW ON
BUILD_ALWAYS OFF
CONFIGURE_HANDLED_BY_BUILD ON
CONFIGURE_COMMAND meson ../dxvk-native
BUILD_COMMAND ninja
INSTALL_COMMAND ""
)
ExternalProject_Get_property(dxvk-native SOURCE_DIR BINARY_DIR)
set(DXVK_NATIVE_INCLUDE_DIRS
"${SOURCE_DIR}/include/native/directx"
"${SOURCE_DIR}/include/native/windows"
)
set(DXVK_NATIVE_D3D9_LIB ${BINARY_DIR}/src/d3d9/libdxvk_d3d9.so)
include_directories("${DXVK_NATIVE_INCLUDE_DIRS}")
ADD_CUSTOM_TARGET(dependencies ALL DEPENDS dxvk-native)
endif()
endif()

# Memory allocator option
Expand Down
2 changes: 2 additions & 0 deletions Externals/imgui-proj/imgui.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ set(KERNEL_SRC
"${IMGUI_DIR}/imgui_internal.h"
"${IMGUI_DIR}/backends/imgui_impl_opengl3.cpp"
"${IMGUI_DIR}/backends/imgui_impl_opengl3.h"
"${IMGUI_DIR}/backends/imgui_impl_dx9.cpp"
"${IMGUI_DIR}/backends/imgui_impl_dx9.h"
"${IMGUI_DIR}/imstb_rectpack.h"
"${IMGUI_DIR}/imstb_textedit.h"
"${IMGUI_DIR}/imstb_truetype.h"
Expand Down
17 changes: 17 additions & 0 deletions src/Common/PlatformLinux.inl
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,8 @@
#define __declspec(x)
#define CALLBACK
#define TEXT(x) strdup(x)
#define LOWORD(l) ((uint16_t) (l))
#define HIWORD(l) ((uint16_t) (((uint32_t) (l) >> 16) & 0xffff))

/*
inline char* _strlwr_l(char* str, locale_t loc)
Expand Down Expand Up @@ -161,7 +163,9 @@ typedef char* LPTSTR;
typedef const char* LPCSTR;
typedef const char* LPCTSTR;
typedef unsigned int UINT;
#ifndef USE_DX9
typedef long long int LARGE_INTEGER;
#endif
typedef unsigned long long int ULARGE_INTEGER;

typedef wchar_t WCHAR;
Expand Down Expand Up @@ -219,11 +223,14 @@ typedef void* PVOID;
typedef void* LPVOID;
typedef UINT_PTR WPARAM;
typedef LONG_PTR LPARAM;
#ifndef USE_DX9
typedef long HRESULT;
#endif
typedef long LRESULT;
typedef void* HWND;
typedef void* HDC;

#ifndef USE_DX9
typedef struct _RECT {
long left;
long top;
Expand All @@ -235,6 +242,7 @@ typedef struct tagPOINT {
long x;
long y;
} POINT, *PPOINT, *LPPOINT;
#endif

#define DWORD_PTR UINT_PTR
#define WM_USER 0x0400
Expand Down Expand Up @@ -474,6 +482,7 @@ inline int _mkdir(const char *dir) { return mkdir(dir, S_IRWXU); }
((DWORD)(uint8_t)(ch2) << 16) | ((DWORD)(uint8_t)(ch3) << 24 ))
#endif

#ifndef USE_DX9
typedef enum _D3DFORMAT {
D3DFMT_UNKNOWN = 0,

Expand Down Expand Up @@ -1014,6 +1023,14 @@ typedef enum _D3DTEXTURETRANSFORMFLAGS {

D3DTTFF_FORCE_DWORD = 0x7fffffff
} D3DTEXTURETRANSFORMFLAGS;
#endif // USE_DX9

typedef struct _D3DXMACRO
{
LPCSTR Name;
LPCSTR Definition;

} D3DXMACRO, *LPD3DXMACRO;

#define D3DTS_WORLD D3DTS_WORLDMATRIX(0)
#define D3DTS_WORLD1 D3DTS_WORLDMATRIX(1)
Expand Down
2 changes: 1 addition & 1 deletion src/Layers/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
add_subdirectory(xrAPI)
#add_subdirectory(xrRenderPC_R1)
add_subdirectory(xrRenderPC_R1)
#add_subdirectory(xrRenderPC_R2)
#add_subdirectory(xrRenderPC_R3)
#add_subdirectory(xrRenderPC_R4)
Expand Down
2 changes: 1 addition & 1 deletion src/Layers/xrRender/Debug/dxPixEventWrapper.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
# define PIX_EVENT(Name) do { } while (false)
#else
#if defined(USE_DX9) || defined(USE_DX11)
# define PIX_EVENT(Name) dxPixEventWrapper pixEvent##Name(L#Name)
# define PIX_EVENT(Name) dxPixEventWrapper pixEvent##Name(L""#Name"")

class dxPixEventWrapper
{
Expand Down
2 changes: 1 addition & 1 deletion src/Layers/xrRender/DetailModel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ void CDetail::Load(IReader* S)
}

#if !defined(_EDITOR) && (defined(USE_DX9) || defined(USE_DX11))
#include "xrstripify.h"
#include "xrStripify.h"

void CDetail::Optimize()
{
Expand Down
4 changes: 3 additions & 1 deletion src/Layers/xrRender/R_Backend_Runtime.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
#include "Layers/xrRenderDX11/StateManager/dx11ShaderResourceStateCache.h"
#endif

#if defined(USE_DX9) || defined(USE_DX11)
#if defined(XR_PLATFORM_WINDOWS) && (defined(USE_DX9) || defined(USE_DX11))
#include <DirectXMath.h>
#endif

Expand Down Expand Up @@ -162,6 +162,7 @@ void CBackend::set_ClipPlanes(u32 _enable, Fplane* _planes /*=NULL */, u32 count
if (count > HW.Caps.geometry.dwClipPlanes)
count = HW.Caps.geometry.dwClipPlanes;

#if defined(XR_PLATFORM_WINDOWS) // FIX_LINUX XMMATRIX
using namespace DirectX;

const XMMATRIX transform = XMLoadFloat4x4(reinterpret_cast<XMFLOAT4X4*>(&Device.mFullTransform));
Expand All @@ -176,6 +177,7 @@ void CBackend::set_ClipPlanes(u32 _enable, Fplane* _planes /*=NULL */, u32 count
XMStoreFloat4(&planeClip, XMPlaneTransform(planeWorld, worldToClipMatrixIT));
CHK_DX(HW.pDevice->SetClipPlane(it, reinterpret_cast<float*>(&planeClip)));
}
#endif

// Enable them
u32 e_mask = (1 << count) - 1;
Expand Down
6 changes: 6 additions & 0 deletions src/Layers/xrRender/SH_Texture.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@

#include "ResourceManager.h"

#if defined(XR_PLATFORM_WINDOWS)
#include "xrEngine/tntQAVI.h"
#endif
#include "xrEngine/xrTheora_Surface.h"

#define PRIORITY_HIGH 12
Expand Down Expand Up @@ -106,6 +108,7 @@ void CTexture::apply_theora(u32 dwStage)
};
void CTexture::apply_avi(u32 dwStage) const
{
#if defined(XR_PLATFORM_WINDOWS)
if (pAVI->NeedUpdate())
{
R_ASSERT(D3DRTYPE_TEXTURE == pSurface->GetType());
Expand All @@ -123,6 +126,7 @@ void CTexture::apply_avi(u32 dwStage) const

R_CHK(T2D->UnlockRect(0));
}
#endif
CHK_DX(HW.pDevice->SetTexture(dwStage, pSurface));
};
void CTexture::apply_seq(u32 dwStage)
Expand Down Expand Up @@ -216,6 +220,7 @@ void CTexture::Load()
}
else if (FS.exist(fn, "$game_textures$", *cName, ".avi"))
{
#if defined(XR_PLATFORM_WINDOWS)
// AVI
pAVI = xr_new<CAviPlayerCustom>();

Expand All @@ -241,6 +246,7 @@ void CTexture::Load()
pSurface = nullptr;
}
}
#endif
}
else if (FS.exist(fn, "$game_textures$", *cName, ".seq"))
{
Expand Down
4 changes: 4 additions & 0 deletions src/Layers/xrRender/ShaderResourceTraits.h
Original file line number Diff line number Diff line change
Expand Up @@ -694,6 +694,7 @@ T* CResourceManager::CreateShader(cpcstr name, pcstr filename /*= nullptr*/, u32
pcstr c_target, c_entry;
ShaderTypeTraits<T>::GetCompilationTarget(c_target, c_entry, data);

#if defined(XR_PLATFORM_WINDOWS) // FIX_LINUX shader_compile
#if defined(USE_DX9)
# ifdef NDEBUG
flags |= D3DXSHADER_PACKMATRIX_ROWMAJOR;
Expand All @@ -710,6 +711,9 @@ T* CResourceManager::CreateShader(cpcstr name, pcstr filename /*= nullptr*/, u32

// Compile
HRESULT const _hr = GEnv.Render->shader_compile(name, file, c_entry, c_target, flags, (void*&)sh);
#else
HRESULT const _hr = E_FAIL;
#endif

FS.r_close(file);

Expand Down
16 changes: 16 additions & 0 deletions src/Layers/xrRender/Texture.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,9 @@ void TW_Save(ID3DTexture2D* T, LPCSTR name, LPCSTR prefix, LPCSTR postfix)
string256 fn2;
strconcat(sizeof(fn2), fn2, "debug" DELIMITER, fn, ".dds");
Log("* debug texture save: ", fn2);
#if defined(XR_PLATFORM_WINDOWS) // FIX_LINUX textures
R_CHK(D3DXSaveTextureToFile(fn2, D3DXIFF_DDS, T, nullptr));
#endif
}

ID3DTexture2D* TW_LoadTextureFromTexture(
Expand All @@ -137,11 +139,13 @@ ID3DTexture2D* TW_LoadTextureFromTexture(
Reduce(top_width, top_height, levels_exist, levels_2_skip);

// Create HW-surface
#if defined(XR_PLATFORM_WINDOWS) // FIX_LINUX textures
if (D3DX_DEFAULT == t_dest_fmt)
t_dest_fmt = t_from_desc0.Format;
R_CHK(D3DXCreateTexture(HW.pDevice, top_width, top_height, levels_exist, 0, t_dest_fmt,
(RImplementation.o.no_ram_textures ? D3DPOOL_DEFAULT : D3DPOOL_MANAGED),
&t_dest));
#endif

// Copy surfaces & destroy temporary
ID3DTexture2D* T_src = t_from;
Expand All @@ -157,7 +161,9 @@ ID3DTexture2D* TW_LoadTextureFromTexture(
R_CHK(T_dst->GetSurfaceLevel(L_dst, &S_dst));

// Copy
#if defined(XR_PLATFORM_WINDOWS) // FIX_LINUX textures
R_CHK(D3DXLoadSurfaceFromSurface(S_dst, NULL, NULL, S_src, NULL, NULL, D3DX_FILTER_NONE, 0));
#endif

// Release surfaces
_RELEASE(S_src);
Expand Down Expand Up @@ -322,6 +328,7 @@ ID3DBaseTexture* CRender::texture_load(LPCSTR fRName, u32& ret_msize)
_DDS:
{
// Load and get header
#if defined(XR_PLATFORM_WINDOWS) // FIX_LINUX textures
D3DXIMAGE_INFO IMG;
S = FS.r_open(fn);
#ifdef DEBUG
Expand Down Expand Up @@ -403,6 +410,9 @@ ID3DBaseTexture* CRender::texture_load(LPCSTR fRName, u32& ret_msize)
ret_msize = calc_texture_size(img_loaded_lod, mip_cnt, img_size);
return pTexture2D;
}
#else
_DDS_2D:{}
#endif
}
/*
_BUMP:
Expand Down Expand Up @@ -506,23 +516,29 @@ ID3DBaseTexture* CRender::texture_load(LPCSTR fRName, u32& ret_msize)
R_ASSERT2(FS.exist(fn, "$game_textures$", fname, ".dds"), fname);

// Load SYS-MEM-surface, bound to device restrictions
#if defined(XR_PLATFORM_WINDOWS) // FIX_LINUX textures
D3DXIMAGE_INFO IMG;
#endif
S = FS.r_open(fn);
img_size = S->length();
ID3DTexture2D* T_base;
#if defined(XR_PLATFORM_WINDOWS) // FIX_LINUX textures
R_CHK2(D3DXCreateTextureFromFileInMemoryEx(HW.pDevice, S->pointer(), S->length(), D3DX_DEFAULT, D3DX_DEFAULT,
D3DX_DEFAULT, 0, D3DFMT_A8R8G8B8, D3DPOOL_SYSTEMMEM, D3DX_DEFAULT, D3DX_DEFAULT, 0, &IMG, nullptr, &T_base), fn);
#endif
FS.r_close(S);

// Create HW-surface
ID3DTexture2D* T_normal_1 = nullptr;
#if defined(XR_PLATFORM_WINDOWS) // FIX_LINUX textures
R_CHK(D3DXCreateTexture(
HW.pDevice, IMG.Width, IMG.Height, D3DX_DEFAULT, 0, D3DFMT_A8R8G8B8, D3DPOOL_SYSTEMMEM, &T_normal_1));
R_CHK(D3DXComputeNormalMap(
T_normal_1, T_base, nullptr, D3DX_NORMALMAP_COMPUTE_OCCLUSION, D3DX_CHANNEL_LUMINANCE, _BUMPHEIGH));

// Transfer gloss-map
TW_Iterate_1OP(T_normal_1, T_base, it_gloss_rev_base);
#endif

// Compress
fmt = D3DFMT_DXT5;
Expand Down
2 changes: 1 addition & 1 deletion src/Layers/xrRender/blenders/Blender_LaEmB.cpp
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#include "stdafx.h"
#pragma hdrstop

#include "blender_LaEmB.h"
#include "Blender_LaEmB.h"

/*
* TODO: Seems there is no use for this blender even in R1.
Expand Down
2 changes: 2 additions & 0 deletions src/Layers/xrRender/r__screenshot.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ IC void MouseRayFromPoint(Fvector& direction, int x, int y, Fmatrix& m_CamMat)
#if defined(USE_DX9)
void CRender::ScreenshotImpl(ScreenshotMode mode, LPCSTR name, CMemoryWriter* memory_writer)
{
#if defined(XR_PLATFORM_WINDOWS) // FIX_LINUX Screenshot
if (!Device.b_is_Ready)
return;
// Create temp-surface
Expand Down Expand Up @@ -246,6 +247,7 @@ void CRender::ScreenshotImpl(ScreenshotMode mode, LPCSTR name, CMemoryWriter* me

_end_:
_RELEASE(pFB);
#endif
}
#elif defined(USE_DX11)
void CRender::ScreenshotImpl(ScreenshotMode mode, LPCSTR name, CMemoryWriter* memory_writer)
Expand Down
2 changes: 2 additions & 0 deletions src/Layers/xrRender/r_constants.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ ref_constant R_constant_table::get(const shared_str& S, u16 type /*= u16(-1)*/)
#ifdef USE_DX9
BOOL R_constant_table::parse(void* _desc, u32 destination)
{
#if defined(XR_PLATFORM_WINDOWS) // FIX_LINUX shader_compile
D3DXSHADER_CONSTANTTABLE* desc = (D3DXSHADER_CONSTANTTABLE*)_desc;
D3DXSHADER_CONSTANTINFO* it = (D3DXSHADER_CONSTANTINFO*)((u8*)(desc) + desc->ConstantInfo);
u8* ptr = (u8*)(desc);
Expand Down Expand Up @@ -190,6 +191,7 @@ BOOL R_constant_table::parse(void* _desc, u32 destination)
}
}
std::sort(table.begin(), table.end(), p_sort);
#endif
return TRUE;
}
#endif // USE_DX9
Expand Down
Loading