D3DDDICB_LOCKFLAGS 구조체(d3dukmdt.h)

D3DDDICB_LOCKFLAGS 구조체는 할당을 잠그는 방법을 식별합니다.

구문

typedef struct _D3DDDICB_LOCKFLAGS {
  union {
    struct {
      UINT ReadOnly : 1;
      UINT WriteOnly : 1;
      UINT DonotWait : 1;
      UINT IgnoreSync : 1;
      UINT LockEntire : 1;
      UINT DonotEvict : 1;
      UINT AcquireAperture : 1;
      UINT Discard : 1;
      UINT NoExistingReference : 1;
      UINT UseAlternateVA : 1;
      UINT IgnoreReadSync : 1;
      UINT Reserved : 21;
    };
    UINT Value;
  };
} D3DDDICB_LOCKFLAGS;

멤버

ReadOnly

잠긴 할당만 읽을 수 있는지 여부를 지정하는 UINT 값입니다. 이 멤버를 설정하는 것은 32비트 Value 멤버(0x00000001)의 첫 번째 비트를 설정하는 것과 같습니다.

WriteOnly

잠긴 할당만 쓸 수 있는지 여부를 지정하는 UINT 값입니다. 이 멤버를 설정하는 것은 32비트 Value 멤버(0x00000002)의 두 번째 비트를 설정하는 것과 같습니다.

DonotWait

비디오 메모리 관리자가 할당을 잠글 때까지 기다려야 하는지 여부를 지정하는 UINT 값입니다. 이 멤버가 설정되면 메모리 관리자는 그래픽 하드웨어가 할당을 사용하는 경우 D3DERR_WASSTILLDRAWING 사용하여 pfnLockCb 호출에 실패합니다.

이 멤버를 설정하는 것은 32비트 Value 멤버(0x00000004)의 세 번째 비트를 설정하는 것과 같습니다.

IgnoreSync

비디오 메모리 관리자가 그래픽 하드웨어에서 할당을 사용하는지 여부를 검사 여부를 지정하는 UINT 값입니다. 이 멤버가 설정되면 메모리 관리자가 검사 않아야 합니다.

IgnoreSync 는 조리개 세그먼트에 배치할 수 있는 할당으로만 설정할 수 있습니다. 그래픽 어댑터에서 캐시 일관성을 지원하지 않는 경우 스위즐된 할당 또는 캐시된 할당으로 설정할 수 없습니다.

이 멤버를 설정하는 것은 32비트 Value 멤버(0x00000008)의 네 번째 비트를 설정하는 것과 같습니다.

LockEntire

하위 영역이 아닌 전체 할당 지역이 잠겨 있는지 여부를 지정하는 UINT 값입니다.

이 멤버를 설정하는 것은 32비트 Value 멤버(0x00000010)의 다섯 번째 비트를 설정하는 것과 같습니다.

DonotEvict

잠금이 성공할 수 있도록 비디오 메모리 관리자가 할당을 제거해야 하는지 여부를 지정하는 UINT 값입니다. 이 멤버가 설정되면 메모리 관리자가 할당을 제거하면 안 됩니다. 잠금 요청을 처리하기 위해 할당을 제거해야 하는 경우 메모리 관리자는 D3DERR_NOTAVAILABLE 사용하여 pfnLockCb 호출에 실패합니다. 모든 소멸 조리개는 모두 소진된 경우 제거가 필요할 수 있습니다.

이 멤버를 설정하는 것은 32비트 Value 멤버(0x00000020)의 여섯 번째 비트를 설정하는 것과 같습니다.

AcquireAperture

비디오 메모리 관리자가 디스플레이 미니포트 드라이버의 DxgkDdiAcquireSwizzlingRange 함수를 호출하여 할당에 대한 언스위즐링 조리개 설정 여부를 지정하는 UINT 값입니다.

AcquireAperture를 설정하지 않고 잠긴 할당은 AcquireAperture 집합으로 다시 잠글 수 없습니다.

할당을 조리개 세그먼트에만 배치할 수 있는 경우 AcquireAperture를 설정할 수 없습니다.

이 멤버를 설정하는 것은 32비트 Value 멤버(0x00000040)의 일곱 번째 비트를 설정하는 것과 같습니다.

Discard

비디오 메모리 관리자가 할당의 이름을 바꿀 수 있는지 다중 버퍼링할 수 있는지 여부를 지정하는 UINT 값입니다. 할당 이름 바꾸기에 대한 자세한 내용은 할당 이름 바꾸기 요청을 참조하세요.

고정 , 기본 또는 공유 할당에 대해서는 무시됩니다.

이 멤버를 설정하는 것은 32비트 Value 멤버(0x00000080)의 여덟 번째 비트를 설정하는 것과 같습니다.

NoExistingReference

사용자 모드 표시 드라이버가 현재 명령 버퍼에 큐에 대기되어 있지 않은지 여부를 지정하는 UINT 값으로, 잠겨 있는 할당의 instance 대한 참조입니다. 비디오 메모리 관리자가 삭제 플래그만 사용하여 잠금 요청에 실패한 후 드라이버가 현재 명령 버퍼를 커널로 플러시한 후 드라이버는 NoExistingReference 멤버를 사용해야 합니다. 드라이버는 삭제와 함께 NoExistingReference를 사용해야 합니다.

이 멤버를 설정하는 것은 32비트 Value 멤버(0x00000100)의 9번째 비트를 설정하는 것과 같습니다.

UseAlternateVA

디스플레이 미니포트 드라이버가 할당의 현재 세그먼트 위치와 다른 실제 주소에서 할당을 잠글 수 있는지 또는 이전에 할당된 것과 다른 메모리 공간을 사용하여 할당을 잠글 수 있는지 여부를 지정하는 UINT 값입니다. 이 플래그를 지정하면 디스플레이 미니포트 드라이버는 DxgkDdiAcquireSwizzlingRange 함수를 호출하여 DXGKARG_ACQUIRESWIZZLINGRANGE 구조체의 RangeSizeCPUTranslatedAddress 멤버를 업데이트하여 할당에 액세스할 수 있는 실제 주소 범위의 기본 주소와 크기를 업데이트할 수 있습니다. 이 플래그를 지정하면 비디오 메모리 관리자는 할당 백업 저장소 가상 주소를 사용하는 대신 잠금 요청을 처리하기 위해 새 가상 주소를 할당하려고 시도합니다. 그러나 비디오 메모리 관리자가 새 가상 주소를 할당할 수 없는 경우 잠금 요청이 실패합니다.

이 플래그는 현재 비 AGP 조리개 세그먼트에 있는 스위즐 또는 타일 할당을 잠그는 데도 사용됩니다. 이 유형의 잠금에서 비디오 메모리 관리자는 대체 가상 주소를 스와이즐 해제되거나 즉시 완료될 수 있는 실제 주소 범위에 매핑한 다음 메모리 액세스를 시스템 메모리 페이지로 리디렉션합니다.

비디오 메모리 관리자는 UseAlternateVA 를 사용하여 할당이 처음 잠기면 대체 가상 주소를 만들고 다음 시나리오 중 하나에서 가상 주소를 해제합니다.

  • CPU에서 할당에 액세스할 수 없으며 스위즐링 범위는 다른 할당에서 다시 사용할 수 있도록 해제됩니다.
  • 할당은 CPU에 액세스할 수 없으며 제거되고 있습니다.
  • 할당이 제거되고 있습니다.
  • 할당은 잠금 상태에서 제거된 후 페이징됩니다.
디스플레이 미니포트 드라이버의 DxgkDdiCreateAllocation 함수에 대한 호출에서 DXGK_ALLOCATIONINFO 구조의 Flags 멤버에 UseAlternateVA 비트 필드 플래그를 지정하여 기본 할당을 만든 경우에만 UseAlternateVA를 기본 할당에 사용할 수 있습니다. 이러한 방식으로 생성된 기본 할당은 UseAlternateVA 플래그로만 잠글 수 있습니다.

UseAlternateVA 는 공유 할당에 사용할 수 없습니다.

UseAlternateVA 집합으로 잠긴 할당은 다시 잠글 수 없습니다.

참고 사용자 모드 표시 드라이버가 pfnLockCb 함수를 호출하는 동안 D3DDDICB_LOCKFLAGS 구조의 Flags 멤버에서 UseAlternateVA를 설정한 경우 디스플레이 미니포트 드라이버는 DxgkCbExcludeAdapterAccess 함수를 호출하지 않아야 합니다.
 
이 멤버를 설정하는 것은 32비트 Value 멤버(0x00000200)의 10번째 비트를 설정하는 것과 같습니다.

IgnoreReadSync

비디오 메모리 관리자가 할당에 대한 보류 중인 GPU(그래픽 처리 장치) 쓰기 작업만 완료할 때까지 기다려야 하는지 여부를 지정하는 UINT 값입니다. 이 멤버가 설정된 경우 메모리 관리자는 GPU 읽기 작업이 완료되기를 기다릴 필요가 없습니다. 즉, 마지막 GPU 쓰기 작업이 완료되는 즉시 GPU가 할당에서 계속 읽어도 잠금이 반환될 수 있습니다.

IgnoreReadSync 는 조리개 세그먼트에 배치할 수 있는 할당으로만 설정할 수 있습니다. 그래픽 어댑터에서 캐시 일관성을 지원하지 않는 경우 스위즐된 할당 또는 캐시된 할당으로 설정할 수 없습니다.

이 멤버를 설정하는 것은 32비트 Value 멤버(0x00000400)의 11번째 비트를 설정하는 것과 같습니다.

Reserved

이 멤버는 예약되어 있으며 0으로 설정해야 합니다. 이 멤버를 0으로 설정하는 것은 32비트 Value 멤버의 나머지 21비트(0xFFFFF800)를 0으로 설정하는 것과 같습니다.

Value

할당을 잠그는 방법을 식별하는 하나의 32비트 값을 보유할 수 있는 D3DDDICB_LOCKFLAGS 포함된 공용 구조체의 멤버입니다.

설명

D3DDDICB_LOCKFLAGS 구조를 사용하여 할당을 잠그는 방법을 지정하는 경우 다음 규칙을 준수해야 합니다.

  • ReadOnlyWriteOnly 멤버를 동시에 지정하는 것은 유효하지 않습니다.
  • IgnoreSync 멤버를 Discard 멤버로 지정하면 아무런 효과가 없습니다.
  • 취소 멤버를 사용하여 지정하면 DonotWait 멤버가 적용되지 않습니다.
  • IgnoreSyncAcquireAperture 멤버를 동시에 지정하는 것은 유효하지 않습니다.
  • UseAlternateVA 멤버를 지정하면 조리개 획득이 표시되므로 AcquireAperture 멤버도 설정해야 합니다.
  • 사용 중지되거나 제공된 할당은 잠글 수 없습니다. 할당 이름 바꾸기 요청도 참조하세요.
  • 할당은 DXGK_ALLOCATIONINFOFLAGS 구조에 설정된 CpuVisible 멤버를 사용하여 만든 경우에만 잠글 수 있습니다.
  • 관리되지 않는 GDI 기본 할당이 아니면 공유 할당의 소유자(작성자)만 이를 잠글 수 있습니다.
  • 스위즐된 범위로 잠긴 할당은 잠금 해제해야 다시 잠길 수 있습니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows Vista 이상 버전의 Windows 운영 체제에서 사용할 수 있습니다.
머리글 d3dukmdt.h(D3dukmdt.h 포함)

추가 정보

D3DDDICB_LOCK

DXGK_ALLOCATIONINFOFLAGS

DxgkDdiAcquireSwizzlingRange

pfnLockCb