Tipos de dispositivo y requisitos de procesamiento de vértices (Direct3D 9)
El rendimiento de las operaciones de procesamiento de vértices, incluida la transformación y la iluminación, depende en gran medida de dónde existe el búfer de vértices en la memoria y del tipo de dispositivo de representación que se usa. Las aplicaciones controlan la asignación de memoria para los búferes de vértices cuando se crean. Cuando se establece la marca de memoria D3DPOOL_SYSTEMMEM, el búfer de vértices se crea en la memoria del sistema. Cuando se usa la marca de memoria D3DPOOL_DEFAULT, el controlador de dispositivo determina dónde se asigna mejor la memoria del búfer de vértices, a menudo denominada memoria óptima para el controlador. La memoria óptima del controlador puede ser memoria de vídeo local, memoria de vídeo no local o memoria del sistema.
Establecer la constante D3DUSAGE_SOFTWAREPROCESSING con IDirect3DDevice9::CreateVertexBuffer habilita el procesamiento de vértices de software en los datos del búfer de vértices. Esta marca es necesaria para el procesamiento de vértices de software mientras está en modo mixto. Es posible que la marca no se use para el modo de procesamiento de vértices de hardware. Los búferes de vértices usados con el procesamiento de vértices de software incluyen lo siguiente:
- Todos los flujos de entrada para IDirect3DDevice9::P rocessVertices.
- Todas las secuencias de entrada para IDirect3DDevice9::D rawPrimitive e IDirect3DDevice9::D rawIndexedPrimitive.
El razonamiento que se usa para determinar la ubicación de memoria ( sistema o controlador óptimo) para los búferes de vértices es el mismo que para las texturas. El procesamiento de vértices, incluida la transformación y la iluminación, funciona mejor cuando los búferes de vértices se asignan en memoria óptima del controlador, mientras que el procesamiento de vértices de software funciona mejor con los búferes de vértices asignados en la memoria del sistema. En el caso de las texturas, la rasterización de hardware funciona mejor cuando se asignan texturas en memoria óptima para controladores, mientras que la rasterización de software funciona mejor con texturas de memoria del sistema.
Microsoft Direct3D 9 admite el procesamiento independiente de vértices, sin representar ningún primitivo con el método IDirect3DDevice9::P rocessVertices . Este procesamiento de vértices independiente siempre se realiza en software en el procesador host. Por este motivo, los búferes de vértices usados como orígenes establecidos con IDirect3DDevice9::SetStreamSource deben crearse con la marca D3DUSAGE_SOFTWAREPROCESSING. La funcionalidad proporcionada por IDirect3DDevice9::P rocessVertices es idéntica a la de los métodos IDirect3DDevice9::D rawPrimitive e IDirect3DDevice9::D rawIndexedPrimitive mientras se usa el procesamiento de vértices de software.
Si la aplicación realiza su propio procesamiento de vértices y pasa vértices transformados, iluminados y recortados a los métodos de representación, la aplicación puede escribir directamente vértices en un búfer de vértices asignado en la memoria óptima del controlador. Esta técnica impide que se haga una operación de copia redundante más adelante. Tenga en cuenta que esta técnica no funcionará bien si la aplicación lee datos de nuevo desde un búfer de vértices, ya que las operaciones de lectura realizadas por el host desde la memoria óptima del controlador pueden ser muy lentas. Por lo tanto, si la aplicación necesita leer o escribir datos en el búfer de forma errática, un búfer de vértices de memoria del sistema es una mejor opción.
Al usar las características de procesamiento de vértices de Direct3D (pasando vértices no transformados a métodos de representación del búfer de vértices), el procesamiento puede producirse en hardware o software según el tipo de dispositivo y las marcas de creación de dispositivos. Se recomienda asignar búferes de vértices en el grupo D3DPOOL_DEFAULT para obtener el mejor rendimiento en prácticamente todos los casos. Cuando un dispositivo usa el procesamiento de vértices de hardware, hay una serie de optimizaciones adicionales que se pueden realizar en función de las marcas D3DUSAGE_DYNAMIC y D3DUSAGE_WRITEONLY. Vea IDirect3DDevice9::CreateVertexBuffer para obtener más información sobre el uso de estas marcas.
Temas relacionados