質問編集履歴

5

文章を編集しました。

2020/05/17 07:29

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,34 @@
1
- 提示コードのID3D12Device* _dev = nullptr; , IDXGIFactory6* _dxgiFactory = nullptr;ですが二つの初期化がすべてnullptrになってしまいます。どうしてでしょうか?フューチャーレベルをfor文でループさせたりしましたが配列にこれ以上のレベルは存在しないようですデバッグログを表示させたりif文で分岐処理を作りましたがnullptrなのは確実見たいです。どうすればいいのでしょうか? /// コメント部の内部のif文です
1
+ 提示コードのID3D12Device* _dev = nullptr; ですが初期化がすべてnullptrになってしまいます。どうしてでしょうか?フューチャーレベルをfor文でループさせたりしましたが配列にこれ以上のレベルは存在しないようですデバッグログを表示させたりif文で分岐処理を作りましたがnullptrなのは確実見たいです。どうすればいいのでしょうか? /// コメント部の内部のif文です
2
+
3
+ elseブロックによるエラーコードのprintf出力結果
4
+
5
+
6
+
7
+ 0 887a0004
8
+
9
+
10
+
11
+ 1 80070057
12
+
13
+ 2 80070057
14
+
15
+ 3 80070057
16
+
17
+ 4 80070057
18
+
19
+ 5 80070057
20
+
21
+
22
+
23
+ 6 887a0004
24
+
25
+ 7 887a0004
26
+
27
+ 8 887a0004
28
+
29
+ 9 887a0004
30
+
31
+
2
32
 
3
33
 
4
34
 
@@ -16,24 +46,36 @@
16
46
 
17
47
  ![イメージ説明](8c606bdb71d95dd983350e79f5bdd66a.png)
18
48
 
49
+ ![イメージ説明](47df9824e5ff411e501a5d9fd967169b.png)
50
+
19
51
 
20
52
 
21
53
  ```ここに言語を入力
22
54
 
23
- #pragma comment(lib,"d3d12.lib")
24
-
25
- #pragma comment(lib,"dxgi.lib")
26
-
27
-
28
-
29
55
  #include <Windows.h>
30
56
 
57
+ #include <Winerror.h>
58
+
59
+
60
+
31
61
  #include <d3d12.h>
32
62
 
63
+
64
+
33
65
  #include <dxgi1_4.h>
34
66
 
67
+ #include <dxgi.h>
68
+
69
+
70
+
71
+ #include <dxgi1_5.h>
72
+
35
73
  #include <dxgi1_6.h>
36
74
 
75
+ #include <combaseapi.h>
76
+
77
+ #include <d3dcommon.h>
78
+
37
79
 
38
80
 
39
81
  #ifdef _DEBUG
@@ -58,13 +100,13 @@
58
100
 
59
101
  #ifdef _DEBUG
60
102
 
61
- va_list valist;
103
+ va_list valist;
62
-
104
+
63
- va_start(valist, format);
105
+ va_start(valist, format);
64
-
106
+
65
- vprintf(format, valist);
107
+ vprintf(format, valist);
66
-
108
+
67
- va_end(valist);
109
+ va_end(valist);
68
110
 
69
111
  #endif
70
112
 
@@ -72,27 +114,23 @@
72
114
 
73
115
 
74
116
 
75
-
76
-
77
-
78
-
79
117
  LRESULT WindowProcedure(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam)
80
118
 
81
119
  {
82
120
 
83
- if(msg == WM_DESTROY)
121
+ if(msg == WM_DESTROY)
84
-
122
+
85
- {
123
+ {
86
-
124
+
87
- PostQuitMessage(0);
125
+ PostQuitMessage(0);
88
-
126
+
89
- return 0;
127
+ return 0;
90
-
128
+
91
- }
129
+ }
92
-
93
-
94
-
130
+
131
+
132
+
95
- return DefWindowProc(hwnd,msg,wparam,lparam);
133
+ return DefWindowProc(hwnd,msg,wparam,lparam);
96
134
 
97
135
 
98
136
 
@@ -102,29 +140,45 @@
102
140
 
103
141
  /*feature level 配列*/
104
142
 
105
- D3D_FEATURE_LEVEL levels[] = {
143
+ D3D_FEATURE_LEVEL levels[] = {//10
144
+
145
+
146
+
106
-
147
+ D3D_FEATURE_LEVEL_1_0_CORE,
148
+
149
+
150
+
151
+
152
+
153
+ D3D_FEATURE_LEVEL_9_1,
154
+
155
+ D3D_FEATURE_LEVEL_9_2,
156
+
157
+ D3D_FEATURE_LEVEL_9_3,
158
+
159
+
160
+
161
+ D3D_FEATURE_LEVEL_10_0,
162
+
163
+ D3D_FEATURE_LEVEL_10_1,
164
+
165
+
166
+
167
+ D3D_FEATURE_LEVEL_11_0,
168
+
169
+ D3D_FEATURE_LEVEL_11_1,
170
+
171
+
172
+
107
- D3D_FEATURE_LEVEL_12_0,
173
+ D3D_FEATURE_LEVEL_12_0,
108
-
174
+
109
- D3D_FEATURE_LEVEL_12_1,
175
+ D3D_FEATURE_LEVEL_12_1
110
-
111
-
112
-
176
+
177
+
178
+
113
- D3D_FEATURE_LEVEL_11_1,
179
+ // D3D_FEATURE_LEVEL_12_1,
114
-
115
- D3D_FEATURE_LEVEL_11_0,
180
+
116
-
117
-
118
-
119
- D3D_FEATURE_LEVEL_10_1,
181
+
120
-
121
- D3D_FEATURE_LEVEL_10_0,
122
-
123
-
124
-
125
- D3D_FEATURE_LEVEL_9_1,
126
-
127
-
128
182
 
129
183
 
130
184
 
@@ -132,6 +186,14 @@
132
186
 
133
187
 
134
188
 
189
+ ID3D12Device* _dev = nullptr;
190
+
191
+
192
+
193
+ IDXGIFactory6* _dxgiFactory = nullptr;
194
+
195
+ IDXGISwapChain4* _swapchain = nullptr;
196
+
135
197
 
136
198
 
137
199
 
@@ -156,220 +218,296 @@
156
218
 
157
219
 
158
220
 
159
- ID3D12Device* _dev = nullptr;
160
-
161
- IDXGIFactory6* _dxgiFactory = nullptr;
162
-
163
- IDXGISwapChain* _swapchain = nullptr;
164
-
165
-
166
-
167
- /*フューチャーレベルを設定*/
168
-
169
- D3D_FEATURE_LEVEL featureLevel;
170
-
171
- for(auto lv : levels)
172
-
173
- {
174
-
175
- /*フューチャーレベルをfor文で算出する。*/
176
-
177
- /////////////////////////////////////////////////////////////////////////////////////////////////
178
-
179
- if (D3D12CreateDevice(nullptr, lv, IID_PPV_ARGS(&_dev)) == S_OK)
180
-
181
- /////////////////////////////////////////////////////////////////////////////////////////////////
182
-
183
- {
184
-
185
- printf("aaa\n");
186
-
187
- featureLevel = lv;
188
-
189
- break;
190
-
191
- }else
192
-
193
- {
194
-
195
- printf("nnnn\n");
196
-
197
- }
198
-
199
- }
200
-
201
-
202
-
203
-
204
-
205
-
206
-
207
- if(_dev == nullptr )
208
-
209
- {
210
-
211
- printf("null");
212
-
213
- //exit(1);
214
-
215
- return -1;
216
-
217
- }
218
-
219
-
220
-
221
- /*アダプタを設定*/
222
-
223
- auto result = CreateDXGIFactory1(IID_PPV_ARGS(&_dxgiFactory));
224
-
225
- if(result != S_OK)
226
-
227
- {
228
-
229
- return -1;
230
-
231
- }
232
-
233
- std::vector<IDXGIAdapter*> adapters;
234
-
235
- IDXGIAdapter* tmpAdapter = nullptr;
236
-
237
- for(int i = 0; _dxgiFactory->EnumAdapters(i,&tmpAdapter) != DXGI_ERROR_NOT_FOUND; i++)
238
-
239
- {
240
-
241
- adapters.push_back(tmpAdapter);
242
-
243
- }
244
-
245
-
246
-
247
- for(auto adpt : adapters)
248
-
249
- {
250
-
251
- DXGI_ADAPTER_DESC adesc = { };
252
-
253
- adpt->GetDesc(&adesc);
254
-
255
- std::wstring strDesc = adesc.Description;
256
-
257
- if(strDesc.find(L"NVIDIA") != std::string::npos)
258
-
259
- {
260
-
261
- tmpAdapter = adpt;
262
-
263
- break;
264
-
265
- }
266
-
267
-
268
-
269
- }
270
-
271
-
272
-
273
-
274
-
275
-
276
-
277
- WNDCLASSEX w = {};
278
-
279
- w.cbSize = sizeof(WNDCLASSEX);
280
-
281
- w.lpfnWndProc = (WNDPROC)WindowProcedure;
282
-
283
- w.hInstance = GetModuleHandle(nullptr);
284
-
285
-
286
-
287
- RegisterClassEx(&w);
288
-
289
-
290
-
291
- // RECT wrc = { 0,0,window_width,window_height };
292
-
293
- RECT wrc = { 0,0,100,100 };//ウインドウサイズ
294
-
295
- AdjustWindowRect(&wrc, WS_OVERLAPPEDWINDOW, false);//ウインドウサイズの補正
296
-
297
-
298
-
299
- HWND hwnd = CreateWindow(w.lpszClassName,
300
-
301
- TEXT("DX12テスト"),
302
-
303
- WS_OVERLAPPEDWINDOW,
304
-
305
- CW_USEDEFAULT,
306
-
307
- CW_USEDEFAULT,
308
-
309
- wrc.right - wrc.left,
310
-
311
- wrc.bottom - wrc.top,
312
-
313
- nullptr,
314
-
315
- nullptr,
316
-
317
- w.hInstance,
318
-
319
- nullptr);
320
-
321
-
322
-
323
- ShowWindow(hwnd, SW_SHOW);
324
-
325
-
326
-
327
-
328
-
329
-
330
-
331
-
332
-
333
- MSG msg = { };
334
-
335
- while (true) {
336
-
337
- if (PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE))
338
-
339
- {
340
-
341
- TranslateMessage(&msg);
342
-
343
- DispatchMessage(&msg);
344
-
345
- }
346
-
347
-
348
-
349
- if (msg.message == WM_QUIT)
350
-
351
- {
352
-
353
- break;
354
-
355
- }
356
-
357
- }
358
-
359
-
360
-
361
- UnregisterClass(w.lpszClassName, w.hInstance);
362
-
363
-
364
-
365
-
366
-
367
- //DebugOutputFormatString("show window test.");
368
-
369
- getchar();
370
-
371
- return 0;
372
-
373
-
221
+ //ID3D12Device::CheckFeatureSupport();
222
+
223
+ // CheckFeatureSupport(D3D_FEATURE_LEVEL_12_0,IID_PPV_ARGS(&_dev));
224
+
225
+ /*フューチャーレベルを設定*/
226
+
227
+ D3D_FEATURE_LEVEL featureLevel;
228
+
229
+ int t = 0;
230
+
231
+ //for(auto lv : levels)
232
+
233
+ for(auto lv : levels)
234
+
235
+ {
236
+
237
+
238
+
239
+ //HRESULT h = D3D12CreateDevice(nullptr, lv, IID_PPV_ARGS(&_dev));
240
+
241
+ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
242
+
243
+ HRESULT h = D3D12CreateDevice(nullptr, lv, IID_PPV_ARGS(&_dev));
244
+
245
+ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
246
+
247
+ if ( h == S_OK)
248
+
249
+ {
250
+
251
+ featureLevel = lv;
252
+
253
+ cout<<"成功です"<<std::endl;
254
+
255
+ break;
256
+
257
+
258
+
259
+ }else
260
+
261
+ {
262
+
263
+ // printf("%ld\n",h);
264
+
265
+ printf(" %d %lx\n",t,h);
266
+
267
+ t++;
268
+
269
+ }
270
+
271
+
272
+
273
+
274
+
275
+ }
276
+
277
+
278
+
279
+ if(_dev == nullptr )
280
+
281
+ {
282
+
283
+ printf("null");
284
+
285
+ //exit(1);
286
+
287
+ //return -1;
288
+
289
+ }
290
+
291
+
292
+
293
+
294
+
295
+ /*アダプタを設定*/
296
+
297
+ auto result = CreateDXGIFactory1(IID_PPV_ARGS(&_dxgiFactory));
298
+
299
+ if(result != S_OK)
300
+
301
+ {
302
+
303
+ //return -1;
304
+
305
+ }
306
+
307
+ std::vector<IDXGIAdapter*> adapters;
308
+
309
+ IDXGIAdapter* tmpAdapter = nullptr;
310
+
311
+ for(int i = 0; _dxgiFactory->EnumAdapters(i,&tmpAdapter) != DXGI_ERROR_NOT_FOUND; i++)
312
+
313
+ {
314
+
315
+ adapters.push_back(tmpAdapter);
316
+
317
+ }
318
+
319
+
320
+
321
+ for(auto adpt : adapters)
322
+
323
+ {
324
+
325
+ DXGI_ADAPTER_DESC adesc = { };
326
+
327
+ adpt->GetDesc(&adesc);
328
+
329
+ std::wstring strDesc = adesc.Description;
330
+
331
+ if(strDesc.find(L"INTEL") != std::string::npos)
332
+
333
+ {
334
+
335
+ printf("aaaa");
336
+
337
+ tmpAdapter = adpt;
338
+
339
+ break;
340
+
341
+ }
342
+
343
+
344
+
345
+ }
346
+
347
+
348
+
349
+
350
+
351
+ WNDCLASSEX w = {};
352
+
353
+ w.cbSize = sizeof(WNDCLASSEX);
354
+
355
+ w.lpfnWndProc = (WNDPROC)WindowProcedure;
356
+
357
+ w.hInstance = GetModuleHandle(nullptr);
358
+
359
+
360
+
361
+ RegisterClassEx(&w);
362
+
363
+
364
+
365
+ // RECT wrc = { 0,0,window_width,window_height };
366
+
367
+ RECT wrc = { 0,0,100,100 };//ウインドウサイズ
368
+
369
+ AdjustWindowRect(&wrc, WS_OVERLAPPEDWINDOW, false);//ウインドウサイズの補正
370
+
371
+
372
+
373
+ HWND hwnd = CreateWindow(w.lpszClassName,
374
+
375
+ TEXT("DX12テスト"),
376
+
377
+ WS_OVERLAPPEDWINDOW,
378
+
379
+ CW_USEDEFAULT,
380
+
381
+ CW_USEDEFAULT,
382
+
383
+ wrc.right - wrc.left,
384
+
385
+ wrc.bottom - wrc.top,
386
+
387
+ nullptr,
388
+
389
+ nullptr,
390
+
391
+ w.hInstance,
392
+
393
+ nullptr);
394
+
395
+
396
+
397
+ ShowWindow(hwnd, SW_SHOW);
398
+
399
+
400
+
401
+ /*コマンドキュー*/
402
+
403
+ ID3D12CommandQueue* _cmdQueue = nullptr;
404
+
405
+
406
+
407
+ D3D12_COMMAND_QUEUE_DESC cmdQueueDesc = { };
408
+
409
+ cmdQueueDesc.Flags = D3D12_COMMAND_QUEUE_FLAG_NONE;
410
+
411
+ cmdQueueDesc.NodeMask = 0;
412
+
413
+ cmdQueueDesc.Priority = D3D12_COMMAND_QUEUE_PRIORITY_NORMAL;
414
+
415
+
416
+
417
+ cmdQueueDesc.Type = D3D12_COMMAND_LIST_TYPE_DIRECT;
418
+
419
+ result = _dev->CreateCommandQueue(&cmdQueueDesc, IID_PPV_ARGS(&_cmdQueue));
420
+
421
+
422
+
423
+ DXGI_SWAP_CHAIN_DESC1 swapchainDesc = { };
424
+
425
+ swapchainDesc.Width = (UINT)100;
426
+
427
+ swapchainDesc.Height = (UINT)100;
428
+
429
+ swapchainDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
430
+
431
+ swapchainDesc.Stereo = false;
432
+
433
+ swapchainDesc.SampleDesc.Count = 1;
434
+
435
+ swapchainDesc.SampleDesc.Quality = 0;
436
+
437
+ swapchainDesc.BufferUsage = DXGI_USAGE_BACK_BUFFER;
438
+
439
+ swapchainDesc.BufferCount = 2;
440
+
441
+
442
+
443
+ swapchainDesc.Scaling = DXGI_SCALING_STRETCH;
444
+
445
+ swapchainDesc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_DISCARD;
446
+
447
+ swapchainDesc.AlphaMode = DXGI_ALPHA_MODE_UNSPECIFIED;
448
+
449
+ swapchainDesc.Flags = DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH;
450
+
451
+
452
+
453
+ result = _dxgiFactory->CreateSwapChainForHwnd(_cmdQueue, hwnd, &swapchainDesc, nullptr, nullptr, (IDXGISwapChain1**)&_swapchain);
454
+
455
+ if(result == S_OK)
456
+
457
+ {
458
+
459
+ }
460
+
461
+
462
+
463
+ printf("S_OK\n");
464
+
465
+
466
+
467
+
468
+
469
+ MSG msg = { };
470
+
471
+ while (true) {
472
+
473
+ if (PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE))
474
+
475
+ {
476
+
477
+ TranslateMessage(&msg);
478
+
479
+ DispatchMessage(&msg);
480
+
481
+ }
482
+
483
+
484
+
485
+ if (msg.message == WM_QUIT)
486
+
487
+ {
488
+
489
+ break;
490
+
491
+ }
492
+
493
+ }
494
+
495
+
496
+
497
+ UnregisterClass(w.lpszClassName, w.hInstance);
498
+
499
+
500
+
501
+
502
+
503
+ //DebugOutputFormatString("show window test.");
504
+
505
+ getchar();
506
+
507
+ return 0;
508
+
509
+
510
+
511
+ }
374
512
 
375
513
  ```

4

タイトルと文章に参考サイトのURLを追加

2020/05/17 07:29

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- DirectX12の初期化でID3D12Deviceのフューチャーレベルの指定ができな
1
+ DirectX12の初期化でID3D12Deviceのフューチャーレベルがどれを設してもnullになる理由知りた
test CHANGED
@@ -1,5 +1,11 @@
1
1
  提示コードのID3D12Device* _dev = nullptr; , IDXGIFactory6* _dxgiFactory = nullptr;ですが二つの初期化がすべてnullptrになってしまいます。どうしてでしょうか?フューチャーレベルをfor文でループさせたりしましたが配列にこれ以上のレベルは存在しないようですデバッグログを表示させたりif文で分岐処理を作りましたがnullptrなのは確実見たいです。どうすればいいのでしょうか? /// コメント部の内部のif文です
2
2
 
3
+
4
+
5
+ 参考サイト: https://docs.microsoft.com/en-us/windows/win32/api/d3d12/nf-d3d12-d3d12createdevice
6
+
7
+ 参考サイト2: https://docs.microsoft.com/ja-jp/windows/win32/api/combaseapi/nf-combaseapi-iid_ppv_args
8
+
3
9
 
4
10
 
5
11
  ※DirectX12です。

3

タイトルを編集

2020/05/17 01:29

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- DirectX12の初期化でID3D12Deviceのフューチャーレベルの指定がnullにってしまう原因と対処法が知りたい。
1
+ DirectX12の初期化でID3D12Deviceのフューチャーレベルの指定ができない。
test CHANGED
File without changes

2

文章を編集しました。タイトルも編集しました。

2020/05/16 11:52

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- DirectX12の初期化でID3D12Deviceのフューチャーレベルの指定がnullになってしまう原因と対処法が知りたい
1
+ DirectX12の初期化でID3D12Deviceのフューチャーレベルの指定がnullになってしまう原因と対処法が知りたい
test CHANGED
@@ -1,4 +1,4 @@
1
- 提示コードのID3D12Device* _dev = nullptr; , IDXGIFactory6* _dxgiFactory = nullptr;ですが二つの初期化がすべてnullptrになってしまいます。どうしてでしょうか?ューチャーレベルをfor文でループさせたりしましたが配列にこれ以上のレベルは存在しないようですデバッグログを表示させたりif文で分岐処理を作りましたがnullptrなのは確実見たいです。どうすればいいのでしょうか?
1
+ 提示コードのID3D12Device* _dev = nullptr; , IDXGIFactory6* _dxgiFactory = nullptr;ですが二つの初期化がすべてnullptrになってしまいます。どうしてでしょうか?ューチャーレベルをfor文でループさせたりしましたが配列にこれ以上のレベルは存在しないようですデバッグログを表示させたりif文で分岐処理を作りましたがnullptrなのは確実見たいです。どうすればいいのでしょうか? /// コメント部の内部のif文です
2
2
 
3
3
 
4
4
 
@@ -166,8 +166,14 @@
166
166
 
167
167
  {
168
168
 
169
+ /*フューチャーレベルをfor文で算出する。*/
170
+
171
+ /////////////////////////////////////////////////////////////////////////////////////////////////
172
+
169
173
  if (D3D12CreateDevice(nullptr, lv, IID_PPV_ARGS(&_dev)) == S_OK)
170
174
 
175
+ /////////////////////////////////////////////////////////////////////////////////////////////////
176
+
171
177
  {
172
178
 
173
179
  printf("aaa\n");

1

提示画像を追加しました。

2020/05/16 05:40

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -4,6 +4,12 @@
4
4
 
5
5
  ※DirectX12です。
6
6
 
7
+ dxdiagによるスペック表示
8
+
9
+ ![イメージ説明](218eaccbc9e02f388f1c2af8b389b9d9.png)
10
+
11
+ ![イメージ説明](8c606bdb71d95dd983350e79f5bdd66a.png)
12
+
7
13
 
8
14
 
9
15
  ```ここに言語を入力