es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Algún API gráfico permite una ramificación eficiente por primitivas?

Cuando se escriben fragment shaders en OpenGL, se puede realizar una ramificación en constantes de tiempo de compilación, variables uniformes o variables varying.

La eficiencia de esta ramificación depende del hardware y la implementación del controlador, pero generalmente ramificar en una constante de tiempo de compilación es gratuito y ramificar en una variable uniforme es más rápido que en una variable varying.

En el caso de una variable varying, el rasterizador aún debe interpolar la variable para cada fragmento y la ramificación debe decidirse en cada ejecución familiar, incluso si el valor de la varying es el mismo para cada fragmento en la primitiva actual.

Lo que me pregunto es si alguna API de gráficos o extensión permite una ramificación de fragment shader que se ejecute solo una vez por primitiva rasterizada (o en el caso de renderizado por bloques, una vez por primitiva por bin).

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en OpenGL, rendering, DirectX, Metal y Vulkan, puedo confirmar que al escribir fragment shaders en OpenGL, se puede hacer una ramificación en constantes de tiempo de compilación, en variables uniform o en variables varying.

    El rendimiento de la ramificación depende del hardware y la implementación del controlador. Por lo general, la ramificación en una constante de tiempo de compilación es gratuita, y la ramificación en una variable uniform es más rápida que en una variable varying.

    Cuando se ramifica en una variable varying, el rasterizador todavía tiene que interpolar la variable para cada fragmento, y la ramificación se tiene que decidir en cada ejecución familiar, aunque el valor de la variable varying sea el mismo para cada fragmento en la primitiva actual. Esto puede afectar el rendimiento.

    Es posible que algunas APIs o extensiones gráficas permitan una ramificación del fragment shader que se ejecute solo una vez por primitiva rasterizada o una vez por primitiva por bin en el caso de renderizado en mosaico. Sin embargo, esto sería específico de cada API o extensión y requeriría una investigación adicional.

Comments are closed.