estructura D3DDDICB_LOCKFLAGS (d3dukmdt.h)

La estructura de D3DDDICB_LOCKFLAGS identifica cómo bloquear una asignación.

Sintaxis

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;

Miembros

ReadOnly

Valor UINT que especifica si la asignación bloqueada solo se puede leer. Establecer este miembro equivale a establecer el primer bit del miembro Value de 32 bits (0x00000001).

WriteOnly

Valor UINT en el que se especifica si la asignación bloqueada solo se puede escribir en. Establecer este miembro equivale a establecer el segundo bit del miembro Value de 32 bits (0x00000002).

DonotWait

Valor UINT que especifica si el administrador de memoria de vídeo debe esperar para bloquear la asignación. Si se establece este miembro, el administrador de memoria produce un error en la llamada a pfnLockCb con D3DERR_WASSTILLDRAWING si el hardware gráfico usa la asignación.

Establecer este miembro equivale a establecer el tercer bit del miembro Value de 32 bits (0x00000004).

IgnoreSync

Valor UINT que especifica si el administrador de memoria de vídeo debe comprobar si el hardware gráfico usa la asignación. Si se establece este miembro, el administrador de memoria no debe comprobarlo.

IgnoreSync solo se puede establecer con una asignación que se puede colocar en un segmento de apertura. No se puede establecer con una asignación desacertada o con una asignación almacenada en caché cuando el adaptador de gráficos no admite la coherencia de caché.

Establecer este miembro equivale a establecer el cuarto bit del miembro Value de 32 bits (0x00000008).

LockEntire

Valor UINT que especifica si toda la región de asignación está bloqueada en lugar de simplemente una subregión.

Establecer este miembro equivale a establecer el quinto bit del miembro Value de 32 bits (0x00000010).

DonotEvict

Valor UINT que especifica si el administrador de memoria de vídeo debe expulsar la asignación para que el bloqueo pueda realizarse correctamente. Si se establece este miembro, el administrador de memoria no debe expulsar la asignación. Si se debe expulsar la asignación para controlar la solicitud de bloqueo, el administrador de memoria produce un error en la llamada a pfnLockCb con D3DERR_NOTAVAILABLE. La expulsión puede ser necesaria cuando se agotan todas las aberturas deswizzling.

Establecer este miembro equivale a establecer el sexto bit del miembro Value de 32 bits (0x00000020).

AcquireAperture

Valor UINT que especifica si el administrador de memoria de vídeo debe llamar a la función DxgkDdiAcquireSwizzlingRange del controlador de miniporte de pantalla para configurar una apertura deswizzling para la asignación.

Una asignación bloqueada sin establecer AcquireAperture no se puede volver a bloquear con acquireAperture establecido.

AcquireAperture no se puede establecer si la asignación solo se puede ubicar en un segmento de apertura.

Establecer este miembro equivale a establecer el séptimo bit del miembro Value de 32 bits (0x00000040).

Discard

Valor UINT que especifica si el administrador de memoria de vídeo puede cambiar el nombre o el búfer múltiple de la asignación. Para obtener más información sobre cómo cambiar el nombre de las asignaciones, vea Solicitar cambiar el nombre de una asignación.

El descarte se omite para las asignaciones ancladas, principales o compartidas.

Establecer este miembro equivale a establecer el octavo bit del miembro Value de 32 bits (0x00000080).

NoExistingReference

Valor UINT que especifica si el controlador de visualización en modo de usuario no tiene actualmente en cola en su búfer de comandos una referencia a cualquier instancia de la asignación que se está bloqueando. El controlador debe usar el miembro NoExistingReference después de que el administrador de memoria de vídeo produzca un error en la solicitud de bloqueo usando solo la marca Descartar y después de que el controlador vacía su búfer de comandos actual en el kernel. El controlador debe usar NoExistingReference en combinación con Discard.

Establecer este miembro equivale a establecer el noveno bit del miembro Value de 32 bits (0x00000100).

UseAlternateVA

Valor UINT que especifica si el controlador de miniporte de pantalla puede bloquear una asignación en una dirección física diferente a la ubicación del segmento actual de la asignación o con una superficie de memoria diferente de la asignada anteriormente. Cuando se especifica esta marca, el controlador de minipuerto de pantalla puede actualizar la dirección base y el tamaño del intervalo de direcciones físicos a los que se puede acceder a la asignación mediante (actualizando los miembros RangeSize y CPUTranslatedAddress de la estructura DXGKARG_ACQUIRESWIZZLINGRANGE en una llamada a la función DxgkDdiAcquireSwizzlingRange ). Cuando se especifica esta marca, el administrador de memoria de vídeo intenta asignar una nueva dirección virtual para controlar la solicitud de bloqueo en lugar de usar la dirección virtual del almacén de respaldo de asignación. Sin embargo, si el administrador de memoria de vídeo no puede asignar la nueva dirección virtual, se produce un error en la solicitud de bloqueo.

Esta marca también se usa para bloquear las asignaciones en mosaico o en mosaico que se encuentran actualmente en un segmento de apertura que no es AGP. En este tipo de bloqueo, el administrador de memoria de vídeo asigna la dirección virtual alternativa a un intervalo de direcciones físicos que se puede desenredar o hasta que se desenrede sobre la marcha y, a continuación, redirige el acceso de memoria a las páginas de memoria del sistema.

El administrador de memoria de vídeo crea la dirección virtual alternativa cuando la asignación se bloquea por primera vez con UseAlternateVA y libera la dirección virtual en uno de los escenarios siguientes:

  • La asignación no es accesible para la CPU y otra asignación libera el intervalo de desplazante para su reutilización.
  • La asignación no es accesible para la CPU y se está expulsando.
  • La asignación se está destruyendo.
  • La asignación se pagina después de expulsarla mientras está bajo bloqueo.
Tenga en cuenta que UseAlternateVA solo se puede usar en la asignación principal si la asignación principal se creó especificando la marca de campo de bits UseAlternateVA en el miembro Flags de la estructura DXGK_ALLOCATIONINFO en una llamada a la función DxgkDdiCreateAllocation del controlador de miniporte para mostrar. Una asignación principal que se crea de tal manera solo se puede bloquear con la marca UseAlternateVA .

UseAlternateVA no se puede usar en una asignación compartida.

Una asignación bloqueada con el conjunto UseAlternateVA no se puede volver a bloquear.

Nota Si el controlador de pantalla en modo de usuario ha establecido UseAlternateVA en el miembro Flags de la estructura de D3DDDICB_LOCKFLAGS durante una llamada a la función pfnLockCb , el controlador de miniport para mostrar no debe llamar a la función DxgkCbExcludeAdapterAccess .
 
Establecer este miembro equivale a establecer el décimo bit del miembro Value de 32 bits (0x00000200).

IgnoreReadSync

Valor UINT que especifica si el administrador de memoria de vídeo debe esperar solo a que se completen las operaciones de escritura de la unidad de procesamiento de gráficos (GPU) pendientes. Si se establece este miembro, no es necesario que el administrador de memoria espere a que se completen las operaciones de lectura de GPU. Es decir, en cuanto se complete la última operación de escritura de GPU, el bloqueo puede devolverse aunque la GPU siga leyendo de la asignación.

IgnoreReadSync solo se puede establecer con una asignación que se puede colocar en un segmento de apertura. No se puede establecer con una asignación desacertada o con una asignación almacenada en caché cuando el adaptador de gráficos no admite la coherencia de caché.

Establecer este miembro equivale a establecer el undécimo bit del miembro Value de 32 bits (0x00000400).

Reserved

Este miembro está reservado y debe establecerse en cero. Establecer este miembro en cero equivale a establecer los 21 bits restantes (0xFFFFF800) del miembro Value de 32 bits en ceros.

Value

Miembro de la unión contenida en D3DDDICB_LOCKFLAGS que puede contener un valor de 32 bits que identifica cómo bloquear una asignación.

Comentarios

Al usar una estructura de D3DDDICB_LOCKFLAGS para especificar cómo bloquear una asignación, debe cumplir las reglas siguientes:

  • La especificación simultánea de los miembros ReadOnly y WriteOnly no es válida.
  • El miembro IgnoreSync no tiene ningún efecto si se especifica con el miembro Descartar .
  • El miembro DonotWait no tiene ningún efecto si se especifica con el miembro Discard .
  • La especificación simultánea de los miembros IgnoreSync y AcquireAperture no es válida.
  • Dado que especificar el miembro UseAlternateVA indica que se adquiere una apertura, también se debe establecer el miembro AcquireAperture .
  • Las asignaciones retiradas o ofrecidas no se pueden bloquear. Consulte también Solicitud para cambiar el nombre de una asignación.
  • Una asignación solo se puede bloquear si se creó con el miembro CpuVisible establecido en la estructura DXGK_ALLOCATIONINFOFLAGS .
  • Solo el propietario (creador) de una asignación compartida puede bloquearlo, a menos que sea una asignación principal no administrada por GDI.
  • Se debe desbloquear una asignación bloqueada con un intervalo desbastado antes de que se pueda bloquear de nuevo.

Requisitos

Requisito Value
Cliente mínimo compatible Disponible en Windows Vista y versiones posteriores de los sistemas operativos Windows.
Encabezado d3dukmdt.h (incluya D3dukmdt.h)

Consulte también

D3DDDICB_LOCK

DXGK_ALLOCATIONINFOFLAGS

DxgkDdiAcquireSwizzlingRange

pfnLockCb