D3DDDI_SYNCHRONIZATIONOBJECTINFO2 구조체(d3dukmdt.h)
D3DDDI_SYNCHRONIZATIONOBJECTINFO2 구조에는 2세대 동기화 개체에 대한 정보가 포함되어 있습니다.
통사론
typedef struct _D3DDDI_SYNCHRONIZATIONOBJECTINFO2 {
D3DDDI_SYNCHRONIZATIONOBJECT_TYPE Type;
D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS Flags;
union {
struct {
BOOL InitialState;
} SynchronizationMutex;
struct {
UINT MaxCount;
UINT InitialCount;
} Semaphore;
struct {
D3DKMT_ALIGN64 UINT64 FenceValue;
} Fence;
struct {
HANDLE Event;
} CPUNotification;
struct {
D3DKMT_ALIGN64 UINT64 InitialFenceValue;
VOID *FenceValueCPUVirtualAddress;
D3DKMT_ALIGN64 D3DGPU_VIRTUAL_ADDRESS FenceValueGPUVirtualAddress;
UINT EngineAffinity;
UINT Padding;
} MonitoredFence;
struct {
D3DKMT_HANDLE hAdapter;
D3DDDI_VIDEO_PRESENT_TARGET_ID VidPnTargetId;
D3DKMT_ALIGN64 UINT64 Time;
VOID *FenceValueCPUVirtualAddress;
D3DKMT_ALIGN64 D3DGPU_VIRTUAL_ADDRESS FenceValueGPUVirtualAddress;
UINT EngineAffinity;
UINT Padding;
} PeriodicMonitoredFence;
struct {
D3DKMT_ALIGN64 UINT64 Reserved[8];
} Reserved;
};
D3DKMT_HANDLE SharedHandle;
} D3DDDI_SYNCHRONIZATIONOBJECTINFO2;
회원
Type
[in] 동기화 개체의 형식을 나타내는 D3DDDI_SYNCHRONIZATIONOBJECT_TYPE 형식의 값입니다.
Flags
[in] 동기화 개체의 특성을 비트 필드 플래그로 지정하는 D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS 구조체입니다.
SynchronizationMutex
동기화 뮤텍스에 대한 정보를 포함하는 구조체입니다. Type 멤버가 D3DDDI_SYNCHRONIZATION_MUTEX같으면 D3DDDI_SYNCHRONIZATIONOBJECTINFO2 공용 구조체에 SynchronizationMutex 구조체가 포함됩니다.
SynchronizationMutex.InitialState
동기화 뮤텍스가 처음에 개체가 소유하는지 여부를 나타내는 부울 값입니다. TRUE 값은 뮤텍스가 소유됨을 나타냅니다. FALSE는 뮤텍스가 소유되지 않음을 나타냅니다.
Semaphore
세마포에 대한 정보를 포함하는 구조체입니다. Type 멤버가 D3DDDI_SEMAPHORE같으면 D3DDDI_SYNCHRONIZATIONOBJECTINFO2 공용 구조체는 세마포 구조를 보유합니다.
Semaphore.MaxCount
개체가 대기할 수 있는 최대 이벤트 수입니다.
Semaphore.InitialCount
개체가 대기 중인 초기 이벤트 수입니다.
Fence
펜스에 대한 정보가 들어 있는 구조체입니다. Type 멤버가 D3DDDI_FENCE같으면 D3DDDI_SYNCHRONIZATIONOBJECTINFO2 공용 구조체는 펜스 구조를 보유합니다.
Fence.FenceValue
초기 펜스 값을 지정하는 64비트 값입니다.
CPUNotification
CPU 알림에 대한 정보를 포함하는 구조체입니다. Type 멤버가 D3DDDI_CPU_NOTIFICATION같으면 D3DDDI_SYNCHRONIZATIONOBJECTINFO2 공용 구조체는 CPUNotification 구조를 보유합니다.
CPUNotification.Event
CPU 알림 이벤트에 대한 핸들입니다.
MonitoredFence
모니터링되는 펜스에 대한 정보를 포함하는 구조체입니다. Type 멤버가 D3DDDI_MONITORED_FENCE같으면 D3DDDI_SYNCHRONIZATIONOBJECTINFO2 공용 구조체는 MonitoredFence 구조를 보유합니다.
모니터링된 펜스는 보안상의 이유로 NT 핸들을 사용해야만 공유할 수 있으므로 모니터링된 펜스를 사용할 때는 NtSecuritySharing 플래그를 설정해야 합니다.
Windows 10부터 지원됩니다.
MonitoredFence.InitialFenceValue
[in] 초기 펜스 값을 지정하는 64비트 값입니다.
Windows 10부터 지원됩니다.
MonitoredFence.FenceValueCPUVirtualAddress
[out] CPU에 대한 펜스 값의 읽기 전용 매핑입니다. 모니터링되는 펜스 개체를 만든 프로세스에서 읽을 수 있는 사용자 모드 주소입니다.
InterlockedCompareExchange64(pointer,0,0)
같은 메서드를 통해 64비트 원자 읽기를 지원하는 32비트 플랫폼의 경우 연동 작업 중에 액세스 위반을 방지하기 위해 읽기 전용이 아닌 읽기-쓰기로 매핑됩니다.
No64BitAtomics 상한 값에 따라 이 주소는 32비트 또는 64비트 기본 값을 가리킵니다.
Windows 10부터 지원됩니다.
MonitoredFence.FenceValueGPUVirtualAddress
[out] GPU에 대한 펜스 값의 읽기-쓰기 매핑입니다. 드라이버는 이 주소에 대한 GPU 쓰기 명령을 명령 버퍼에 삽입하여 새 펜스 값에 신호를 보낼 수 있으며, Dxgkrnl 이 펜스 개체 값에 대한 웨이터의 차단을 해제합니다. No64BitAtomics 상한 값에 따라 이 주소는 32비트 또는 64비트 기본 값을 가리킵니다. 디바이스가 CPU와의 캐시 일관성을 지원하지 않는 경우 GPU 가상 주소를 사용하여 펜스 값에 쓰지 않아야 합니다. 펜스 값에 대한 액세스는 CPU에서만 수행해야 합니다.
Windows 10부터 지원됩니다.
MonitoredFence.EngineAffinity
[in] 각 비트 위치(0부터 시작)가 GPU 가상 주소를 커밋할 LDA(링크 표시 어댑터) 링크에서 실제 어댑터 인덱스를 정의하는 비트 필드입니다. 0은 GPU 가상 주소가 모든 실제 어댑터에 커밋됨을 의미합니다.
Windows 10부터 지원됩니다.
MonitoredFence.Padding
PeriodicMonitoredFence
주기적 모니터링 펜스에 대한 정보를 포함하는 구조체입니다. Type 멤버가 D3DDDI_PERIODIC_MONITORED_FENCE같으면 D3DDDI_SYNCHRONIZATIONOBJECTINFO2 공용 구조체는 MonitoredFence 구조를 보유합니다.
Windows 10부터 지원됩니다.
VidPnTargetID
[out] 작성자가 알림을 수신하려는 출력 ID입니다.
PeriodicMonitoredFence.hAdapter
[in] VidPnSourceID와 연결된 어댑터에 대한 핸들
PeriodicMonitoredFence.VidPnTargetId
PeriodicMonitoredFence.Time
[out] VSync(VSync 시간 – 시간 매개 변수) 이전의 오프셋을 나타냅니다. 시간 값은 VSync 간격(1/DisplayModeRefresh)보다 길지 않을 수 있습니다. 시간은 100ns 단위로 지정됩니다.
PeriodicMonitoredFence.FenceValueCPUVirtualAddress
[in] CPU에 대한 펜스 값의 읽기 전용 매핑
PeriodicMonitoredFence.FenceValueGPUVirtualAddress
[in] GPU에 대한 펜스 값의 읽기 전용 매핑
PeriodicMonitoredFence.EngineAffinity
[in] GPU VA가 매핑될 실제 어댑터를 정의합니다.
PeriodicMonitoredFence.Padding
Reserved
나중에 사용할 수 있도록 예약된 구조체입니다. 이 구조체에는 다음 멤버가 포함됩니다.
Reserved.Reserved[8]
SharedHandle
[out] 공유 핸들이 현재 있는 경우 공유 동기화 개체에 대한 핸들입니다. 드라이버는 NT 핸들을 사용하여 동기화 개체를 공유해야 합니다. D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS::NtSecuritySharing 설정하여 개체가 NT 핸들을 사용하여 공유되고 D3DKMTShareObjects 호출하여 NT 핸들을 가져옵니다. 전역 핸들을 사용하는 것은 안전하지 않습니다. 모든 프로세스는 전역 핸들을 추측하고 공유 개체를 열 수 있습니다. 전역 핸들은 이전 D3D 런타임과의 호환성 이유로만 지원됩니다.
요구 사항
요구 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 7 |
헤더 | d3dukmdt.h(D3dumddi.h, D3dkmddi.h 포함) |
참고 항목
D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS
D3DDDI_SYNCHRONIZATIONOBJECT_TYPE