Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





OpenGL - Acceso al buffer interno de la textura

Iniciado por fiero, 26 de Diciembre de 2007, 11:10:44 PM

« anterior - próximo »

fiero

Yo creo que la razón fué para dar estabilidad y evitar errores "humanos". Es decir, OpenGL necesita una copia en RAM, ya que casi nunca caben todas las texturas en VRAM al mismo tiempo, por eso el driver se encarga de subir y bajar lo que sea necesario. Con la copia interna, se evitan errores como por ejemplo, que el usuario borre el buffer de la textura mientras se está usando.
www.videopanoramas.com Videopanoramas 3D player

Prompt

Vale a ver que ya se de que hablas... pero sigo teniendo una duda.

En principio, puedes usar GL_APPLE_client_storage en windows si está en el .h correspondiente. Aunque sea de APPLE y no sea del standart ARB nVidia y ATI le tienen que dar soporte para OSX.

Resulta que evidentemente en tu ATI de 128 MB no puede tener 400 MB de texturas por lo cual el driver guarda una copia en memoria de CPU siempre. ¿Cómo funciona esto?

En aplicaciones como "pix" o el perfHUD de nVIDIA puedes ver que cuando la memoria de la GPU está llena, tiene que ir vaciando y subiendo texturas a la memoria de la GPU para generar el frame que se le pide. Para esto sirve guardar esa copia que auto-gestiona el driver.

Lo que me sorprende es que esta copia se pueda desactivar. ¿Qué pasa si se copa la memoria de la GPU?
Me da por pensar que entonces el rendimiento cae, ya que 1º hace una copia de la textura en memoria de CPU y luego la borra de la memoria de la GPU.

Así que eso afecta al rendimiento. Evidentemente para tu aplicación pues tampoco es que el rendimiento sea un requisito primordial.

PD: con que has hecho ese plugin? es multiplataforma? está bien :)

fiero

Prompt, tienes el concepto algo confuso (te lo digo con todo el cariño ;) )

GL_APPLE_client_storage es una extensión, y como todas las extensiones, primero hay que comprobar que la tarjeta la soporta. Mi tarjeta no la soporta, y solo tiene un año.

OpenGL es una API que gestiona automáticamente la VRAM, por lo tanto OpenGL se encarga de llenar la memoria de GPU con lo que necesite (como tú has explicado). Pero, para funcionar de esta manera, OpenGL necesita la textura en RAM y VRAM. GL_APPLE_client_storage NO sirve para eliminar la copia en RAM, sino que sirve para no hacer una nueva copia y utilizar la del usuario. En el texto de la extensión está bien claro, en inglés, claro.

EL plugin es para Windows, está hecho en C++ (con VisualC6), pero estoy ahora convirtiendo algunas de mis funciones para compilarlo en Mac y Linux (por eso estoy con OpenGL ahora)

saludos!
www.videopanoramas.com Videopanoramas 3D player

Prompt

Si si, para no hacer el store... lo he expresado mal probablemente. No queria decir que con esa extensión se elimine. Directamente no se crea copia. Lo de eliminar viene por el supuesto mio, de lo que hará la tarjeta cuando no tenga espacio en la memoria de la GPU, 1º copia a memoria de CPU y luego borra la textura de la memoria de la GPU para poder subir más cosas a la tarjeta necesarias para hacer el frame pertinente.

Espero que me hayas entendido esta vez.

Es una pena que GL_APPLE_client_storage no esté soportado por tu tarjeta. Aunque más bien puede ser culpa del .h / driver de windows, porque la extensión es del 2002/08/27 y en OSX se usa. ¿Por qué no preguntas en el foro de nVidia?

fiero

Cita de: "Prompt"Lo de eliminar viene por el supuesto mio, de lo que hará la tarjeta cuando no tenga espacio en la memoria de la GPU, 1º copia a memoria de CPU y luego borra la textura de la memoria de la GPU para poder subir más cosas a la tarjeta necesarias para hacer el frame pertinente.

Si no tiene espacio en GPU, elimina la textura de GPU, no la copia a la memoria de CPU porque ya la tiene. Por lo que te entiendo, creo que piensas que cuando OpenGL sube una textura a GPU, la elimina de CPU, pero no es así. La copia de CPU siempre la tiene, ya sea en memoria que ha reservado OpenGL, o en memoria del usuario si usas GL_APPLE_client_storage.

Vete a saber, como no es una extension ARB igual han pasado de meterla. Quizás esté en OpenGL 2.0.

saludos!
www.videopanoramas.com Videopanoramas 3D player

marcode

Cita de: "fiero"Si no vas a modificar la textura, puedes eliminar tu copia (la 1), así liberas RAM.

Las pruebas:

Apple añadió una extensión para poder mantener la copia del usuario como copia de memoria de sistema manejada por OpenGL, para así ahorrarse el duplicado http://www.opengl.org/registry/specs/APPLE/client_storage.txt (En el "Overview" está explicado muy claro). El problema es que esta estensión no es muy común en windows, al menos mis drivers ATI no la soportan.

saludos!

sigo sin verlo claro y de todos modos dice que "algunas implementaciones mantiene la copia normalmente" pero no dice que siempre.

A lo mejor eso sucedía cuando la memoria VRAM era muy excasa y no existía el puerto AGP. Donde podías tener 8 MB de VRAM + 128 de RAM y las trasferencias PCI eran muy lentas. Entonces sí tiene sentido mantener la copia.

Pero actualmente algunos ordenadores pueden llegar a tener incluso más memoria residente VRAM + AGP que memoria de sistema libre, por lo que tener un duplicado de todas las texturas penalizaría los recursos gravemente.

Es probable que las implementaciones hayan evolucionado de manera que  las texturas más usadas permanecen en VRAM o AGP (que en la actualidad puede llegar hasta los 512 MB), y sean eliminadas de la memoria de sistema, y algunas texturas que no tienen preferencia y están siendo habitualmente subidas sí se conserven en la memoria de sistema.

No estoy seguro de todo esto, pero yo a ti si te veo muy seguro y a lo mejor tendrías asegurarte de cual es el mecanismo real de las actuales implementaciones de OpenGL en cuanto al mantenimiento de texturas porque lo de mantener por duplicado todas las texturas no lo acabo de ver claro.

Tal vez tendrías que chequear la memoria para saber qué está pasando realmente, el "Video Memory Watcher" está bien para verlo en tiempo real.
size=9]afortunadamente siempre ha habido alguien dispuesto a reinventar la rueda, de lo contrario seguiríamos usando un disco de piedra con un agujero.[/size]

Prompt

Me cago en la leche fiero que no nos estamos haciendo entender, rematemos ya:

Sin extension: al generar el primer frame por ejemplo...
- Copia en memoria de CPU.
- Se sube a la GPU.
- Copia en memoria de GPU.
- No hay memoria en GPU.
- Elimina algunas de la GPU.
- Sube las que sea de la CPU.
- Termina de generar el frame.

Con extension: al generar el primer frame por ejemplo...
- Se sube la textura a la GPU.
- No hay memoria en GPU.
- Copia algunas de las textura en memoria de CPU.
- Elimina algunas de la GPU.
- Sube las que sea de la CPU.
- Termina de generar el frame.

Conclusión, estoy seguro que al activar esa extensión el proceso en las situaciones peores para generar un frame va a ser más costoso :P


PD: por qué llamais a la memoria de la CPU, VRAM? no será por Virtual RAM? porque memoria virtual es la que se vuelca al HD haciendo el mismo proceso que describimos aqui con las texturas.

Zaelsius

Cuando decimos VRAM creo que nos referimos a Video RAM :D (o más 'modelnamente' GPU RAM), yo al menos.

Pogacha

Cita de: "marcode"A lo mejor eso sucedía cuando la memoria VRAM era muy excasa y no existía el puerto AGP. Donde podías tener 8 MB de VRAM + 128 de RAM y las trasferencias PCI eran muy lentas. Entonces sí tiene sentido mantener la copia.
En realidad es alrevez, he visto viejas implementaciones que no dejaban copia, las nuevas todas la dejan.

Que pasa, OpenGL debe seguir andando por mas que halla un cambio de resolución o por mas que otra aplicacion requiera el uso de la VRAM. DX tiene mensajes para mostrarte que la memoria de video se perdio y debe ser recargada, en OpenGL esto no existe, una lastima.

Saludos.

fiero

Hombre, es que si no tenemos claras las nomenglaturas normal que no se entienda. VRAM es toda la vida Video RAM http://es.wikipedia.org/wiki/VRAM , si se va a la pagina de ATI o Geforce a comprar una tarjeta, una de las caracteristicas principales es la VRAM.

saludos!
www.videopanoramas.com Videopanoramas 3D player

Prompt

El día que te vea fiero te voy a dejar yo clara la programación con OpenGL y el saber entender la lengua castellana mamoncete! te voy a dar yo a ti nomenclatura xD

Yo creo que en algun post nombrasteis memoria de CPU, VRAM y memoria de GPU. Y yo ya me hago viejo y escribiendo y leyendo post a ratos pos pasa lo que pasa xD


Resalto esto de la wikipedia:
"En un principio (procesadores de 8 bits) se llamaba así a la memoria sólo accesible directamente por el procesador gráfico, debiendo la CPU cargar los datos a través de él. Podía darse el caso de equipos con más memoria VRAM que RAM (como algunos modelos japoneses de MSX2, que contaban con 64 KiB de RAM y 128 KiB de VRAM)."

Hasta luego que me voy a desayunar! :P

davidgf

Hola!!!

Una pregunta que no me ha quedado clara. Al crear la textura OpenGL la copia. Así que yo puedo hacer free(buffer); en principio (lo he visto en todos los lados).

Eso es así en todas las implementaciones de OpenGL? Es que estoy haciendo un jueguecillo para la Dreamcast y me parece que la implementación de GL es un poco xapuza (no tienes más que 4 funciones básicas). Puedo borrar el buffer?? (el mio digo) O corro el riesgo que esta implementacion de GL se aopye en mi buffer para recargar la VRAM??

Si lo sabéis o me dáis una opinión me hacéis un favor!!!!

Gracias , David
Tàrraco: una aventura por la Tarragona romana (http://tarraco.davidgf.net)

fiero

Hola!!

Se me ocurre que si la consola tiene por ejemplo 8MB de VRAM, puedes subir una escena que ocupe más, para que se produzcan transferencias de memoria al mover la escena. Después puedes rellenar todas las texturas con un color plano (tus punteros *buffer), y si la escena permanece igual, es que está usando sus copias internas. Quizás una consola sea uno de los pocos casos en que la norma no se cumple, ya que la RAM es limitada. Si haces la prueba comentanos a ver que pasa.

saludos!
www.videopanoramas.com Videopanoramas 3D player

Pogacha

En realidad yo nunca lo supe, ni leyendo la documentación ni nada, es una duda que me queda.

davidgf

Buena idea fiero!!! No se me habría ocurrido...

Me parece que le mandaré un mail al autor o postearé en el foro preguntándole. Él lo sabrá mejor que nadie

Gracias!
Tàrraco: una aventura por la Tarragona romana (http://tarraco.davidgf.net)






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.