mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-02-20 01:54:16 +01:00
[d3d10] Add build files and implement D3D10CreateDevice functions
This commit is contained in:
parent
262797f9d5
commit
8c1063b512
17
lib/libd3dcompiler_43.def
Normal file
17
lib/libd3dcompiler_43.def
Normal file
@ -0,0 +1,17 @@
|
||||
; File generated automatically from d3dcompiler_43.spec; do not edit!
|
||||
|
||||
LIBRARY d3dcompiler_43.dll
|
||||
|
||||
EXPORTS
|
||||
D3DAssemble @1
|
||||
D3DCompile @3
|
||||
D3DCreateBlob @5
|
||||
D3DDisassemble @8
|
||||
D3DGetBlobPart @9
|
||||
D3DGetDebugInfo @10
|
||||
D3DGetInputAndOutputSignatureBlob @11
|
||||
D3DGetInputSignatureBlob @12
|
||||
D3DGetOutputSignatureBlob @13
|
||||
D3DPreprocess @14
|
||||
D3DReflect @15
|
||||
D3DStripShader @17
|
17
lib32/libd3dcompiler_43.def
Normal file
17
lib32/libd3dcompiler_43.def
Normal file
@ -0,0 +1,17 @@
|
||||
; File generated automatically from d3dcompiler_43.spec; do not edit!
|
||||
|
||||
LIBRARY d3dcompiler_43.dll
|
||||
|
||||
EXPORTS
|
||||
D3DAssemble@32 @1
|
||||
D3DCompile@44 @3
|
||||
D3DCreateBlob@8 @5
|
||||
D3DDisassemble@20 @8
|
||||
D3DGetBlobPart@20 @9
|
||||
D3DGetDebugInfo@12 @10
|
||||
D3DGetInputAndOutputSignatureBlob@12 @11
|
||||
D3DGetInputSignatureBlob@12 @12
|
||||
D3DGetOutputSignatureBlob@12 @13
|
||||
D3DPreprocess@28 @14
|
||||
D3DReflect@16 @15
|
||||
D3DStripShader@16 @17
|
@ -29,6 +29,7 @@ if meson.get_cross_property('winelib', false)
|
||||
lib_vulkan = declare_dependency(link_args: [ '-lvulkan-1' ])
|
||||
lib_d3d11 = declare_dependency(link_args: [ '-ld3d11' ])
|
||||
lib_dxgi = declare_dependency(link_args: [ '-ldxgi' ])
|
||||
lib_d3dcompiler_43 = declare_dependency(link_args: [ '-L'+dxvk_library_path, '-ld3dcompiler_43' ])
|
||||
lib_d3dcompiler_47 = declare_dependency(link_args: [ '-ld3dcompiler_47' ])
|
||||
exe_ext = '.exe.so'
|
||||
dll_ext = '.dll'
|
||||
@ -38,6 +39,7 @@ else
|
||||
lib_d3d11 = dxvk_compiler.find_library('d3d11')
|
||||
lib_dxgi = dxvk_compiler.find_library('dxgi')
|
||||
if dxvk_compiler.get_id() != 'msvc'
|
||||
lib_d3dcompiler_43 = dxvk_compiler.find_library('d3dcompiler_43')
|
||||
lib_d3dcompiler_47 = dxvk_compiler.find_library('d3dcompiler_47')
|
||||
endif
|
||||
exe_ext = ''
|
||||
|
4
src/d3d10/d3d10.def
Normal file
4
src/d3d10/d3d10.def
Normal file
@ -0,0 +1,4 @@
|
||||
LIBRARY D3D10.DLL
|
||||
EXPORTS
|
||||
D3D10CreateDevice
|
||||
D3D10CreateDeviceAndSwapChain
|
21
src/d3d10/d3d10.spec
Normal file
21
src/d3d10/d3d10.spec
Normal file
@ -0,0 +1,21 @@
|
||||
@ stdcall D3D10CreateDevice(ptr long ptr long long ptr)
|
||||
@ stdcall D3D10CreateDeviceAndSwapChain(ptr long ptr long long ptr ptr ptr)
|
||||
|
||||
@ stdcall D3D10GetVertexShaderProfile(ptr)
|
||||
@ stdcall D3D10GetGeometryShaderProfile(ptr)
|
||||
@ stdcall D3D10GetPixelShaderProfile(ptr)
|
||||
|
||||
@ stdcall D3D10CreateBlob(long ptr)
|
||||
@ stdcall D3D10GetInputSignatureBlob(ptr long ptr)
|
||||
@ stdcall D3D10GetOutputSignatureBlob(ptr long ptr)
|
||||
|
||||
@ stdcall D3D10ReflectShader(ptr long ptr)
|
||||
@ stdcall D3D10CompileShader(ptr long str ptr ptr str str long ptr ptr)
|
||||
|
||||
@ stdcall D3D10CreateEffectFromMemory(ptr long long ptr ptr ptr)
|
||||
@ stdcall D3D10CreateEffectPoolFromMemory(ptr long long ptr ptr)
|
||||
@ stdcall D3D10CompileEffectFromMemory(ptr long ptr ptr ptr long long ptr ptr)
|
||||
|
||||
@ stub D3D10DisassembleEffect
|
||||
@ stdcall D3D10DisassembleShader(ptr long long ptr ptr)
|
||||
@ stub D3D10PreprocessShader
|
4
src/d3d10/d3d10_1.def
Normal file
4
src/d3d10/d3d10_1.def
Normal file
@ -0,0 +1,4 @@
|
||||
LIBRARY D3D10_1.DLL
|
||||
EXPORTS
|
||||
D3D10CreateDevice1
|
||||
D3D10CreateDeviceAndSwapChain1
|
21
src/d3d10/d3d10_1.spec
Normal file
21
src/d3d10/d3d10_1.spec
Normal file
@ -0,0 +1,21 @@
|
||||
@ stdcall D3D10CreateDevice1(ptr long ptr long long long ptr)
|
||||
@ stdcall D3D10CreateDeviceAndSwapChain1(ptr long ptr long long long ptr ptr ptr)
|
||||
|
||||
@ stdcall D3D10GetVertexShaderProfile(ptr)
|
||||
@ stdcall D3D10GetGeometryShaderProfile(ptr)
|
||||
@ stdcall D3D10GetPixelShaderProfile(ptr)
|
||||
|
||||
@ stdcall D3D10CreateBlob(long ptr)
|
||||
@ stdcall D3D10GetInputSignatureBlob(ptr long ptr)
|
||||
@ stdcall D3D10GetOutputSignatureBlob(ptr long ptr)
|
||||
|
||||
@ stdcall D3D10ReflectShader(ptr long ptr)
|
||||
@ stdcall D3D10CompileShader(ptr long str ptr ptr str str long ptr ptr)
|
||||
|
||||
@ stdcall D3D10CreateEffectFromMemory(ptr long long ptr ptr ptr)
|
||||
@ stdcall D3D10CreateEffectPoolFromMemory(ptr long long ptr ptr)
|
||||
@ stdcall D3D10CompileEffectFromMemory(ptr long ptr ptr ptr long long ptr ptr)
|
||||
|
||||
@ stub D3D10DisassembleEffect
|
||||
@ stdcall D3D10DisassembleShader(ptr long long ptr ptr)
|
||||
@ stub D3D10PreprocessShader
|
4
src/d3d10/d3d10_include.h
Normal file
4
src/d3d10/d3d10_include.h
Normal file
@ -0,0 +1,4 @@
|
||||
#pragma once
|
||||
|
||||
#include <d3d10_1.h>
|
||||
#include <d3d11_1.h>
|
216
src/d3d10/d3d10_main.cpp
Normal file
216
src/d3d10/d3d10_main.cpp
Normal file
@ -0,0 +1,216 @@
|
||||
#include "d3d10_include.h"
|
||||
|
||||
#include "../dxgi/dxgi_adapter.h"
|
||||
#include "../dxgi/dxgi_device.h"
|
||||
|
||||
namespace dxvk {
|
||||
Logger Logger::s_instance("d3d10.log");
|
||||
}
|
||||
|
||||
extern "C" {
|
||||
using namespace dxvk;
|
||||
|
||||
HRESULT __stdcall D3D11CoreCreateDevice(
|
||||
IDXGIFactory* pFactory,
|
||||
IDXGIAdapter* pAdapter,
|
||||
UINT Flags,
|
||||
const D3D_FEATURE_LEVEL* pFeatureLevels,
|
||||
UINT FeatureLevels,
|
||||
ID3D11Device** ppDevice);
|
||||
|
||||
|
||||
DLLEXPORT HRESULT __stdcall D3D10CoreCreateDevice(
|
||||
IDXGIFactory* pFactory,
|
||||
IDXGIAdapter* pAdapter,
|
||||
UINT Flags,
|
||||
D3D_FEATURE_LEVEL FeatureLevel,
|
||||
ID3D10Device** ppDevice) {
|
||||
Com<ID3D11Device> d3d11Device;
|
||||
|
||||
HRESULT hr = D3D11CoreCreateDevice(pFactory,
|
||||
pAdapter, Flags, &FeatureLevel, 1, &d3d11Device);
|
||||
|
||||
if (FAILED(hr))
|
||||
return hr;
|
||||
|
||||
if (FAILED(d3d11Device->QueryInterface(
|
||||
__uuidof(ID3D10Device), reinterpret_cast<void**>(ppDevice))))
|
||||
return E_FAIL;
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
||||
DLLEXPORT HRESULT D3D10CreateDevice1(
|
||||
IDXGIAdapter* pAdapter,
|
||||
D3D10_DRIVER_TYPE DriverType,
|
||||
HMODULE Software,
|
||||
UINT Flags,
|
||||
D3D10_FEATURE_LEVEL1 HardwareLevel,
|
||||
UINT SDKVersion,
|
||||
ID3D10Device1** ppDevice) {
|
||||
InitReturnPtr(ppDevice);
|
||||
|
||||
// Get DXGI factory and adapter. This is mostly
|
||||
// copied from the equivalent D3D11 functions.
|
||||
Com<IDXGIFactory> dxgiFactory = nullptr;
|
||||
Com<IDXGIAdapter> dxgiAdapter = pAdapter;
|
||||
|
||||
if (dxgiAdapter == nullptr) {
|
||||
if (DriverType != D3D10_DRIVER_TYPE_HARDWARE)
|
||||
Logger::warn("D3D10CreateDevice: Unsupported driver type");
|
||||
|
||||
if (FAILED(CreateDXGIFactory(__uuidof(IDXGIFactory), reinterpret_cast<void**>(&dxgiFactory)))) {
|
||||
Logger::err("D3D10CreateDevice: Failed to create a DXGI factory");
|
||||
return E_FAIL;
|
||||
}
|
||||
|
||||
if (FAILED(dxgiFactory->EnumAdapters(0, &dxgiAdapter))) {
|
||||
Logger::err("D3D10CreateDevice: No default adapter available");
|
||||
return E_FAIL;
|
||||
}
|
||||
|
||||
} else {
|
||||
if (FAILED(dxgiAdapter->GetParent(__uuidof(IDXGIFactory), reinterpret_cast<void**>(&dxgiFactory)))) {
|
||||
Logger::err("D3D10CreateDevice: Failed to query DXGI factory from DXGI adapter");
|
||||
return E_FAIL;
|
||||
}
|
||||
|
||||
if (DriverType != D3D10_DRIVER_TYPE_HARDWARE || Software != nullptr)
|
||||
return E_INVALIDARG;
|
||||
}
|
||||
|
||||
// Create the actual device
|
||||
Com<ID3D10Device> device;
|
||||
|
||||
HRESULT hr = D3D10CoreCreateDevice(
|
||||
dxgiFactory.ptr(), dxgiAdapter.ptr(),
|
||||
Flags, D3D_FEATURE_LEVEL(HardwareLevel),
|
||||
&device);
|
||||
|
||||
if (FAILED(hr))
|
||||
return hr;
|
||||
|
||||
hr = device->QueryInterface(
|
||||
__uuidof(ID3D10Device1),
|
||||
reinterpret_cast<void**>(ppDevice));
|
||||
|
||||
if (FAILED(hr))
|
||||
return E_FAIL;
|
||||
|
||||
return hr;
|
||||
}
|
||||
|
||||
|
||||
DLLEXPORT HRESULT D3D10CreateDevice(
|
||||
IDXGIAdapter* pAdapter,
|
||||
D3D10_DRIVER_TYPE DriverType,
|
||||
HMODULE Software,
|
||||
UINT Flags,
|
||||
UINT SDKVersion,
|
||||
ID3D10Device** ppDevice) {
|
||||
InitReturnPtr(ppDevice);
|
||||
|
||||
Com<ID3D10Device1> d3d10Device = nullptr;
|
||||
HRESULT hr = D3D10CreateDevice1(pAdapter,
|
||||
DriverType, Software, Flags,
|
||||
D3D10_FEATURE_LEVEL_10_0,
|
||||
SDKVersion, &d3d10Device);
|
||||
|
||||
if (FAILED(hr))
|
||||
return hr;
|
||||
|
||||
if (ppDevice != nullptr) {
|
||||
*ppDevice = d3d10Device.ref();
|
||||
return S_OK;
|
||||
} return S_FALSE;
|
||||
}
|
||||
|
||||
|
||||
DLLEXPORT HRESULT D3D10CreateDeviceAndSwapChain1(
|
||||
IDXGIAdapter* pAdapter,
|
||||
D3D10_DRIVER_TYPE DriverType,
|
||||
HMODULE Software,
|
||||
UINT Flags,
|
||||
D3D10_FEATURE_LEVEL1 HardwareLevel,
|
||||
UINT SDKVersion,
|
||||
DXGI_SWAP_CHAIN_DESC* pSwapChainDesc,
|
||||
IDXGISwapChain** ppSwapChain,
|
||||
ID3D10Device1** ppDevice) {
|
||||
InitReturnPtr(ppDevice);
|
||||
InitReturnPtr(ppSwapChain);
|
||||
|
||||
// Try to create the device as usual
|
||||
Com<ID3D10Device1> d3d10Device = nullptr;
|
||||
HRESULT hr = D3D10CreateDevice1(pAdapter,
|
||||
DriverType, Software, Flags, HardwareLevel,
|
||||
SDKVersion, &d3d10Device);
|
||||
|
||||
if (FAILED(hr))
|
||||
return hr;
|
||||
|
||||
// Create the swap chain if requested
|
||||
if (pSwapChainDesc == nullptr)
|
||||
return E_INVALIDARG;
|
||||
|
||||
Com<IDXGIDevice> dxgiDevice = nullptr;
|
||||
Com<IDXGIAdapter> dxgiAdapter = nullptr;
|
||||
Com<IDXGIFactory> dxgiFactory = nullptr;
|
||||
|
||||
if (FAILED(d3d10Device->QueryInterface(__uuidof(IDXGIDevice), reinterpret_cast<void**>(&dxgiDevice)))) {
|
||||
Logger::err("D3D11CreateDeviceAndSwapChain: Failed to query DXGI device");
|
||||
return E_FAIL;
|
||||
}
|
||||
|
||||
if (FAILED(dxgiDevice->GetParent(__uuidof(IDXGIAdapter), reinterpret_cast<void**>(&dxgiAdapter)))) {
|
||||
Logger::err("D3D11CreateDeviceAndSwapChain: Failed to query DXGI adapter");
|
||||
return E_FAIL;
|
||||
}
|
||||
|
||||
if (FAILED(dxgiAdapter->GetParent(__uuidof(IDXGIFactory), reinterpret_cast<void**>(&dxgiFactory)))) {
|
||||
Logger::err("D3D11CreateDeviceAndSwapChain: Failed to query DXGI factory");
|
||||
return E_FAIL;
|
||||
}
|
||||
|
||||
if (FAILED(dxgiFactory->CreateSwapChain(d3d10Device.ptr(), pSwapChainDesc, ppSwapChain))) {
|
||||
Logger::err("D3D11CreateDeviceAndSwapChain: Failed to create swap chain");
|
||||
return E_FAIL;
|
||||
}
|
||||
|
||||
// Write back device pointer
|
||||
if (ppDevice != nullptr) {
|
||||
*ppDevice = d3d10Device.ptr();
|
||||
return S_OK;
|
||||
} return S_FALSE;
|
||||
}
|
||||
|
||||
|
||||
DLLEXPORT HRESULT D3D10CreateDeviceAndSwapChain(
|
||||
IDXGIAdapter* pAdapter,
|
||||
D3D10_DRIVER_TYPE DriverType,
|
||||
HMODULE Software,
|
||||
UINT Flags,
|
||||
UINT SDKVersion,
|
||||
DXGI_SWAP_CHAIN_DESC* pSwapChainDesc,
|
||||
IDXGISwapChain** ppSwapChain,
|
||||
ID3D10Device** ppDevice) {
|
||||
InitReturnPtr(ppDevice);
|
||||
InitReturnPtr(ppSwapChain);
|
||||
|
||||
Com<ID3D10Device1> d3d10Device = nullptr;
|
||||
HRESULT hr = D3D10CreateDeviceAndSwapChain1(pAdapter,
|
||||
DriverType, Software, Flags, D3D10_FEATURE_LEVEL_10_0,
|
||||
SDKVersion, pSwapChainDesc, ppSwapChain, &d3d10Device);
|
||||
|
||||
if (FAILED(hr))
|
||||
return hr;
|
||||
|
||||
if (ppDevice != nullptr) {
|
||||
*ppDevice = d3d10Device.ref();
|
||||
return S_OK;
|
||||
} return S_FALSE;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
3
src/d3d10/d3d10core.def
Normal file
3
src/d3d10/d3d10core.def
Normal file
@ -0,0 +1,3 @@
|
||||
LIBRARY D3D10CORE.DLL
|
||||
EXPORTS
|
||||
D3D10CoreCreateDevice
|
1
src/d3d10/d3d10core.spec
Normal file
1
src/d3d10/d3d10core.spec
Normal file
@ -0,0 +1 @@
|
||||
@ stdcall D3D10CoreCreateDevice(ptr ptr long long ptr)
|
37
src/d3d10/meson.build
Normal file
37
src/d3d10/meson.build
Normal file
@ -0,0 +1,37 @@
|
||||
d3d10_main_src = [
|
||||
'd3d10_main.cpp'
|
||||
]
|
||||
|
||||
d3d10_core_dll = shared_library('d3d10core'+dll_ext, d3d10_main_src,
|
||||
name_prefix : '',
|
||||
link_with : [ util_lib ],
|
||||
dependencies : [ lib_d3dcompiler_43, lib_dxgi, d3d11_dep, dxbc_dep, dxvk_dep ],
|
||||
include_directories : dxvk_include_path,
|
||||
install : true,
|
||||
objects : not dxvk_msvc ? 'd3d10core'+def_spec_ext : [],
|
||||
vs_module_defs : 'd3d10core'+def_spec_ext,
|
||||
override_options : ['cpp_std='+dxvk_cpp_std])
|
||||
|
||||
d3d10_dll = shared_library('d3d10'+dll_ext, d3d10_main_src,
|
||||
name_prefix : '',
|
||||
link_with : [ util_lib ],
|
||||
dependencies : [ lib_d3dcompiler_43, lib_dxgi, d3d11_dep, dxbc_dep, dxvk_dep ],
|
||||
include_directories : dxvk_include_path,
|
||||
install : true,
|
||||
objects : not dxvk_msvc ? 'd3d10'+def_spec_ext : [],
|
||||
vs_module_defs : 'd3d10'+def_spec_ext,
|
||||
override_options : ['cpp_std='+dxvk_cpp_std])
|
||||
|
||||
d3d10_1_dll = shared_library('d3d10_1'+dll_ext, d3d10_main_src,
|
||||
name_prefix : '',
|
||||
link_with : [ util_lib ],
|
||||
dependencies : [ lib_d3dcompiler_43, lib_dxgi, d3d11_dep, dxbc_dep, dxvk_dep ],
|
||||
include_directories : dxvk_include_path,
|
||||
install : true,
|
||||
objects : not dxvk_msvc ? 'd3d10_1'+def_spec_ext : [],
|
||||
vs_module_defs : 'd3d10_1'+def_spec_ext,
|
||||
override_options : ['cpp_std='+dxvk_cpp_std])
|
||||
|
||||
d3d10_dep = declare_dependency(
|
||||
link_with : [ d3d10_dll, d3d10_1_dll, d3d10_core_dll ],
|
||||
include_directories : [ dxvk_include_path, include_directories('.') ])
|
@ -1,2 +1,3 @@
|
||||
@ stdcall D3D11CreateDevice(ptr long ptr long ptr long long ptr ptr ptr)
|
||||
@ stdcall D3D11CreateDeviceAndSwapChain(ptr long ptr long ptr long long ptr ptr ptr ptr ptr)
|
||||
@ stdcall D3D11CoreCreateDevice(ptr ptr long ptr long ptr)
|
||||
|
@ -4,3 +4,4 @@ subdir('dxvk')
|
||||
subdir('dxgi')
|
||||
subdir('dxbc')
|
||||
subdir('d3d11')
|
||||
subdir('d3d10')
|
||||
|
Loading…
x
Reference in New Issue
Block a user