Método ID3D12GraphicsCommandList1::SetSamplePositions (d3d12.h)
Este método configura las posiciones de ejemplo usadas por operaciones posteriores de dibujo, copia, resolución y similares.
Sintaxis
void SetSamplePositions(
[in] UINT NumSamplesPerPixel,
[in] UINT NumPixels,
[in] D3D12_SAMPLE_POSITION *pSamplePositions
);
Parámetros
[in] NumSamplesPerPixel
Tipo: UINT
SAL: In
Especifica el número de muestras que se van a tomar, por píxel. Este valor puede ser 1, 2, 4, 8 o 16; de lo contrario, se quita la llamada a SetSamplePosition. El número de muestras debe coincidir con el recuento de muestras configurado en el ESCENARIO en tiempo de dibujo; de lo contrario, el comportamiento no está definido.
[in] NumPixels
Tipo: UINT
SAL: In
Especifica el número de píxeles para los que se especifican patrones de ejemplo. Este valor puede ser 1 o 4; de lo contrario, se quita la llamada a SetSamplePosition. Un valor de 1 configura un único patrón de ejemplo que se usará para cada píxel; Un valor de 4 configura patrones de ejemplo independientes para cada píxel de una cuadrícula de 2 x 2 píxeles que se repite sobre el espacio de destino de representación o ventanilla, alineado a coordenadas uniformes.
Tenga en cuenta que el número máximo de muestras combinadas no puede superar los 16; de lo contrario, se quita la llamada. Si NumPixels está establecido en 4, NumSamplesPerPixel no puede especificar más de 4 muestras.
[in] pSamplePositions
Tipo: D3D12_SAMPLE_POSITION*
SAL: In_reads(NumSamplesPerPixel*NumPixels)
Especifica una matriz de elementos D3D12_SAMPLE_POSITION. El tamaño de la matriz es NumPixels * NumSamplesPerPixel. Si NumPixels se establece en 4, el primer grupo de posiciones de muestra corresponde al píxel superior izquierdo de la cuadrícula de 2x2 de píxeles; El siguiente grupo de posiciones de ejemplo corresponde al píxel superior derecho, al siguiente grupo al píxel inferior izquierdo y al grupo final al píxel inferior derecho.
Si se usa la interpolación centroide durante la representación, el orden de las posiciones de cada píxel determina la prioridad de muestreo centroid. Es decir, la primera muestra cubierta en el orden especificado se elige como ubicación de ejemplo centroide.
Valor devuelto
None
Observaciones
La semántica operativa de las posiciones de ejemplo viene determinada por las distintas operaciones de dibujo, copia, resolución y otras operaciones que pueden producirse.
CommandList: En ausencia de cualquier llamada anterior a SetSamplePositions en un CommandList, los ejemplos asumen la posición predeterminada basada en el objeto de estado de canalización (CLI). Las posiciones predeterminadas se determinan mediante la parte SAMPLE_DESC de la CLI si está presente, o por las posiciones de muestra estándar si la parte RASTERIZER_DESC de la CLI tiene ForcedSampleCount establecido en un valor mayor que 0.
Una vez que se haya llamado a SetSamplePosition, las llamadas a draw posteriores deben usar un RECUENTO de muestras coincidente que especifique un recuento de muestras coincidente mediante la parte SAMPLE_DESC de la CLI, o ForcedSampleCount en la parte RASTERIZER_DESC de la CLI.
Solo se puede llamar a SetSamplePositions en un commandList de gráficos. No se puede llamar en un lote; los conjuntos heredan el estado de posición de ejemplo de la clase CommandList que llama a y no lo modifican.
Al llamar a SetSamplePositions(0, 0, NULL) se revierten las posiciones de ejemplo a sus valores predeterminados.
Borrar RenderTarget: Las posiciones de ejemplo se omiten al borrar un destino de representación.
Clear DepthStencil: Al borrar la parte de profundidad de una superficie de galería de símbolos de profundidad o cualquier región de ella, las posiciones de ejemplo deben establecerse para que coincidan con las de la representación futura en la superficie o región borradas; el contenido de las regiones poco claras generadas mediante diferentes posiciones de ejemplo se vuelven indefinidos.
Al borrar la parte de la galería de símbolos de una superficie de galería de símbolos de profundidad o cualquier región de ella, se omiten las posiciones de ejemplo.
Dibujar en RenderTarget: Cuando se dibuja en un destino de representación, las posiciones de ejemplo se pueden cambiar para cada llamada de dibujo, incluso cuando se dibuja en una región que se superpone a las llamadas de dibujo anteriores. Las posiciones de ejemplo actuales determinan la semántica operativa de cada llamada de dibujo y las muestras se toman del contenido almacenado del destino de representación, incluso si el contenido se produjo mediante diferentes posiciones de ejemplo.
Dibujar con DepthStencil: Al dibujar en una superficie de galería de símbolos de profundidad (lectura o escritura) o en cualquier región de ella, las posiciones de ejemplo deben establecerse para que coincidan con las usadas para borrar la región afectada anteriormente. Para usar una posición de ejemplo diferente, primero se debe borrar la región de destino. Los píxeles fuera de la región clara no se ven afectados.
El hardware puede almacenar la parte de profundidad o una superficie de galería de símbolos de profundidad como ecuaciones de plano y evaluarlas para generar valores de profundidad cuando la aplicación emite una lectura. Solo se requieren rasterizadores y fusiones de salida para admitir posiciones de muestra programables de la parte de profundidad de una superficie de galería de símbolos de profundidad. Cualquier otra lectura o escritura de la parte de profundidad que se ha representado con posiciones de ejemplo establecidas puede omitirlas y, en su lugar, muestrear en las posiciones estándar.
Resuelva RenderTarget: Al resolver un destino de representación o cualquier región de ella, se omiten las posiciones de ejemplo; estas API solo funcionan en valores de color almacenados.
Resolución de la galería de símbolos de profundidad: Al resolver la parte de profundidad de una superficie de galería de símbolos de profundidad o cualquier región de ella, las posiciones de ejemplo deben establecerse para que coincidan con las de la representación pasada en la superficie o región resueltas. Para usar una posición de ejemplo diferente, primero se debe borrar la región de destino.
Al resolver la parte de la galería de símbolos de una superficie de galería de símbolos de profundidad o cualquier región de ella, se omiten las posiciones de muestra; la galería de símbolos solo funciona en valores de galería de símbolos almacenados.
Copie RenderTarget: Al copiar desde un destino de representación, las posiciones de ejemplo se omiten independientemente de si es una copia completa o parcial.
Copy DepthStencil (subrecurso completo): Al copiar un subrecurso completo desde una superficie de galería de símbolos de profundidad, las posiciones de ejemplo deben establecerse para que coincidan con las posiciones de ejemplo usadas para generar la superficie de origen. Para usar una posición de ejemplo diferente, primero se debe borrar la región de destino.
En algunas propiedades de hardware de la superficie de origen (como ecuaciones del plano almacenado para valores de profundidad) se transfieren al destino. Por lo tanto, si la superficie de destino se dibuja posteriormente, las posiciones de ejemplo usadas originalmente para generar el contenido de origen deben usarse con la superficie de destino. La API requiere esto en todo el hardware para la coherencia incluso si solo se puede aplicar a algunos.
Copy DepthStencil (Subbresource parcial): Al copiar un subrecurso parcial desde una superficie de galería de símbolos de profundidad, las posiciones de ejemplo deben establecerse para que coincidan con las posiciones de ejemplo usadas para generar la superficie de origen, de forma similar a copiar un subrecurso completo. Sin embargo, si el contenido de un subrecursos de destino afectado solo está cubierto parcialmente por la copia, el contenido de la parte descubierta dentro de esos subrecursos se vuelve indefinido a menos que se haya generado con las mismas posiciones de ejemplo que el origen de copia. Para usar una posición de ejemplo diferente, primero se debe borrar la región de destino.
Al copiar un subrecurso parcial desde la parte de galería de símbolos de una superficie de galería de símbolos de profundidad, se omiten las posciones de ejemplo. No importa qué posiciones de ejemplo se usaron para generar contenido para cualquier otra área del búfer de destino no cubierta por la copia; esos contenidos permanecen válidos.
SamplePos del sombreador: El intrínseco SamplePos de HLSL no es consciente de las posiciones de muestra programables y los resultados devueltos a sombreadores que llaman a esto en una superficie representada con posiciones programables no están definidas. Las aplicaciones deben pasar coordenadas a su sombreador manualmente si es necesario. De forma similar, la evaluación de atributos por índice de ejemplo no está definida con posiciones de ejemplo programables.
Transición fuera del estado de DEPTH_READ o DEPTH_WRITE: Si un subrecurso en DEPTH_READ o DEPTH_WRITE estado se pasa a cualquier otro estado, incluidos COPY_SOURCE o RESOLVE_SOURCE, es posible que algún hardware necesite descomprimir la superficie. Por lo tanto, las posiciones de ejemplo deben establecerse en la lista de comandos para que coincidan con las usadas para generar el contenido en la superficie de origen. Además, para las transiciones posteriores de la superficie, mientras que los mismos datos de profundidad permanecen en ella, las posiciones de ejemplo deben seguir coincidendo con las establecidas en la lista de comandos. Para usar una posición de ejemplo diferente, primero se debe borrar la región de destino.
Si una aplicación quiere minimizar el área descomprimida cuando solo es necesario usar una parte, o simplemente para conservar la compresión, se puede llamar a ResolveSubresourceRegion() en modo DECOMPRESS con un rect especificado. Esto descomprimirá solo el área pertinente para un recurso independiente dejando intacto el origen en algún hardware, aunque en otro hardware incluso el área de origen se descomprima. A continuación, el recurso independiente descomprimido se puede pasar al estado deseado (por ejemplo, SHADER_RESOURCE).
Transición fuera del estado de RENDER_TARGET: Si un subrecurso en RENDER_TARGET estado se pasa a cualquier cosa que no sea COPY_SOURCE o RESOLVE_SOURCE, es posible que algunas implementaciones necesiten descomprimir la superficie. Esta descompresión es independiente de las posiciones de ejemplo.
Si una aplicación quiere minimizar el área descomprimida cuando solo es necesario usar una parte, o simplemente para conservar la compresión, se puede llamar a ResolveSubresourceRegion() en modo DECOMPRESS con un rect especificado. Esto descomprimirá solo el área pertinente para un recurso independiente dejando intacto el origen en algún hardware, aunque en otro hardware incluso el área de origen se descomprima. A continuación, el recurso independiente descomprimido se puede pasar al estado deseado (por ejemplo, SHADER_RESOURCE).
Requisitos
Requisito | Value |
---|---|
Plataforma de destino | Windows |
Encabezado | d3d12.h |
Library | D3d12.lib |
Archivo DLL | D3d12.dll |