코드에 대한질문있습니다.
230
작성한 질문수 3
처음 디바이스 생성부분에서 어댑터를 순환하면서 Device 를 생성하는데
저같은경우에는 그래픽카드를 2개 사용중인데 1080과 4090을 사용중인데 첫번째 어댑터에 1080으로 인식되면서 1080을 이용해서 Device 를 생성하는것 같은데 , 이럴경우 문제가되지않나요? 4090 을 이용못하는거아닐까요?
} for (DWORD featerLevelIndex = 0; featerLevelIndex < FeatureLevelNum; featerLevelIndex++)
{
UINT adapterIndex = 0;
while (DXGI_ERROR_NOT_FOUND != _factory->EnumAdapters1(adapterIndex, &pAdapter))
{
pAdapter->GetDesc1(&AdapterDesc);
if (SUCCEEDED(D3D12CreateDevice(pAdapter.Get(), featureLevels[featerLevelIndex], IID_PPV_ARGS(&_device))))
{
break;
}
adapterIndex++;
}
if (_device)
{
break;
}
답변 2
0
IDXGIAdapter::GetDesc()함수를 사용하면 Device ID를 얻을 수 있습니다.
RTX4090의 Device ID를 얻어서 다음과 같이 비교해서 4090이 아니면 스킵시키면 됩니다.
내부 코드로는 이 정도로 충분하고 배포를 한다면 그래픽 카드를 선택할 수 있는 옵션을 주는게 좋겠죠.
#define DEVICE_ID_RTX4090 XXXXXX
.
.
.
DXGI_ADAPTER_DESC desc;
pAdapter->GetDesc(&adapterDesc);
if (DEVICE_ID_RTX4090 != adapterDesc.DeviceId)
{
continue;
}
0
감사합니다. 추가질문있습니다!
1.어댑터를 어케고르느냐에 따라 성능차이가많이날까요? 예를들어 4090 이랑 1080 어댑터 차이 ..
2. 모든어댑터를 순회하면서 최고성능을 가진 어댑터를 이용하여 디바이스를 생성할수있도록 코드를 바꿨는데 , m_swapchain->setFullScreen 함수가 반복문의 첫번째 어댑터 가아니면은 작동을 안하는데 혹시 이유를 알수있을까요?
첫번째 꼽힌 1080으로 디바이스 생성을 하면 m_swapchain->setFullScreen 이 작동함.
두번째로 꼽힌 4090 으로 디바이스 를 생성시 m_swapchain->setFullScreen 이 브레이크 포인트에도 안걸림..
0
성능차이가 큽니다만 강좌의 예제 정도는 1080에서 돌리나 4090에서 돌리나 체감할만한 차이는 없습니다. 다만 D3D12에 추가된 기능은 Mesh Shader나 RayTracing은 1080에선 사용할 수 없습니다. SetFullScreen()함수가 실패하는 이유는 모르겠는데 D3D DebugLayer를 켜두셨다면 VS의 Ouput 윈도우에 실패 이유가 나와있을것 같네요.
0
안녕하세요, 인프런 AI 인턴입니다. dltmddnr05님.
그래픽 카드가 두 개 이상 있는 경우, 어떤 어댑터를 사용할지 명시적으로 제어하지 않으면 처음 발견된 어댑터가 선택될 수 있습니다. 따라서 현재 코드에서는 첫 번째로 발견된 어댑터(1080)를 사용하게 됩니다. 더 성능 좋은 4090을 사용하고 싶으시면 어댑터를 선택하는 과정에서 이를 반영해주는 로직이 필요합니다.
아래와 같은 방식으로 특정 어댑터(예, 4090의 VendorID 또는 DeviceID)를 찾게 하고, 해당 어댑터로 디바이스를 생성할 수 있습니다.
추천할 만한 유사한 답변:
- 디버깅 할 때 훨씬 직관적입니다. 이유가 따로 있나요? - DirectX 객체의 생성과 선택 과정에서 필요한 기초적인 정보를 확인할 수 있습니다.
- Comptr를 사용하는 대신 raw pointer를 사용할 이유가 있나요? - 메모리 관리와 관련하여 유사한 설명을 확인할 수 있습니다.
간단한 설명:
어댑터 선택 로직 추가:
IDXGIAdapter1* GetAdapter(IDXGIFactory1* pFactory, bool preferHighPerformanceAdapter) { IDXGIAdapter1* pAdapter = nullptr; IDXGIAdapter1* pTempAdapter = nullptr; DXGI_ADAPTER_DESC1 desc; for (UINT adapterIndex = 0; DXGI_ERROR_NOT_FOUND != pFactory->EnumAdapters1(adapterIndex, &pTempAdapter); ++adapterIndex) { pTempAdapter->GetDesc1(&desc); if (preferHighPerformanceAdapter) { // Replace with your own logic to select a high-performance GPU (e.g., by Vendor ID or by checking the adapter's description) if (desc.VendorId == YOUR_HIGH_PERFORMANCE_GPU_VENDOR_ID) { pAdapter = pTempAdapter; break; } } else { pAdapter = pTempAdapter; break; } } return pAdapter; }위 코드를 통해, 더 높은 성능의 어댑터를 선택할 수 있습니다.
디바이스 생성 시 적용:
IDXGIAdapter1* pAdapter = GetAdapter(_factory.Get(), true); if (pAdapter) { D3D12CreateDevice(pAdapter, featureLevels[featerLevelIndex], IID_PPV_ARGS(&_device)); }
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
복습중에 커맨드 큐 관련 질문이 있습니다.
0
35
1
assimp-vc143-mtd.dll가 없어서 코드 실행을 진행할 수 없습니다 라는 에러가 뜹니다.
0
78
1
_vsBlob와 _psBlob에서 nullptr이 뜨면서 실행이 안됩니다
0
56
1
혹시 영상이 안되는 이유가 있을까요?
0
87
2
Model.cpp에서 ReadMaterial()의 SpecularTexture 부분 질문입니다.
0
55
0
노멀매핑 자료
0
72
1
셰이더 인텔리센스 문제
0
79
1
#include d3dx12.h 추가했지만 오류
0
81
1
MeshObject 공용 사용 방법
1
95
2
BuildBLAS 할당 리소스 사이즈
0
79
2
4강 삼각형띄우기 오류관련 질문있습니다
0
64
1
ConstnatBufferPool관련 질문
0
69
2
LNK1104 error, DirectXTexD.lib 파일을 열 수 없습니다.
0
122
1
64.애니메이션 강의의, AssimpTool 에서 FBX 애니매이션 데이터를 옮길 때의 강의 오류가 있는 것 같습니다.
1
65
1
SkyDemo에서 카메라 입력이 작동하지 않는 문제
0
81
2
섹션6. DirectX 11 3D 입문 강의부터 렌더링이 안됩니다
0
131
2
CommandList의 GraphicsCommandList 변경이유
0
113
2
[25:13] Virtual Interface 와 COM Interface간의 차이가 궁금합니다.
0
116
1
텍스처와 UV 강의 관련해서 문의드려요
0
162
2
frame간 보간에 대해서 질문이있습니다.
1
132
1
Descriptor를 복사하는 이유
0
315
2
Comptr 을 안쓸시 메모리 해제순서
0
282
2
raw pointer 쓰시는 이유가 따로 있으신가요?
0
384
1
질문있습니다.
0
431
2





