Nuevos tipos de recursos

Se han agregado varios tipos de recursos nuevos en Direct3D 11.

Búferes y texturas de lectura y escritura

Los recursos del modelo de sombreador 4 son de solo lectura. El modelo de sombreador 5 implementa un nuevo conjunto correspondiente de recursos de lectura y escritura:

Estos recursos requieren una variable de recurso para acceder a la memoria (a través de la indexación), ya que no hay métodos para acceder directamente a la memoria. Se puede usar una variable de recurso en los lados izquierdo y derecho de una ecuación; Si se usa en el lado derecho, el tipo de plantilla debe ser un solo componente (float, int o uint).

Búfer estructurado

Un búfer estructurado es un búfer que contiene elementos de igual tamaño. Use una estructura con uno o varios tipos de miembro para definir un elemento. Esta es una estructura con tres miembros.

struct MyStruct
{
    float4 Color;
    float4 Normal;
    bool isAwesome;
};

Use esta estructura para declarar un búfer estructurado como este:

StructuredBuffer<MyStruct> mySB;

Además de la indexación, un búfer estructurado admite el acceso a un único miembro de la siguiente manera:

float4 myColor = mySb[27].Color;

Use los siguientes tipos de objeto para acceder a un búfer estructurado:

Las funciones atómicas que implementan operaciones interbloqueadas se permiten en elementos int y uint en un RWStructuredBuffer.

Búfer de direcciones de bytes

Un búfer de direcciones de bytes es un búfer cuyo contenido se puede direccionar mediante un desplazamiento de bytes. Normalmente, el contenido de un búfer se indexa por elemento mediante un paso para cada elemento (S) y el número de elemento (N) según lo indicado por S*N. Un búfer de direcciones de bytes, que también se puede denominar búfer sin formato, usa un desplazamiento de valor de bytes desde el principio del búfer para acceder a los datos. El valor de byte debe ser un múltiplo de cuatro para que esté alineado con DWORD. Si se proporciona otro valor, el comportamiento no está definido.

El modelo de sombreador 5 presenta objetos para acceder a un búfer de direcciones de bytes de solo lectura, así como un búfer de direcciones de bytes de lectura y escritura. El contenido de un búfer de direcciones de bytes está diseñado para ser un entero de 32 bits sin signo; si el valor del búfer no es realmente un entero sin signo, use una función como asfloat para leerlo.

Búfer de acceso sin ordenar o textura

Un recurso de acceso sin ordenar (que incluye búferes, texturas y matrices de texturas, sin muestreo múltiple), permite el acceso temporal de lectura y escritura desordenado desde varios subprocesos. Esto significa que este tipo de recurso se puede leer y escribir simultáneamente en varios subprocesos sin generar conflictos de memoria mediante el uso de funciones atómicas.

Cree un búfer de acceso desordenado o una textura llamando a una función como ID3D11Device::CreateBuffer o ID3D11Device::CreateTexture2D y pasando la marca de D3D11_BIND_UNORDERED_ACCESS de la enumeración D3D11_BIND_FLAG .

Los recursos de acceso no ordenados solo se pueden enlazar a sombreadores de píxeles y sombreadores de proceso. Durante la ejecución, los sombreadores de píxeles o los sombreadores de proceso que se ejecutan en paralelo tienen enlazados los mismos recursos de acceso no ordenados.

Anexar y consumir búfer

Un búfer de anexión y consumo es un tipo especial de un recurso desordenado que admite la adición y eliminación de valores del final de un búfer similar a la forma en que funciona una pila.

Un búfer de anexión y consumo debe ser un búfer estructurado:

Use estos recursos a través de sus métodos; estos recursos no usan variables de recursos.

Información general del sombreador de proceso