Tecnología, Internet y juegos
15 meneos
229 clics

¿Queréis saber qué es una API?¿Y la importancia de DirectX12?

Las librerías gráficas DirectX se actualizan cada cierto tiempo y, con ellas llegan una serie de mejoras en el rendimiento y la calidad gráfica de los títulos más punteros. Pero esta vez DirectX 12 no estará sola, ya que AMD ha creado su propia alternativa con Mantle, que asegura una mejor funcionalidad. ¿Qué ventajas tiene cada una? ¿Cómo se beneficiarán los PCs y las nuevas consolas de ello?

| etiquetas: fukuy , futuro técnico y gráfico de los videojuegos , directx12 , api
  1. y yo que pensaba que un API es un agente de la propiedad inmobiliaria je je. Lo que aprende uno cada día. fantástico artículo.
  2. y opengl no vale, cómo no es propietaria...

    desinformación.
  3. #0 Lo conoce todo el mundo, desde aquí hasta a Tombuctú... xD
  4. Si quereos una NVIDIA Volta, la primera arquitectura gráfica con soporte nativo para DirectX 12. "preparad la cartera"
  5. #0, lo tuyo no son las etiquetas xD xD xD
  6. Ya solo por la frase "API es el intérprete entre el motor de un juego y el hardware de una consola o PC" merece que no llegue a portada. Con lo fácil que es la típica analogía de que son las palanquitas, volantitos y botoncitos que mueven y dirigen el motor que hay debajo... (que si, que el que sabe puede manejar un motor sin necesidad de un cuadro de mandos, pero es más fácil y cómodo con las palanquitas). Y que directx y opengl son cuadros de mando hipercomplejos y con un montón de botones que pulsar para hacer cualquier cosa y que por ahí viene mantle, que propone cuadros más claros, con menos botones y que cada botón hace una o más acciones, evitando tener que conocer combinaciones de los mismos como antes... en fin.

    Luego para rematar, le echa la culpa del menor rendimiento de one respecto a play4 a las directx, cuando a una consola se la programa lo más a pelo posible, obviando directx y yendo al bajo nivel y sobre todo porque desde la mesa de diseño por componentes y demás ya se sabe que la play4 es más potente que la one (entre otras cosas porque el gran cuello de botella de las apus de amd es el ancho de banda de la memoria y ps4 tiene muchísimo más que one).
  7. ¿Una marca de foi-grass?
  8. #6 Espera a ver la diferencia en los gráficos en las dos consolas, yo creo que no será representativa de la mayor potencia gráfica de PS4.
  9. #9 Donde se nota un mayor ancho de banda es en la fluidez, no en la calidad de imagen (directamente), dado que montan idéntico chip con idénticas capacidades, pero (incluso con la liberación de potencia de no reservar nada para usar kinect) con menos unidades de procesamiento. Y en el apartado cpu la xbox tiene una cpu más rápida, pero igualmente con menos unidades de procesamiento (la rapidez en este caso podría compensar en tareas que requieran más potencia de un procesador y penalizar tareas que requieran distribuír más la potencia entre todos los procesadores, aunque de nuevo la diferencia en la práctica apenas se va a notar entre las consolas). Quizá aprovechen para meter algo más de carga gráfica o elevar mínimamente la resolución, pero será casi inapreciable a estas alturas, donde unos millones de polígonos más no se notan o un buen filtro hace inapreciable perder miles de pixels de resolución. De todos modos, busca cualquier análisis del impacto de la velocidad de la memoria en apus amd y verás que efectivamente hay una ganancia sustancial de rendimiento al subir esta y por ende aumentar el ancho de banda disponible (o sea, la memoria hace de cuello de botella).

    Xbox one contraataca la lentitud de la memoria poniendo una memoria intermedia ultrarápida que hace de caché (estrategia que se ha confirmado muy útil en otras consolas como gamecube, wii y xbox 360, y que se va a aplicar en futuras apus de amd para el mercado pc y servidores (eso si, con memorias más lentas y baratas, supongo que solo en el primer caso), pero la cantidad que han puesto no es suficiente para las necesidades de los programadores (también se quejaban de que era insuficiente en el caso de la 360, ojo, pero en aquel entonces la contienda era más pareja porque la play4 tenía un cuello de botella parecido en el acceso a los coprocesadores que integraba cell).

    Una vez visto que técnicamente realmente la ps4 si que es más potente (lo único donde la xbox tendría ventaja real es que el chip de audio está separado y no consumiría recursos cpu, mientras que la ps4 lo tiene unificado con el resto, pero incluso así la ps4 tendría ancho de banda más que suficiente para que meter el audio no afecte al rendimiento), te digo que efectivamente, la capacidad de procesamiento es tal que salvo que hagan chapuzas programando se podrá conseguir prácticamente lo mismo en cuanto a cantidad y calidad con ambas consolas, pero que siempre va a ir un poquito más suave en la play. La baza de xbox one…   » ver todo el comentario
  10. #11 ¿Qué es lo que he dicho yo arriba? eso mismo. Y cito "porque se encarga de minimizar el ancho de banda usado por las gráficas -que es su cuello de botella- y el overhead de la api". Si te piensas que la cantidad de instrucciones de la cpu a la gpu (el overhead, sobreuso de cpu en simular aspectos de apis antiguas/desfasadas o llamadas indirectas o repetitivas a cosas que una gpu puede hacer de manera más fácil y mejor) no afectan al ancho de banda (aumentando las latencias, ocupando espacio en los buses, redundancia de datos en memoria para poder hacer operaciones entre ellos) es porque no estás entendiendo nada de lo que digo.

    Ahora... ¿qué información errónea he dado sobre mantle? ¿por qué no me corriges?

    ¿y por qué mezclas churras con merinas? ahora mismo estás comparando amd con mantle con nvidia con procesadores intel sin venir a cuento solo para (no) explicar que las últimas versiones de otras apis ya disponen de optimizaciones similares y/o que otro hardware por potencia bruta es superior (y desde que salieron las apus, cualquier dedicada y cualquier procesador de gama media ya las superaban holgadamente, desde que se anunciaron las consolas de nueva generación ya se sabía que tendrían la potencia de un portátil por el hardware que iban a llevar, desde antes de que se anunciara mantle ya existía un debate en la comunidad opengl sobre el overhead que llevaba la api encima y lo ineficiente que podía llegar a ser en algunos casos). ¿No es más justo, fácil y COMPARABLE algo así como amd con mantle vs sin mantle? (porque no podemos comparar nvidia sin mantle vs nvidia con mantle o un ganancias de nvidia con mantle vs ganancias de amd con mantle)
  11. ¿Es un estándar abierto? No...pues ya sabéis el camino a casita...asco de producto comercial de directx
  12. #11 Aparte de que una cosa es la programación de shaders y otra cosa es meter una api compleja de por medio. Como bien sabrás, los shaders se compilan y se "cargan" en la tarjeta, pero es como cualquier otro lenguaje, si sabes lo que escribes puedes hacerlo a pelo y/o realizar optimizaciones específicas para tu hardware concreto (y dado que una consola es un hard cerrado, mejor que un compilador generalista que funciona sobre una amplia gama de hardware, buscas lo que más eficiente haga tu código; evidentemente en los sdk de las consolas habrá un compilador que las estruje todo lo posible). Luego, aparte de los shaders, está el resto de la api. No creo que en consolas encuentres un d3d o un opengl completo, como mucho parte de una implementación que se ajuste a tu hardware, quitando toda parte que sea "compatibilidad con versiones anteriores" o "características que no monte tu hardware". Incluso así, hay compañías que se crean sus propias herramientas, o sea, trabajan sobre el metal a pelo (el soporte y optimización de motores de middleware tipo unreal/unity/cryengine para consolas debe ser lo más eficiente posible, basan su prestigio en eso).

    Todo esto es para decirte que si, que la gran mayoría de los programadores no usan hard a pelo por la sencilla razón de que usan middlewares que ya les solucionan la papeleta, ni siquiera tiran de apis, usan frameworks ya hechos y dedican sus esfuerzos al scriptado y programación de otras cosas mientras le dejan el trabajo de diseñar shaders, texturas y escenarios a diseñadores. Pero los que realmente trabajan en motores propios de algo de nivel si que lo hacen, por mucho que a ti te parezca una burrada, lo mismo con los ingenieros de gráficos que luego optimizan los shaders y descubren y liman los cuellos de botella existentes y demás.
  13. #15 No tienen por qué programarse a pelo. HLSL son las siglas de "High Level" Shader Language, y es el lenguaje de shaders de microsoft. O sea, se compila para dar lenguaje a verdaderas instrucciones para la máquina. Y esto es así porque las GPU son unidades programables, como lo son las CPU.

    Y si, tanto el HSLS como el GLSL (GL Shading Language, la contrapartida de openGL) son en realidad los compiladores que traducen ese lenguaje a código GPU genérico (cada versión de los shaders tienen sus peculiaridades, pero todas las familias de tarjetas gráficas que las soportan comparten el mismo código compilado, con optimizaciones por familias o modelos, igual que las cpus van optimizadas por familias o modelos), y ese compilador va en los drivers de tus amadas tarjetas gráficas (¿no has leído nunca en ninguno de los juegos a los que juegas cuando cargan un nivel alguna frase similar a "compilando shaders"?). También existen compiladores alternativos, dado que hay otros lenguajes de shading por ahí. Nvidia presentó originalmente cg con sus geforce3, el primer lenguaje de definición de shaders antes de que surgieran los estándares para directX y openGL. Renderman tiene un lenguaje de shaders propio, así como Blender y otros programas de modelado, etc.
  14. #17 ya me estás diciendo que tienen características no estándares, que evidentemente no vienen en las apis estándares. Sobre lo de que Cg inspiró a GLSL... quizá deberías leer esto (scalibq.wordpress.com/2010/05/15/sony’s-playstation-3’s-main-graph): "...Cg, which was developed by nVidia and Microsoft, and is closely related to Direct3D’s HLSL, but NOT OpenGL’s GLSL"

    Te pongo un extracto de un texto interesante (lukasz.dk/playstation-2-programming/an-introduction-to-ps2dev/). Es sobre la play2, pero es extrapolable a hardware más reciente:

    "A funny thing about PS2DEV is that there probably is more source code for undocumented parts than there is for documented parts of the PS2. There is an ongoing joke among the most passionate PS2DEV developers, which is “We only to tools™”. What this refers to is that we only make low level tools for developers and not high level libraries which are easy to use. Since the core of PS2DEV (PS2SDK) developers has been more interested in low level programming, there have not been many graphics libraries for the PS2. I think the reason for this is that anyone who sat down and read the GS and VU manuals, would be able to do it and therefor it is not an interesting challenge, just hard work.

    The really hardcore PS2 developers would write custom graphics libraries which are specialized for every part of their application, to get the maximum performance out of the PS2, especially the VUs. Since the PS2 is so flexible it is very difficult to make a powerful graphics library which works well for everything."

    y sobre la play3, que ya tiene una GPU más parecida a los estándares actuales y sacado del primer enlace:

    "And in fact, many games don’t even use PSGL all that much, but use the lower-level LibGCM or go down to the bare metal themselves (the advantage of a console: hardware is fixed)."

    Entiendo que sobre la play4, que está más diseñada para que sea fácil programar para ella, en el inicio de ciclo se apoyen en apis del fabricante todo lo posible, pero según vayan conociendo las tripas, las compañías más gordas que quieran exprimir el hardware (y las que fabrican engines o middlewares ya lo están haciendo) van a ir a pelo en aquellas cosas que requieran un desempeño crítico.
  15. #19 Si no son de una generación ni de otra, no encajan ni en los drivers y apis de una ni de la otra, se tienen que ajustar las cosas porque su comportamiento es diferente, o sea, tienen características no estándares. Lo mismo que las gráficas dolphin y xenos eran tarjetas híbridas e intergeneracionales que no eran comparables con sus equivalentes en pc porque tenían características más avanzadas que la generación con la que coexistieron, pero quedaban desfasadas respecto a la generación siguiente.

    ¿Tu has leído los enlaces que te he pasado en serio? ¿dónde pone todo eso? ¿dónde están tus enlaces que corrigen lo que yo he puesto para hacer esas afirmaciones? ¿te has parado a pensar que todos esos datos erróneos, desactualizados y mentiras populares provienen de gente de la scene, que ha programado a pelo esas consolas y que conocen mejor sus tripas que tu y de gente que ha usado los sdks oficiales y sabe de lo que habla?

    Sobre lo del SO, todas las consolas actuales tienen un sistema operativo para gestionar los recursos, antes de manera muy básica, ahora con las capacidades multimedia, los dashboard y demás, de manera bastante más compleja. Las muy viejas pasaban con una simple BIOS, porque no necesitaban más. La api glide era única y exclusiva para hardware 3dfx, que salvo en algunas recreativas no se usó más allá del pc.
  16. >Tienen características estándares, el hardware es el mismo, los drivers son los mismos y la API es exactamente la misma.
    No, no lo son. Las características extra que tienen respecto al estándar no son las mismas que hay en la siguiente generación, entre otras cosas porque están adaptadas a las consolas y su contexto, mientras que las que lleven las tarjetas gráficas de la siguiente generación han sido pulidas y adaptadas a los pcs. Y se usan de manera diferente, así que las apis tienen que cambiar para reflejarlo. Y los drivers son muy diferentes porque:
    a) el hardware de consola es diferente. No es lo mismo hacer drivers para una arquitectura Intel de 32 bits que para una de 64 bits, que para una arquitectura IBM. Y no es lo mismo hacer drivers para una ps4 que para una xbox one, por el simple hecho de que tienen una arquitectura de memoria diferente (y seguro que más cosas, dado que es sabido que ambas tienen procesadores de apoyo y memorias extra que son diferentes entre ambas y que harán que la forma de acceder a los recursos varíe un tanto), aunque el resto de componentes sea prácticamente igual.

    >No sabes de qué estás hablando.
    Pasas de darme enlaces, pero no me dices en qué cosas estoy equivocado y por qué, simplemente sueltas el argumento de yo soy mejor que tu y tengo más conocimientos, sin siquiera demostrarlo con argumentos. Dame cualquier indicación de softwares que evitaban tener que hacer chapuzas a mano. Y luego dime cómo lo escribieron, porque antes de una librería o un lenguaje, hay que crearlos. Y luego asegúrame categóricamente que nadie ha tocado una línea de ensamblador en ps3 ni en xbox360, pero dándome datos. Ah, por cierto, aunque me vas a decir que nadie lo usa deberías mirar eprint.iacr.org/2012/137.pdf y renderingpipeline.com/graphics-literature/low-level-gpu-documentation/ pa hacerte una idea de cómo funciona la cosa de verdad.

    >Las consolas de generaciones anteriores no tenían ningún SO
    Si que ha habido máquinas anteriores a la play2 con SO ¿alguien ha dicho Dreamcast? querían incluírlo en la máquina, pero al final no viene en la máquina en si, sino en los discos de los juegos y aplicaciones (muchos traían una versión de windows ce preparada para usar directx). La xbox original también tenía SO, basado en win2000 antes de que apareciera la wii. Otras consolas tienen firmwares que hacen las veces de BIOS (que como sabrás son las rutinas básicas que permiten interactuar con el hardware y que realizan…   » ver todo el comentario
  17. #23 A ver, ¿en qué sentido piensas que uso "estandar"? ¿en el de "grupo de características iguales dentro de una familia" o en el de "especificaciones de la indústria"? si es lo segundo ganas tu, pero estarías retorciendo mis palabras para que signifiquen lo que a ti te da la gana. Sobre decir sandeces, ahí van otras pocas: estoy diciendo que hay dos familias, A y C, cada una con una serie de características comunes entre todos sus miembros. A tiene tres piernas y C tiene tres brazos. Los drivers son la ropa que llevan, así que los pantalones de A no le sirven a C y las camisas de C no le sirven a A. Y que enmedio han desarrollado B, que ni es A, ni es C, porque han llegado a la conclusión de que le sobra una pierna a A, pero aún no han aprendido a desarrollar el tercer brazo, así que le han incrustado un pie en el ombligo, pero con la nueva capacidad de "dedo pulgar oponible" que C implementará en la mano extra. O sea, tiene capacidades de C, es superior a A, pero ni le sirven los pantalones ni le sirve la camisa, hay que adaptar las cosas. Luego pueden aprovechar trabajo hecho en B para hacer los pantalones para C, pero la camisa hay que hacerla nueva. Conclusión: NO son los mismos drivers ni funcionan igual, ¿se puede reaprovechar código de unas generaciones a otras? si, siempre y cuando los cambios internos no sean demasiado drásticos, pero el driver cambia y mucho. Y más cuando estás creando un driver para un sistema y una arquitectura (de la máquina) distinta. Porque no es lo mismo un driver para una consola basada en windows que una consola basada en bsd, porque la arquitectura de memoria es diferente, así que el acceso a recursos también lo es.

    ¿La gente investiga porque le sale del alma o porque luego aplican esa investigación en el desarrollo de productos?

    Sobre Dreamcast y wince: www.segasaturno.com/portal/viewtopic.php?t=5724. Como ves, hay muchos juegos desarrollados sobre wince, y además del runtime tiene que haber alguien que gestione los recursos por debajo para que el runtime funcione (si, un wince optimizado para dreamcast). Que solo ejecute una tarea no quiere decir que debajo no haya un SO (mira si no los primeros iOS). BIOS es del género que me de la gana, si tu quieres que sea macho, pues chachi. BIOS es acrónimo de las rutinas básicas de entrada salida, como ves todo femenino.

    La BIOS son pequeñas rutinas tipo: activa el chip este, aplica configuración, ponlo en modo de…   » ver todo el comentario
  18. #25 No se usan igual porque no son iguales, no es un tenedor con menos dientes, si instalas unos drivers de A o de C para B cascará. No es "no puedo ejecutar funcionalidades que no tengo" sino que cascará porque internamente son diferentes aunque se basen en el mismo diseño, que no la misma arquitectura. Empezando porque tanto la ps4 como la xbox1 tienen una memoria diferente y una memoria extra, lo que cambia no solo la lógica de control de la memoria, sino su relación con el resto de componentes. Tu los metes en una misma familia, yo opino que los cambios son lo suficientemente importantes como para pensar que son familias distintas. Igual que la serie 5000 y la 6000 son revisiones de la misma familia, pero los cambios en la 6000 son suficientes como para separarlas. Como ya te he dicho, no es lo mismo adaptar una cosa que funciona parecida a decir: cojo los drivers y añado x pa usar nuevas funcionalidades y ya está. Es como cambiar el sentido de una calle en una ciudad. Parece un cambio chorra, pero no basta con eso, hay muchas partes que se ven afectadas con ese cambio tan tonto, tanto como para tener que reorganizar todo el tráfico. Se nota que has escrito muchos drivers para tener tan claro que yo estoy equivocado y no asumir que quizá tu estés simplificando absurdamente las cosas.

    Otro asunto: windows, linux y bsd tienen maneras completamente diferentes de acceder a los recursos de la máquina. Coge un driver linux e intenta hacerlo funcionar en bsd y verás que no puede. Y eso que son primos hermanos, y que bsd consigue soportar hardware gracias a que portan los mismos de linux. Ahora piensa en todas las diferencias arquitecturales que hay entre los drivers linux y los drivers windows. Compara los tamaños, pesos y dependencias entre drivers de linux y windows. Respóndeme por qué no están funcionales todas las funcionalidades que tienen los drivers de windows en linux si los drivers son iguales o comparten la mayor parte. Podríamos decir que hay un backend diferente por arquitectura y un frontend igual para todos, hasta ahí podría concedértelo, pero meter una capa de abstracción para aislar la arquitectura subyacente en algo tan delicado y que afecte al rendimiento tanto como unos drivers gráficos es bastante duro y arriesgado. Sería viable si windows y linux fueran más similares pero son demasiado disparejos: la gestión de memoria es diferente, la gestión energética es diferente, la gestión de los buses es diferente, la comunicación con…   » ver todo el comentario
  19. ¿qué me quieres decir con una lista de especificaciones? ¿no te he dicho ya que los cambios no están en las unidades de procesado sino en la organización de la memoria? ¿crees, por poner un ejemplo, que dos versiones de la misma tarjeta, una agp y una pci se comunican igual con el ordenador? ¿crees que acceden a la memoria del sistema del mismo modo, que usan los mismos comandos para el bus? ¿no? ¿y por qué piensas que internamente funcionan igual una tarjeta que tiene una memoria unificada esram programable (que puede hacer de caché compartida por todas las unidades de procesado o usarse independientemente) de una tarjeta que no dispone de lo mismo y que en cambio sustituye un controlador de memoria DDR3 por uno para GDDR5, que tienen velocidades, latencias, etc. distintas? ¿crees que solo hay que cambiar un par de parámetros y ya está? ¿te das cuenta de que para acceder a configuraciones hUMA con esram hay que cambiar completamente la forma que tienes de garantizar la coherencia de las cachés dado que hay un nivel de memoria más? ¿te das cuenta de que el que sea programable añade complejidad extra que no es una simple caché? ¿te das cuenta de que hay formas de almacenar geometrías demás datos que necesita la gráfica en una memoria aparte y que tienes que controlar todo el proceso? ¿te crees que no hay cambios más que significativos en los drivers para eso, crees que no hay cambios en las apis para soportar esas cosas? Que no es solo ejecutar ese comando, es cambiar la forma de hacer todos los direccionamientos de memoria. Y una vez más está el punto de que no se programan de la misma manera esos drivers en una consola basada en windows, que tiene su gestión de memoria que en una consola basada en bsd, que tiene otra distinta, y también hay que tener en cuenta que no toda la memoria está disponible para juegos, se reserva parte para aplicaciones, así que hay que gestionar la seguridad para que las aplicaciones no puedan leer partes de la memoria, esram o la caché y extraer información sobre juegos y viceversa. Una vez más, la xbox necesita más mecanismos para controlar lo que pasa en esram, o sea, más diferencias en el hardware y en la api.

    Muchos cambios que a ti te parecen triviales, porque te empeñas en señalar que las unidades de cómputo son iguales (y que por lo tanto el soporte vía drivers tengan una o dos más o menos es el mismo), y obvias aquello que las diferencia (y que las diferencia de otros sistemas no hUMA) que es la gestión de memoria).
comentarios cerrados

menéame