Commit Graph

52 Commits

Author SHA1 Message Date
Hajime Hoshi
c1e83432c0 internal/graphicsdriver/directx: refactoring: split api_windows.go 2023-03-25 12:07:04 +09:00
Hajime Hoshi
fda0b1cbcb internal/graphicsdriver/directx: reuse a compiled vertex shader if possible
D3DCompile can be a very slow function, and let's skip this if possible.
2022-12-24 17:44:54 +09:00
Hajime Hoshi
de8184ac10 internal/graphicsdriver/directx: implement suspend/resume for Xbox 2022-12-23 17:28:03 +09:00
Hajime Hoshi
67430362cc internal/graphicsdriver/directx: add EBITENGINE_DIRECTX_FEATURE_LEVEL
A fix for #2447 was a breaking-change as the DirectX driver was no longer
available for some old graphics card.

To support such old cards, provide a new environment variable
EBITENGINE_DIRECTX_FEATURE_LEVEL to specify a feature level.
The possible values are 11_0, 11_1, 12_0, 12_1, and 12_2. The default
value is 12_0.

Closes #2466
2022-11-21 02:46:07 +09:00
Hajime Hoshi
2deceaa0af internal/graphicsdriver/directx: specify DX level 12
The DirectX initialization passed but crashed later on some old machines
supporting the feature level 11 but not 12.

This change fixes the issue by changing the required feature level from
11 to 12 so that the initialization fails and OpenGL is used as the
fallback.

Closes #2447
2022-11-12 12:25:24 +09:00
Hajime Hoshi
303965e1a9 all: remove unnecessary copying
Copying []byte to string should copy the data if necessary, as the
Go specification assures that strings are immutable.
2022-11-11 00:28:47 +09:00
Hajime Hoshi
915fff96f8 all: reduce reflect usages 2022-11-09 13:24:31 +09:00
Hajime Hoshi
262ff351f4 internal/graphicsdriver/directx: bug fix: ScheduleFrameEventX might not return S_OK on Xbox One 2022-11-05 15:09:38 +09:00
Hajime Hoshi
a6e121613f internal/graphicsdriver/directx: bug fix: wrong SDK version for Xbox One 2022-11-05 02:31:28 +09:00
Hajime Hoshi
8a7d860632 all: unify Windows error handlings for Windows HANDLE
Updates #2366
2022-10-02 02:22:06 +09:00
Hajime Hoshi
a9ba0db3d1 internal/glfwwin, internal/graphicsdriver/directx: bug fix: wrong error handlings for Windows HANDLE
Closes #2366
2022-10-02 01:57:24 +09:00
Hajime Hoshi
cfdf59ef8d internal/graphicsdriver/directx: revert changes to remove GetCopyableFootprints
This reverts these commits
* ccddd4ee20
* 8e40c2ce7e
* 2eb1efe3cc

Without GetCopyableFootprints, the test results on 32bit Windows seemed
much more flaky. This didn't fix the memory issue like #2294 anyway.
2022-09-19 00:26:59 +09:00
Hajime Hoshi
2eb1efe3cc internal/graphicsdriver/directx: stop using GetCopyableFootprints
GetCopyableFootprints seems very conservative and returns a quite
big memory size. Instead of using the info from GetCopyableFootprints
let's use our own minimum footprint.
2022-09-18 23:10:15 +09:00
Hajime Hoshi
fccb43e15b internal/graphicsdriver/directx: remove .errcheck_excludes_windows
These DirectX functions don't return any value and should not affect
the last error. Then it should be fine to ignore the returning values
from syscall.Syscall*.

Updates #2287
2022-09-10 03:03:18 +09:00
Hajime Hoshi
313c70f4b4 internal/graphicsdriver/directx: support 32bit Windows
Closes #2088
2022-08-28 00:04:55 +09:00
Hajime Hoshi
bb2df24f83 internal/graphicsdriver/directx: use DXGI_PRESENT_TEST when the screen is invisible
This change also reduces FPS to about 10 when the screen is invisible
in order to save CPU power.

Closes #2181
2022-08-17 00:10:44 +09:00
Hajime Hoshi
f8acd5e7ee internal/graphicsdriver/directx: bug fix: D3D12CreateDevice could be called without creating a device 2022-07-19 03:22:46 +09:00
Hajime Hoshi
0f9ec45709 internal/graphicsdriver/directx: refactoring 2022-07-18 23:36:42 +09:00
Hajime Hoshi
bf0f3d304b internal/graphicsdriver/directx: add optimization flag to D3DCompile
Updates #2034
Updates #2188
2022-07-10 02:55:16 +09:00
Hajime Hoshi
0035ba0bd1 internal/graphicsdriver/directx: allow tearing when vsync is off
Updates #2034
Updates #2188
2022-07-10 01:17:36 +09:00
Hajime Hoshi
47c65a92ae internal/graphicsdriver/directx: bug fix: ignore DXGI_STATUS_OCCLUDED
When a screen is locked, an Ebitengine application crashed as the
swap chain's Present returned DXGI_STATUS_OCCLUDED.

Let's ignore the error and continue to run the applications. In the
ideal world, an application should stop running during the screen lock,
so let's revisit this later.

This fix also fixes the issue that a Win32API GetCursorPos returned
an error ERROR_ACCESS_DENIED when the screen was locked.

Closes #2179
2022-07-04 12:55:36 +09:00
Hajime Hoshi
c93cecdc2b internal/graphicsdriver/directx: accept S_FALSE at ScheduleFrameEventX 2022-06-22 02:13:32 +09:00
Hajime Hoshi
7b05e59000 internal/graphicsdriver/directx: bug fix: wrong GUID for IDXGIDevice 2022-06-22 01:59:22 +09:00
Hajime Hoshi
8311ff1e46 internal/graphicsdriver/directx: bug fix: wrong pointer usage 2022-06-22 01:49:23 +09:00
Hajime Hoshi
7e92b79a00 internal/graphicsdriver/directx: implement swap chains for Xbox
Updates #2084
2022-06-21 12:21:00 +09:00
Hajime Hoshi
f7a108e693 internal/graphicsdriver/directx: refactoring 2022-06-18 21:53:41 +09:00
Hajime Hoshi
76d88b276a internal/graphicsdriver/directx: call C++ side for ID3D12GraphicsCommandList functions
Updates #2084
2022-06-13 22:35:58 +09:00
Hajime Hoshi
4aebcd2a04 internal/graphicsdriver/directx: bug fix: consider empty slices as arguments 2022-06-13 17:51:02 +09:00
Hajime Hoshi
c08d79d2ce internal/graphicsdriver/directx: keep runtime.KeepAlive for Xbox 2022-06-13 17:36:58 +09:00
Hajime Hoshi
4adf46c2b0 internal/graphicsdriver/directx: refactoring 2022-06-13 17:25:27 +09:00
Hajime Hoshi
348435f769 internal/graphicsdriver/directx: fix a constant value for Xbox
Updates #2084
2022-06-13 14:23:29 +09:00
Hajime Hoshi
aef5402831 internal/graphicsdriver/directx: remove unused function 2022-06-13 01:35:31 +09:00
Hajime Hoshi
bcb2fe8c93 internal/graphicsdriver/directx: enable D3D12SerializeRootSignature for Xbox
Updates #2084
2022-06-13 01:02:48 +09:00
Hajime Hoshi
08b52698c6 internal/graphicsdriver/directx: call C++ side for some functions for Xbox
Updates #2084
2022-06-11 19:37:17 +09:00
Hajime Hoshi
826afcb9cc internal/graphicsdriver/directx: fix CopyTextureRegion for Xbox
Updates #2084
2022-06-10 22:51:04 +09:00
Hajime Hoshi
07aa906753 internal/graphicsdriver/directx: fix GetCPU/GPUDescriptorHandleForHeapStart for Xbox
Updates #2084
2022-06-10 21:35:20 +09:00
Hajime Hoshi
b9373c498b internal/graphicsdriver/directx: fix CreateCommandList for Xbox
Updates #2084
2022-06-10 16:44:07 +09:00
Hajime Hoshi
0256b0cfbf internal/graphicsdriver/directx: bug fix: disable fullscreen by Alt+Enter
By default, DirectX 12 tries to make the window fullscreen by Alt+Enter.
This caused application crashes. Let's disable this feature.

Closes #2123
2022-06-05 16:16:09 +09:00
Hajime Hoshi
d518e64e22 Revert "internal/graphicsdriver/directx: refactoring: add syscallN"
This reverts commit 55a490736a.

Reason: This has a potential risk of stack overflow.

Closes #2120
2022-06-04 13:58:01 +09:00
Hajime Hoshi
f69c550992 internal/graphicsdriver/directx: bug fix: go:nosplit was required for syscallN
Updates #2116
Closes #2117
2022-06-04 01:11:22 +09:00
Hajime Hoshi
55a490736a internal/graphicsdriver/directx: refactoring: add syscallN
syscall.SyscallN is available as of Go 1.18 so this change implemented
our original syscallN function.

syscallN also panics when a given function pointer is 0. This helps
debugging especially on Xbox.

Updates #2084
2022-06-03 21:56:34 +09:00
Hajime Hoshi
3e1b313221 internal/graphicsdriver/directx: bug fix: ID3D12Resource::Map sometimes retrying
Updates #2113
Closes #2116
2022-06-03 21:56:30 +09:00
Hajime Hoshi
c29c423686 internal/glfwwin, internal/graphicsdriver/directx: bug fix: HRESULT and Errno are imcompatible 2022-06-03 00:41:04 +09:00
Hajime Hoshi
4a9caf8afb internal/graphicsdriver/directx: ignore higher 32bit values for Errno
Updates #2113
2022-06-02 23:01:38 +09:00
Hajime Hoshi
fb03a1e351 internal/graphicsdriver/directx: bug fix: ID3D12Resource::Unmap does not return an value
Updates #2113
2022-06-02 12:52:58 +09:00
Hajime Hoshi
4a684c4195 treat Windows error values as uint32 instead of windows.Handle
The error value are defined as windows.Handle (64bit) in
golang.org/x/sys/windows, but an actual type should be HRESULT (32bit).
This causes an issue that a returning value from a Windows API was
recognized as a non-zero error value though the value was not an error,
when the value's lower 32-bits are all zero.

See also https://github.com/golang/go/issues/48736#issuecomment-1143993096

Updates #2113
2022-06-02 12:10:21 +09:00
Hajime Hoshi
0dc6e4e64e internal/graphicsdriver/directx: use ID3D12Resource instead of ID3D12Resource1
Updates #2114
2022-06-02 01:26:02 +09:00
Hajime Hoshi
c99b948df3 internal/graphicsdriver/directx: refactoring
Updates #2084
2022-05-30 03:17:15 +09:00
Hajime Hoshi
d4226659ee internal/graphicsdriver/directx: initialize a device for Xbox
Updates #1162
2022-05-30 02:10:18 +09:00
Hajime Hoshi
b4491ab94d internal/graphicsdriver/directx: unify the naming convention with glfwwin 2022-05-29 21:18:23 +09:00