# [Radeon] Radeon HD 6310 60 FPS (Abierto)

## ZaPa

Hola a todos.

Por fin me he decidido a exponer mi problema y es que, simplemente no lo he hecho anteriormente por pereza porque llevo con esto bastante tiempo.

Tengo un laptop Acer el cual lleva un procesador con tarjeta gráfica integrada, en concreto una Radeon HD 6310, el caso es que, he seguido todo al pie de la letra respecto a la documentación de Radeon para gentoo.

lspci:

```
00:00.0 Host bridge: Advanced Micro Devices [AMD] Device 1510

00:01.0 VGA compatible controller: ATI Technologies Inc Device 9802

00:11.0 SATA controller: ATI Technologies Inc SB700/SB800 SATA Controller [AHCI mode]

00:12.0 USB Controller: ATI Technologies Inc SB700/SB800 USB OHCI0 Controller

00:12.2 USB Controller: ATI Technologies Inc SB700/SB800 USB EHCI Controller

00:13.0 USB Controller: ATI Technologies Inc SB700/SB800 USB OHCI0 Controller

00:13.2 USB Controller: ATI Technologies Inc SB700/SB800 USB EHCI Controller

00:14.0 SMBus: ATI Technologies Inc SBx00 SMBus Controller (rev 42)

00:14.2 Audio device: ATI Technologies Inc SBx00 Azalia (Intel HDA) (rev 40)

00:14.3 ISA bridge: ATI Technologies Inc SB700/SB800 LPC host controller (rev 40)

00:14.4 PCI bridge: ATI Technologies Inc SBx00 PCI to PCI Bridge (rev 40)

00:15.0 PCI bridge: ATI Technologies Inc Device 43a0

00:15.2 PCI bridge: ATI Technologies Inc Device 43a2

00:15.3 PCI bridge: ATI Technologies Inc Device 43a3

00:18.0 Host bridge: Advanced Micro Devices [AMD] Device 1700 (rev 43)

00:18.1 Host bridge: Advanced Micro Devices [AMD] Device 1701

00:18.2 Host bridge: Advanced Micro Devices [AMD] Device 1702

00:18.3 Host bridge: Advanced Micro Devices [AMD] Device 1703

00:18.4 Host bridge: Advanced Micro Devices [AMD] Device 1704

00:18.5 Host bridge: Advanced Micro Devices [AMD] Device 1718

00:18.6 Host bridge: Advanced Micro Devices [AMD] Device 1716

00:18.7 Host bridge: Advanced Micro Devices [AMD] Device 1719

06:00.0 Ethernet controller: Attansic Technology Corp. Device 2062 (rev c1)

07:00.0 Network controller: Atheros Communications Inc. Device 0032 (rev 01)

```

He activado el modulo en el kernel:

```

--- Direct Rendering Manager (XFree86 4.1.0 and higher DRI suppor│ │  

  │ │    < >   3dfx Banshee/Voodoo3+                                      │ │  

  │ │    < >   ATI Rage 128                                               │ │  

  │ │    <M>   ATI Radeon                                                 │ │  

  │ │    [*]     Enable modesetting on radeon by default - NEW DRIVER

```

He instalado el paquete de firmware para el modulo radeon, radeon-ucode:

```

[ebuild   R    ] x11-drivers/radeon-ucode-20110531  0 kB

```

Una vez instalado radeon-ucode he indicado dichos ficheros en el kernel en Generic Driver Options:

```

[*]   Include in-kernel firmware blobs in kernel binary          │ │  

  │ │    (radeon/RV630_me.bin radeon/RV630_pfp.bin) External firmware blob│

```

*(En realidad aqui no se exactamente que archivos debo añadir.

XORG.CONF

```

Section "ServerLayout"

   Identifier     "aticonfig Layout"

   Screen      0  "aticonfig-Screen[0]-0" 0 0

EndSection

Section "Module"

EndSection

Section "Monitor"

   Identifier   "aticonfig-Monitor[0]-0"

   Option       "VendorName" "ATI Proprietary Driver"

   Option       "ModelName" "Generic Autodetecting Monitor"

   Option       "DPMS" "true" 

EndSection

Section "Device"

   Identifier  "aticonfig-Device[0]-0"

   Driver      "radeon"

   BusID       "PCI:0:1:0"

        Option "EnablePageFlip" "True"

        Option "AccelDFS" "True"

        Option "AccelMethod" "EXA"

        Option "RenderAccel" "on"

        #Option "MigrationHeuristic" "greedy"

        Option "MigrationHeuristic" "always"

        Option "SwapbuffersWait" "off"

##        InputDevice "TouchPad" "CorePointer"

EndSection

Section "Screen"

   Identifier "aticonfig-Screen[0]-0"

   Device     "aticonfig-Device[0]-0"

   Monitor    "aticonfig-Monitor[0]-0"

   DefaultDepth     24

   SubSection "Display"

      Viewport   0 0

      Depth     24

   EndSubSection

EndSection

Section "InputDevice"

   Driver "synaptics"

   Identifier "TouchPad"

   Option "SendCoreEvents"

   Option "Protocol" "auto-dev"

   Option "SHMConfig" "on"

   Option "TapButton1" "1"

 EndSection

Section "DRI"

  Mode 0666

EndSection

```

GLXINFO:

http://pastebin.com/Zqtvp8DM

Por último el resutlado de glxgears:

```

Running synchronized to the vertical refresh.  The framerate should be

approximately the same as the monitor refresh rate.

298 frames in 5.0 seconds = 59.486 FPS

```

Si los videos y demás me funcionaran bien ignoraria por completo la salida de glxgears. Pero, el problema es que, cuando visualizo un video con vlc o cualquier otro reproductor en HD con muchos movimientos, la imagen "va a golpes" y supongo que será por eso.

Espero que me puedan ayudar.

Un saludo.

----------

## pelelademadera

proba con fglrx

----------

## cohone

Échale un vistazo a la salida del dmesg, porque me da que tu tarjeta no es una rv630, compruebalo.

En el dmesg te dirá qué ficheros del firmware no ha sido capaz de cargar.

Hace mucho que no instalo este driver, pero recuerdo haber tenido problemas con el directorio donde se guardan los firmware /lib/firmware, que no estaban los ficheros donde deberían estar... pero de eso hace ya mucho.

Y, otra cosa, mira a ver el resultado de "eselect opengl show" y elige uno de "eselect opengl list" (hablo de memoria, eh) y lo seleccionas con "eselect opengl set 'numero'"

Por otro lado el resultado de glxgears es normal, ya que tienes activada la sincronización vertical  y en ese caso los fps no superan la frecuencia del monitor, normalmente 60hz. Tal y como te dice el resultado que has posteado  :Razz: 

----------

## pelelademadera

cuando vsync esta activado en gral se clava en 60fps, 75fps o la actualizacion del moni, pero que ese chip grafico no sea capaz de hacer 60fps me da a que algo anda mal

----------

## Arctic

Yo uso una ATI 4290 integrada , he probado el driver propietario y el libre "radeon" 

Viendo estas dos tablas , deduzco que tu firmware es el evergreen:

http://en.wikipedia.org/wiki/Comparison_of_AMD_graphics_processing_units

http://www.x.org/wiki/RadeonFeature

Si has compilado correctamente el kernel con KMS y cargado el firmware correcto , no pierdas mucho el tiempo con el xorg.conf , haz el configure automatico :

```
X --config
```

y ya te deberia de generar solo y correctamente el archivo , lo unico comprueba que este radeon como driver como en la captura que has puesto.

La diferencia entre fglrx y radeon es bastante abultada , sobre todo en GL , aunque el glxgears no es valido como herramiente de benchmark si es algo orientativo :

Yo en mi tarjeta obtengo 4000 con fglrx y unos 900 con radeon , los juegos con radeon son imposibles ,por no hablar que provoca un calentamiento grande del chip.

En 2D la cosa esta mas igualada ,pero aun asi aunque el driver libre funciona mejor en ciertos aspectos pero no dispone de aceleracion de video por hardware (VA-API) , y en caso de no utilizar la API de intel para acelerar video , en un video HD el dirver libre con xv se lleva un 60% de cpu en mi caso cuando con el propietario no sube de un 15%

Ten en cuenta que en una tarjeta integrada como la nuestra el activar Vsync provoca una caida de rendimiento brutal , yo particularmente prefiero asumir cierto grado de desfragmentacion en la imagen que una bajada tan grande de rendimiento, el unico caso en el que se puede asumir es en videos hd donde no se nota tanto el perjuicio.

Del mismo modo deberias de obterner unos registros mejor que los mios ya que a priori tu tarjeta es mas potente que la mia .

Salu2

----------

## ZaPa

Hola.

Acabo de eliminar el driver libre y bajar el último driver propietario de la página web de ATI. También he hecho un Xorg -configure para que automáticamente me creará el archivo xorg.conf.

Pero sigo teniendo problemas y casi los mismos. Ahora glxgears me muestra alrededor de 1000fps pero en el tema de reproducción de videos con HD ya sea con flash player o vlc sigo teniendo problemas.

Estas son algunas lineas del log de Xorg:

```
[    36.172] (II) fglrx(0): Restoring Recent Mode via PCS is not supported in RANDR 1.2 capable environments

[    45.958] (II) fglrx(0): EDID vendor "LGD", prod id 732

[    45.958] (II) fglrx(0): Printing DDC gathered Modelines:

[    45.958] (II) fglrx(0): Modeline "1366x768"x0.0   70.00  1366 1402 1450 1492  768 771 776 782 -hsync -vsync (46.9 kHz)

[    45.970] (II) fglrx(0): EDID vendor "LGD", prod id 732

[    45.971] (II) fglrx(0): Printing DDC gathered Modelines:

[    45.971] (II) fglrx(0): Modeline "1366x768"x0.0   70.00  1366 1402 1450 1492  768 771 776 782 -hsync -vsync (46.9 kHz)

[    45.995] (II) fglrx(0): EDID vendor "LGD", prod id 732

[    45.995] (II) fglrx(0): Printing DDC gathered Modelines:

[    45.995] (II) fglrx(0): Modeline "1366x768"x0.0   70.00  1366 1402 1450 1492  768 771 776 782 -hsync -vsync (46.9 kHz)

[    46.031] (II) fglrx(0): EDID vendor "LGD", prod id 732

[    46.031] (II) fglrx(0): Printing DDC gathered Modelines:

[    46.031] (II) fglrx(0): Modeline "1366x768"x0.0   70.00  1366 1402 1450 1492  768 771 776 782 -hsync -vsync (46.9 kHz)

[    50.415] (II) fglrx(0): EDID vendor "LGD", prod id 732

[    50.415] (II) fglrx(0): Printing DDC gathered Modelines:

[    50.415] (II) fglrx(0): Modeline "1366x768"x0.0   70.00  1366 1402 1450 1492  768 771 776 782 -hsync -vsync (46.9 kHz)
```

Y un dmesg capturando la info relativa a fglrx.

```
[   16.486118] fglrx: module license 'Proprietary. (C) 2002 - ATI Technologies, Starnberg, GERMANY' taints kernel.

[   16.575716] [fglrx] Maximum main memory to use for locked dma buffers: 5506 MBytes.

[   16.575856] [fglrx]   vendor: 1002 device: 9802 count: 1

[   16.576904] [fglrx] ioport: bar 1, base 0x4000, size: 0x100

[   16.577916] [fglrx] Kernel PAT support is enabled

[   16.577966] [fglrx] module loaded - fglrx 8.96.4 [Apr  5 2012] with 1 minors

[   30.596470] [fglrx] ATIF platform detected with notification ID: 0x81

[   32.070435] fglrx_pci 0000:00:01.0: irq 40 for MSI/MSI-X

[   32.072092] [fglrx] Firegl kernel thread PID: 2386

[   32.072420] [fglrx] Firegl kernel thread PID: 2387

[   32.072729] [fglrx] Firegl kernel thread PID: 2388

[   32.072929] [fglrx] IRQ 40 Enabled

[   32.286407] [fglrx] Gart USWC size:1280 M.

[   32.286416] [fglrx] Gart cacheable size:508 M.

[   32.286427] [fglrx] Reserved FB block: Shared offset:0, size:1000000 

[   32.286432] [fglrx] Reserved FB block: Unshared offset:fbf1000, size:403000 

[   32.286437] [fglrx] Reserved FB block: Unshared offset:fff4000, size:c000 
```

eselect opengl list:

```
  [1]   xorg-x11 *

```

Con flashplayer a pequeña pantalla más o menos funciona correctamente. Cuando maximizo el video va con mucho retraso y los cambios de imagen se ven como a "fotogramas" se ve el cambio de una imagen a otro como a "franjas".

Con vlc no tan exagerado pero al reproducir un video con algo de movimiento, empieza a dar algo de "tirones" en la imagen.

**Hablo de videos en Alta definición. Aunque con flashplayer los videos con baja calidad en fullscreen también muestran el mismo problema.

Realmente estoy muy decepcionado con este laptop por estos problemas, no sé si será problema del procesador, de la gráfica, del driver gráfico... no tengo ni idea, pero me lleva de cabeza la verdad.

Espero me puedan ayudar.

Saludos.

----------

## cohone

No tengo mucha idea sobre como habilitar la aceleración gráfica para videos h264, pero creo que tienes que poner la use vaapi para compilar los codecs y reproductores con soporte de hw para ati. ¿la tienes ya?

Un "eselect opengl list" con el driver fglrx debe tener una opción ati o amd, por lo que deduzco que no estás usando el driver propietario correctamente

"bajar el driver propietario de la web de ati"? te refieres a un "emerge ati-drivers", verdad?

creo que además tienes que configurar el kernel para cambiar de drivers.

Aquí te explica como hacerlo: http://en.gentoo-wiki.com/wiki/Fglrx

----------

## Arctic

Hola ,

He estado haciendo unas pruebas con el driver libre y con fglrx y te comento varias correciones que he realizado que pueden interesar a mas de uno:

ATI ha dejado de dar soporte a las tarjetas de la rama HD4000 hacia abajo a partir del driver 12.4 , con lo cual el nuevo driver 12.6 ya no vale en esas tarjetas con la consecuencia de que no soportara los nuevos kernel ni los cambios ABI de xorg-server , desconozco si sacara una version legacy.

En primer lugar si usas el driver libre con KMS (kernel mode setting) no hace falta crear fichero xorg.conf ya que no lo necesita.

Si optas por usar el driver propietario ATI ha creado un script que se instala en /opt/bin que lo crea automaticamente se llama aticonfig , para crear el xorg.conf escribe esto:

```
/opt/bin/aticonfig --initial --input=/etc/X11/xorg.conf
```

Si cambias de un driver a otro debes de recompilar el xorg-server  junto a xf86-input-mouse , xf86-input-keyboard y xf86-input-evdev sino seguramente las X haran crash.

El opengl con fglrx lo tienes incorrecto porque has instaldo mal los drivers debe de estar asi:

```
eselect opengl list

Available OpenGL implementations:

  [1]   ati *

  [2]   xorg-x11

```

Y el xvmc asi:

```
eselect xvmc list

Available XvMC implementations  ( * is current ):

  [1]   xorg-x11

  [2]   ati *

```

y deberias usar una version 4* 3.* o 2.* segun lo que soporte tu tajeta :

```
glxinfo | grep version

server glx version string: 1.4

client glx version string: 1.4

GLX version: 1.4

OpenGL version string: 3.3.11631 Compatibility Profile Context

OpenGL shading language version string: 3.30

```

```
glxinfo | grep direct

direct rendering: Yes

```

Para fglrx si quieres poder ver bien los videos , depende de si tu tarjeta soporta uvd o uvd2 , si tu tarjeta no lo soporta se usara solo la cpu y si esta es lenta tendras tirones y mucha disipacion de calor.

Si tu tarjeta soporta aceleracion de video por hardware , entonces debes de usar VAAPI , añadela a tus USES en el make.conf y compuraba tambien que has añadido esta linea :

```
VIDEO_CARDS="fglrx"
```

 y haz un :

```
emerge   --update --deep --newuse world
```

depues emerge el VLC , vas a Herramientas/Preferencias/Videoy codecs/ y masrcas la casilla de acelracion por GPU.

hay varios paquetes que depende de vaapi y fglrx como son vlc, ffmpeg, libva ,etc....

Eso si fglrx es rapido , pero tiene tearing , el cual se puede solucinar a consta de perder rendimiento.

Si optas por el driver libre , ademas de lo que te he comentado mas arriba de evitarte el xorg.conf podras usar vdpau , que dentro de unos meses dara soporte de aceleracion de video por hardware utilizando mesa y gallium.

Los videos con Radeon van genial , no tienen tearing y el decode es rapido , mas o menos con los mismo recursos de uso de CPU que Vaapi por los test que he realizado, ambas soluciones son buenas.

Si tu CPU tiene varios nucleos te recomiendo que habilites threads a la hora de compilar ffmpeg.

En este momento las ventajas de fglrx:

-Compatibilidad con casi todos los juegos

-Vaapi

-Frames por segundo con tering

Radeon:

-KMS

-Menor uso de CPU en juegos

-Driver libres

-Tanto el video como los juegos tienen un buen rendimiento sin tering

-Con la ultima actualizacion de mesa soporta opengl 3.2 (hay que pasar variable de entorno pr que no viene activada por defecto)

Esto es una opinion personal , segun he realizado pruebas en mi tarjeta .

Un saludo

----------

## cohone

Pues como ya no hay soporte del driver privativo para mi tarjeta, una hd4850, he decidido poner el radeon. y me he llevado una muy agradable sorpresa al ver el increible aumento de rendimiento que han conseguido desde la última vez que lo probé.

Consigo 60fps constantes en el urban terror a 1080 y en alta calidad, muy suave. y si le quito el vsync fluctua entre 70-110...

En el glxgears sin vsync consigo más 2 2000 fps.

Aunque uno de los problemas que me he encontrado hasta que he conseguido deshabilitar el vsync son contantes bloqueos de varios segundos en kde muy muy desesperantes, pero ya se ha solucionado.

En un rato pongo cómo lo he deshabilitado, ya que es el tema principal del post.

----------------------------------------------------------------------------------------------------------

Edito para no poner otro post:

 *ZaPa wrote:*   

> 
> 
> He instalado el paquete de firmware para el modulo radeon, radeon-ucode:
> 
> ```
> ...

 

En mi caso he tenido que desinstalarlo e instalar el paquete linux-firmwares , que es donde venían para mi gráfica, una rv730

 *ZaPa wrote:*   

> 
> 
> Una vez instalado radeon-ucode he indicado dichos ficheros en el kernel en Generic Driver Options:
> 
> ```
> ...

 

Si pones el driver en el kernel como módulo no necesitas poner nada, el solo busca el firmware que necesita

 *ZaPa wrote:*   

> 
> 
> Por último el resutlado de glxgears:
> 
> ```
> ...

 

prueba a lanzarlo así: 

```
 vblank_mode=0 glxgears 
```

 (creo que era así)

Y para hacerlo para todo el sistema edita el /etc/driconf, para esto no se si es encesario emerger driconf

 *ZaPa wrote:*   

> 
> 
> Si los videos y demás me funcionaran bien ignoraria por completo la salida de glxgears. Pero, el problema es que, cuando visualizo un video con vlc o cualquier otro reproductor en HD con muchos movimientos, la imagen "va a golpes" y supongo que será por eso.
> 
> 

 

He comprobado con uno a 1080 y no va mal del todo...

----------

## Arctic

Radeon-ucode y linux-firmware son paquetes incompatibles para instalar al mismo tiempo , de echo uno bloquea al otro porque ambos instalan firmware común , aunque el más completo y recomendado es linux-firmware.De echo en el radeon-ucode faltan los firm de las tarjetas mas nuevas ,con el linux firmware además de todos los firm de las radeon te instala los de wifi, etc.........

El kernel lo tengo compilado directamente , lo que ocurre es que el firmare hay dos rutas que hay que especificar , en la de abajo se escribe la global:

```
/lib/firmware
```

y en la superior la especifica del firm que vamos a usar

```
radeon/elquesea
```

A mi el video no es que me vaya mal del todo me va perfecto , con vdpau genial y eso que tienen un bitrate muy alto en el caso de los blu-ray.

Para habilitar en las tarjetas hd4000 el soporte para opengl 3.2 hace falta :

```
env var R600_STREAMOUT=1
```

ya que no viene activada por defecto

Tambien existe un binario llamado radeontool , pero si lo pongo en debug me sale un segmentation fault que me quita las ganas de seguir. 

Salu2

----------

## gringo

tan sólo un detalle mas que he visto en el primer post:

 *Quote:*   

> <M>   ATI Radeon 

 

si aún lo tienes como módulo mejor mételo dentro del kernel (<*>), si no no va a funcionar a menos que uses un initrd o similares.

saluetes

----------

## ZaPa

Hola.

Lo primero, gracias a todos por vuestra ayuda e interes.

Comentar que, como dices gringo, he compilado el driver integrado en el kernel con (*) sin fijarlo como modulo, y al reiniciar en el arranque del kernel se a quedado con una ultima linea que decia algo similar a:

```
Switching to clocksoure tsc
```

O algo similar...al pasar unos segundos, han aparecido como unas rallas como con colores varios y se a quedado hay atrapado, hasta que he tenido que reiniciar, iniciar con el livecd de gentoo y volver a fijar el driver de radeon como modulo. No se que puede ocurrir aquí.

¿Es necesario SI O SI para el buen funcionamiento de este driver compilarlo integrado en el kernel sin hacerlo como modulo?

He borrado totalmente el paquete de radeon-ucode de mi sistema y he instalado linux-firmware, el comportamiento sigue siendo el mismo. Acabo de hacer la prueba con flash player en pantalla completa y va con algunos segundos de retraso la imagen del audio.

Debo señalar que utilizo un sistema operativo de 64bits y flashplayer a dado bastantes follones con esta arquitectura, no se si tendrá algo que ver.

Tambien he hecho de nuevo la instalación del plugin adobe-flash pero esta vez con la USE vdpau activada para activar la aceleración por hardware.

Todo sigue igual, sin ninguna mejora.

Aqui teneis la salida algunos de los comandos:

eselect xvmc list

```
!!! Error: Can't load module xvmc

exiting

```

glxinfo | grep version

```
server glx version string: 1.4

client glx version string: 1.4

GLX version: 1.4

OpenGL version string: 2.1 Mesa 7.11.2

OpenGL shading language version string: 1.20
```

glxinfo | grep direct

```
direct rendering: Yes
```

Aqui teneis las opciones que he cambiado del kernel (he probado a fijarlas por si mejoraba el rendimiento) ya que, me comentais arriba que compilando el driver Radeon como modulo el solo ya busca el fichero del firmware correspondiente.....

```
[*]   Include in-kernel firmware blobs in kernel binary          │ │  

  │ │    (radeon/JUNIPER_rlc.bin) External firmware blobs to build into th│ │  

  │ │    (/lib/firmware/) Firmware blobs root directory                   │ 
```

Saludos.

----------

## cohone

Hola.

intentaré responder alguna de tus preguntas.

No es necesario que compiles el driver en el kernel, solo que si lo haces sí que es obligatorio que incluyas los firmware correctos.

No hagas pruebas con flash player, hazlo con algún otro reproductor, que nos podemos volver locos sin motivo...

Sobre el módulo del xvmc, si tienes la use y has actualizado con emerge -N  world, comprueba que tienes instalado el app-admin/eselect-xvmc

Veo que usas la versión 7.11 de mesa. Yo estoy usando la keyword ~amd64, así que tengo una versión superior en prácticamente todo, en mesa, xorg, los drivers.... no se cuanto tiempo llevan con una aceleración 3d decente.

Saludos

----------

## Arctic

Zapa "creo" que estas cargando el firmware incorrecto , el que debes de cargar es evergreen (editado)* :

en mi caso si cargo directamente el firmware del chipset no funciona, tengo que cargar el R600_rlc.bin

tanto los manuales del wiki (oficial/no oficial) de gentoo  y el wiki oficial de freedesktop.org , radeon debe de ir compilado directamente el el kernel

Lo de flash-player yo uso la vresion de 64 bits y perfecto, eso si , carga todo el trabajo en la CPU no acelera graficamente para eso necesitas una tarjeta nvidia y usar la api vdpau , desconozco si el driver radeon sera capaz de usarla algun dia , lo que si sabemos es que Vaapi en un futuro cercano no lo va a tener.

El resultado del glxgears es normal ya que tienes activado vsync y no te va a pasar de 60 fps , pureba esto y dinos cuanto sacas aunque como ya se ha comentado  glxgears no es una herramienta de benchmarks , en mi caos da menos que ati , pero los juegos van mas fluidos que con Ati.

```
vblank_mode=0 glxgears
```

Salu2

----------

## ZaPa

 *Quote:*   

> tanto los manuales del wiki (oficial/no oficial) de gentoo y el wiki oficial de freedesktop.org , radeon debe de ir compilado directamente el el kernel 

 

Como comento arriba al compilarlo directamente con el kernel no me funciona..Voy a probar indicando el firmware correcto aver si es por eso.

Saludos.

----------

## Arctic

Por cierto que acabo de leerlo en un mensaje previo , la ultima version estable de mesa en gentoo es la 8.0.3 , altamente recomendable ya que es conpatible con OpenGl 3.0 , aunque la actualizacion que traera cambios de rendimiento mas notables de hasta un 30% sera la 8.1 que aun esta en el git inestable.

Cuando el firmware no esta disponible , deberia de arrancar igualmente , solo que se para durante 30 seg el arranque del kernel , pero despues continua automaticamente la carga , sin el firmware lo que ocurrre es que el rendimiento 3D cae mas de un 60% en mi caso.

Lo que puede ocasionar problemas es que tengas el modulo fglrx cargado , al no desinstalarlo ,fglrx y radeon son totalmente incompatibles y no deben estar instalados al mismo tiempo , y elimina el soporte agpgart ya que aveces da la lata y engrosa el kernel sin sentido.

Un saludo

----------

## ZaPa

Hola de nuevo y gracias por vuestra ayuda, os comento.

Acabo de integrar el driver radeon con el kernel y seguia sin arrancar, la solución a sido sencilla (a modo de ayuda):

```
radeon.modeset=0 en grub.conf
```

El problema es que sigo igual que antes, lo único que a cambiado son los valores de glxgears que ahora muestra unos 200/300FPS valores que a mi parecer son MUY bajos...

```

vblank_mode=0 glxgears

ATTENTION: default value of option vblank_mode overridden by environment.

1178 frames in 5.0 seconds = 235.535 FPS

1280 frames in 5.0 seconds = 255.821 FPS

1245 frames in 5.0 seconds = 248.865 FPS

XIO:  fatal IO error 11 (Resource temporari
```

La pregunta es... ¿Como se si el firmware que he indicado en el kernel es el correcto para mi tarjeta? ¿Como puedo saber cual es el que esta utilizando actualmente?

--------

EDITO: Como he dicho anteriormente, al integrar radeon en el kernel seguía sin arrancarme y se quedaba parado el arranque en 'Switching to clocksoure tsc..' y cuando pasaba un minuto más o menos la pantalla mostraba colores de todo tipo y rallas. El caso es que acabo de leer esto en el Wiki de radeon de X.org:

```
modprobe -v radeon modeset=1 <--- Load radeon kernel-module with KMS support
```

Yo lo he fijado con modeset=0 en grub.conf. ¿Esto significa que esta funcionando radeon sin soporte para KMS? ¿Puede afectarme esto en un rendimiento inferior?

Si os sirve de algo, aquí pego la info de: dmesg | egrep -i 'firmware|microcode'

```

[    0.179190] [Firmware Bug]: ACPI: BIOS _OSI(Linux) query ignored

[    0.662313] microcode: CPU0: patch_level=0x05000101

[    0.662404] microcode: CPU1: patch_level=0x05000101

[    0.662669] microcode: Microcode Update Driver: v2.00 <tigran@aivazian.fsnet.co.uk>, Peter Oruba
```

Saludos.

----------

## Arctic

Me he despistado no se porque pensaba que tu tarjeta era PCI-e y es una Fusion .en cualquier caso el kernel tiene que cargar al momento nada de esperas:

```
[    1.359004] microcode: CPU0: patch_level=0x010000bf

[    1.359067] microcode: CPU1: patch_level=0x010000bf

[    1.359118] microcode: CPU2: patch_level=0x010000bf

[    1.359172] microcode: CPU3: patch_level=0x010000bf

[    1.359236] microcode: CPU4: patch_level=0x010000bf

[    1.359301] microcode: CPU5: patch_level=0x010000bf

[    1.359397] microcode: Microcode Update Driver: v2.00 <tigran@aivazian.fsnet.co.uk>, Peter Oruba

[    1.736811] [drm] Loading RS780 Microcode

```

en tu caso el kernel no esta cargando ningun firmware de la grafica................

 , los FPS son muy bajos, mi tarjeta integrada no puede sacar casi 4 veces mas que la tuya:

```
5204 frames in 5.0 seconds = 1040.754 FPS

5380 frames in 5.0 seconds = 1075.534 FPS

5386 frames in 5.0 seconds = 1077.050 FPS

```

Tu tarjeta Hd 6310 es una R700  con CodName Wrestler , lo que ocurre es que no aparece ese firmware con ese nombre por ningun lado , he estado buscando firmware para las fusion y me aparecen los siguientes:

Turks para las nothern islands y las fusion c-series

Sumo y sumo2 viene para sólo para fusion sin especificar mas

En teoria deberia cargar el firmware adecuado ya que tu tarjeta se engloba dentro de las R700_rlc.bin pero al ser fusion igual cambia algo y no he visto demasiada documentacion al respecto, asi que puedes probar a cargar esos 2 firmwares a ver si alguno te soluciona, yo creo que al ser HD6000 es nothern island y deberia ser el Turks , en cualquier caso es una especualcion ya que no he encontrado nada al respecto que aclare todo esto.

Tambien seria recomendable que usases un kernel de lo mas reciente, segun he leido las R700 tendran soporte OpenGl 3 a partir del kernel 3.5, tambien es aconsejable usar las ultimas versiones de portage de xf86-video-ati y dri , ya que ahora mismo estan marcadas en la rama inestable por culpa de nouveau.

Para saber si estas usando kms :

```
dmesg | grep radeon

[    1.726968] [drm] radeon defaulting to kernel modesetting.

[    1.727009] [drm] radeon kernel modesetting enabled.

```

Si quieres saber para que es kms (kernel mode settings):

https://wiki.archlinux.org/index.php/Kernel_Mode_Setting

----------

## cohone

Como detalle... acabo de compilar el git-sources-3.5-0-rc5, y con la misma versión de mesa y xf86-video-ati (ambas la 9999, recompiladas al cambiar el kernel) consigo un aumento en glxgears impresionante, con el kernel gentoo-sources-3.4.4 no llegaba a las 2800 FPS y con el 3.5:

```
vblank_mode=0 glxgears

ATTENTION: default value of option vblank_mode overridden by environment.

ATTENTION: default value of option vblank_mode overridden by environment.

18672 frames in 5.0 seconds = 3734.295 FPS

24331 frames in 5.0 seconds = 4866.063 FPS

24162 frames in 5.0 seconds = 4832.260 FPS

24357 frames in 5.0 seconds = 4871.353 FPS

24222 frames in 5.0 seconds = 4844.395 FPS

```

Así que supongo que compararlo con el rendimiento de los paquetes estables que tienes instalados... a lo es que en esa versión no dan para más...

Ah, y en el kernel git, lo tengo como módulo, así que no te compliques, ponlo como módulo y marca lo de "enable kms by default" o pon lo del modesetting=1 en el grub y borra completamente el xorg.conf.

Después echa un vistazo en el dmesg a ver si hay errores, al glxinfo para ver si tienen direct rendering, y al /var/log/Xorg.0.log a ver si se carga todo ok.

Y por otro lado... no consigo habilitar el opengl3, solo llego a esto:

OpenGL vendor string: X.Org

OpenGL renderer string: Gallium 0.4 on AMD RV730

OpenGL version string: 2.1 Mesa 8.1-devel (git-14311ef)

OpenGL shading language version string: 1.30

Solo consigo pasar de OpenGL shading language version string: 1.20 a 1.30 con la variable    export R600_GLSL130=1

Y con export R600_GLSL130=1 se supone que se habilitaba opegl3, pero nada...

Si alguien sabe algo...

----------

## Arctic

 *cohone wrote:*   

> Como detalle... acabo de compilar el git-sources-3.5-0-rc5, y con la misma versión de mesa y xf86-video-ati (ambas la 9999, recompiladas al cambiar el kernel) consigo un aumento en glxgears impresionante, con el kernel gentoo-sources-3.4.4 no llegaba a las 2800 FPS y con el 3.5:
> 
> ```
> vblank_mode=0 glxgears
> 
> ...

 

Para usar OpenGl 3 debes usar tambien esta variable:

```
R600_STREAMOUT=1
```

La subida de rendimiento es algo mas de la esperada , ya que mesa 8.1 incorpora un nuevo parche de Vadim Girlin que lo mejora un 30%.

Espero mucho de este driver , mas que de fglrx porque en el estado actual de desarrollo para mi tarjeta ya mejora varios aspectos respecto al propietario y esto acaba de empezar ya que este año tendremos aceleracion de video por con gallium o incluso usando UVD ...............

Por cierto esos paquetes los has instalado de algun overlay no oficial verdad ?????? 

Salu2

----------

## cohone

Sí, tenia las dos variables,  pero me equivoqué en hacer el copy/paste.

uso el overlay x11

Por desgracia, el rendimiento ese que apuntaba antes es solo para el glxgears, porque en el urban terror me va igual que antes....o peor... pero es que ya he trasteado tanto...

voy a ver como va con el radeon.pcie_gen2=1 en el kernel, a ver qué hace...

----------

## ZaPa

Hola de nuevo.

Artic, mi VGA es integrada en CPU, este es mi procesador:

```
AMD E-300 APU with Radeon(tm) HD Graphics
```

salida de lspci:

```
00:01.0 VGA compatible controller: ATI Technologies Inc Device 9802
```

Acabo de hacer lo que comentas, probar esos archivos de firmware para la tarjeta y nada, sigue igual, no carga ningún firmware por eso el rendimiento deplorable de esta.. (supongo).

Cohone lo que comentas de compilar radeon como modulo si lo hago, los FPS se clavan en máximo 60 fps, no entiendo el porque de este comportamiento pero es así.

Saludos.

----------

## cohone

Lo de los FPS a 60 es que tienes activada la sincronización vertical, que sincroniza cada frame con con cada refresco del monitor, por defecto 60hz y por eso se te clava ahí...

Para deshabilitado en glxgears se hace ejecutando 

```
vblank_mode=0 glxgears
```

.

Supongo que como módulo sí que te carga el firmware, no? Céntrate en dejarlo operativo, que para incluirlo directamente en el kernel hay tiempo.

----------

## ZaPa

Hola de nuevo.

Supongo que será porque tengo activa la sincronización vertical, pero compilando radeon con el kernel este no ocurre.

De todas formas no me baso solamente en la salida de glxgears, ya qué, en un principio, cuando cree este post, radeon estaba compilado como modulo y el rendimiento era penoso en todo, flash, videos en vlc. ¿El problema? pues realmente no se cual puede ser, no se si tendrá algo que ver que la gráfica vaya integrada en la cpu y este driver no sea el apropiado para estas tarjetas gráficas.

Saludos.

----------

## Arctic

 *ZaPa wrote:*   

> Hola de nuevo.
> 
> Artic, mi VGA es integrada en CPU, este es mi procesador:
> 
> ```
> ...

 

Si , tu fusion es un "Zacate" y por lo que he leido AMD lo destina a portátiles , y confirma que el chip gráfico es "Evergreen" , aunque si comparamos la tabla de chip graficos con la de procesadores hay contradiciones ya que una dice que es Zacate y otra Westler , lo que si es seguro ya , es que al ser IGP ocurre lo mismo que en la mia , que aunque el nombre sea de la gama HD6000 (nothern islands) realmente es una evergreen (HD5000) salvo la version de UVD que al igual que la mia la tenemos superior al de nuestra serie.

Como curiosidad la HD 7350 que todos pensariamos que es una (southislands) es una Evergreen (creo que este ejemplo dice que no nos podemos fiar del nombre de la serie)

Al grano , segun la tabla oficial de radeon los firmwares para la gama evergreen son los siguientes:

```
Evergreen

CEDAR, REDWOOD, JUNIPER, CYPRESS, PALM (Wrestler), SUMO, SUMO2
```

Por lo que me has dicho has probado Sumo y sumo2 , con lo cual si realmente tu Fusion es Wrestler (como dice la wikipedia) deberias probar Palm ya que además es la unica alternativa que queda , porque el resto de las que aparecen en la tabla pertenecen a firmwares de tarjetas pci-e , lo que no tengo ni idea es de cuales son las diferencias de terminacion de los firmwares con el mismo nombre : me, pfp y rlc 

Lo que si para no andar probando puedes editar tu kernel y meter todos los posibles de golpe en vez de uno a uno, este es un ejemplo pero deberias sustituir los firmwares por los evergreen por ejemplo:

```
CONFIG_EXTRA_FIRMWARE="radeon/CEDAR_me.bin radeon/CEDAR_pfp.bin radeon/CEDAR_rlc.bin radeon/CYPRESS_me.bin radeon/CYPRESS_pfp.bin radeon/CYPRESS_rlc.bin radeon/JUNIPER_me.bin radeon/JUNIPER_pfp.bin radeon/JUNIPER_rlc.bin radeon/R600_rlc.bin radeon/R700_rlc.bin radeon/REDWOOD_me.bin radeon/REDWOOD_pfp.bin radeon/REDWOOD_rlc.bin"
```

Esta es la lista de todos los posibles para tarjetas radeon:

```
ls /lib/firmware/radeon

ARUBA_me.bin     JUNIPER_me.bin    REDWOOD_pfp.bin  RV770_me.bin

ARUBA_pfp.bin    JUNIPER_pfp.bin   REDWOOD_rlc.bin  RV770_pfp.bin

ARUBA_rlc.bin    JUNIPER_rlc.bin   RS600_cp.bin     SUMO2_me.bin

BARTS_mc.bin     PALM_me.bin       RS690_cp.bin     SUMO2_pfp.bin

BARTS_me.bin     PALM_pfp.bin      RS780_me.bin     SUMO_me.bin

BARTS_pfp.bin    PITCAIRN_ce.bin   RS780_pfp.bin    SUMO_pfp.bin

BTC_rlc.bin      PITCAIRN_mc.bin   RV610_me.bin     SUMO_rlc.bin

CAICOS_mc.bin    PITCAIRN_me.bin   RV610_pfp.bin    TAHITI_ce.bin

CAICOS_me.bin    PITCAIRN_pfp.bin  RV620_me.bin     TAHITI_mc.bin

CAICOS_pfp.bin   PITCAIRN_rlc.bin  RV620_pfp.bin    TAHITI_me.bin

CAYMAN_mc.bin    R100_cp.bin       RV630_me.bin     TAHITI_pfp.bin

CAYMAN_me.bin    R200_cp.bin       RV630_pfp.bin    TAHITI_rlc.bin

CAYMAN_pfp.bin   R300_cp.bin       RV635_me.bin     TURKS_mc.bin

CAYMAN_rlc.bin   R420_cp.bin       RV635_pfp.bin    TURKS_me.bin

CEDAR_me.bin     R520_cp.bin       RV670_me.bin     TURKS_pfp.bin

CEDAR_pfp.bin    R600_me.bin       RV670_pfp.bin    VERDE_ce.bin

CEDAR_rlc.bin    R600_pfp.bin      RV710_me.bin     VERDE_mc.bin

CYPRESS_me.bin   R600_rlc.bin      RV710_pfp.bin    VERDE_me.bin

CYPRESS_pfp.bin  R700_rlc.bin      RV730_me.bin     VERDE_pfp.bin

CYPRESS_rlc.bin  REDWOOD_me.bin    RV730_pfp.bin    VERDE_rlc.bin

```

 *cohone wrote:*   

> Sí, tenia las dos variables,  pero me equivoqué en hacer el copy/paste.
> 
> uso el overlay x11
> 
> Por desgracia, el rendimiento ese que apuntaba antes es solo para el glxgears, porque en el urban terror me va igual que antes....o peor... pero es que ya he trasteado tanto...
> ...

 

Yo he estado probando y tampoco se me activa OpenGl 3 , hace dias abri un topic al respecto , pero de momento no se ha aclarado nada y existe controversia al respecto.

En cambio yo solo obtengo 75 fps mas en el glxgears , eso si no he perdido rendimiento ninguno en el Urban Terror, lo que si existe un bug con la ultima version de xorg-server que se nota en juegos como el enemy territory al cambiar weapons con la rueda del mouse , al hacer un dowgrade del mismo este fallo desaparece.

Salu2

----------

## Arctic

El parche en cuestión es este:

```
Fixes fbo-clear-formats, fbo-generatemipmap-formats, no regressions on

evergreen

 src/gallium/drivers/r600/evergreen_state.c |    5 +-

 src/gallium/drivers/r600/r600_blit.c       |   21 +++---

 src/gallium/drivers/r600/r600_pipe.h       |    4 +-

 src/gallium/drivers/r600/r600_resource.h   |    6 +-

 src/gallium/drivers/r600/r600_state.c      |    2 +-

 src/gallium/drivers/r600/r600_texture.c    |  106 ++++++++++++++++------------

 6 files changed, 83 insertions(+), 61 deletions(-)

diff --git a/src/gallium/drivers/r600/evergreen_state.c b/src/gallium/drivers/r600/evergreen_state.c

index f0fdd2b..2aa5ccb 100644

--- a/src/gallium/drivers/r600/evergreen_state.c

+++ b/src/gallium/drivers/r600/evergreen_state.c

@@ -988,7 +988,7 @@ static struct pipe_sampler_view *evergreen_create_sampler_view(struct pipe_conte

    }

 

    if (tmp->is_depth && !tmp->is_flushing_texture) {

-      r600_init_flushed_depth_texture(ctx, texture);

+      r600_init_flushed_depth_texture(ctx, texture, NULL);

       tmp = tmp->flushed_depth_texture;

       if (!tmp) {

          FREE(view);

@@ -1314,7 +1314,8 @@ static void evergreen_cb(struct r600_context *rctx, struct r600_pipe_state *rsta

       rctx->have_depth_fb = TRUE;

 

    if (rtex->is_depth && !rtex->is_flushing_texture) {

-           r600_init_flushed_depth_texture(&rctx->context, state->cbufs[cb]->texture);

+      r600_init_flushed_depth_texture(&rctx->context,

+                 state->cbufs[cb]->texture, NULL);

       rtex = rtex->flushed_depth_texture;

       assert(rtex);

    }

diff --git a/src/gallium/drivers/r600/r600_blit.c b/src/gallium/drivers/r600/r600_blit.c

index 031cd39..90d1992 100644

--- a/src/gallium/drivers/r600/r600_blit.c

+++ b/src/gallium/drivers/r600/r600_blit.c

@@ -114,13 +114,17 @@ static unsigned u_num_layers(struct pipe_resource *r, unsigned level)

    }

 }

 

-void r600_blit_uncompress_depth(struct pipe_context *ctx, struct r600_resource_texture *texture)

+void r600_blit_uncompress_depth(struct pipe_context *ctx,

+      struct r600_resource_texture *texture,

+      struct r600_resource_texture *staging)

 {

    struct r600_context *rctx = (struct r600_context *)ctx;

    unsigned layer, level;

    float depth = 1.0f;

+   struct r600_resource_texture *flushed_depth_texture = staging ?

+         staging : texture->flushed_depth_texture;

 

-   if (!texture->dirty_db)

+   if (!staging && !texture->dirty_db)

       return;

 

    if (rctx->family == CHIP_RV610 || rctx->family == CHIP_RV630 ||

@@ -141,10 +145,10 @@ void r600_blit_uncompress_depth(struct pipe_context *ctx, struct r600_resource_t

 

          zsurf = ctx->create_surface(ctx, &texture->resource.b.b, &surf_tmpl);

 

-         surf_tmpl.format = texture->flushed_depth_texture->real_format;

+         surf_tmpl.format = flushed_depth_texture->real_format;

          surf_tmpl.usage = PIPE_BIND_RENDER_TARGET;

          cbsurf = ctx->create_surface(ctx,

-               (struct pipe_resource*)texture->flushed_depth_texture, &surf_tmpl);

+               (struct pipe_resource*)flushed_depth_texture, &surf_tmpl);

 

          r600_blitter_begin(ctx, R600_DECOMPRESS);

          util_blitter_custom_depth_stencil(rctx->blitter, zsurf, cbsurf, rctx->custom_dsa_flush, depth);

@@ -155,7 +159,8 @@ void r600_blit_uncompress_depth(struct pipe_context *ctx, struct r600_resource_t

       }

    }

 

-   texture->dirty_db = FALSE;

+   if (!staging)

+      texture->dirty_db = FALSE;

 }

 

 void r600_flush_depth_textures(struct r600_context *rctx)

@@ -178,7 +183,7 @@ void r600_flush_depth_textures(struct r600_context *rctx)

       if (tex->is_flushing_texture)

          continue;

 

-      r600_blit_uncompress_depth(&rctx->context, tex);

+      r600_blit_uncompress_depth(&rctx->context, tex, NULL);

    }

 

    /* also check CB here */

@@ -192,7 +197,7 @@ void r600_flush_depth_textures(struct r600_context *rctx)

       if (tex->is_flushing_texture)

          continue;

 

-      r600_blit_uncompress_depth(&rctx->context, tex);

+      r600_blit_uncompress_depth(&rctx->context, tex, NULL);

    }

 }

 

@@ -342,7 +347,7 @@ static void r600_resource_copy_region(struct pipe_context *ctx,

    }

 

    if (rsrc->is_depth && !rsrc->is_flushing_texture)

-      r600_texture_depth_flush(ctx, src);

+      r600_texture_depth_flush(ctx, src, NULL);

 

    restore_orig[0] = restore_orig[1] = FALSE;

 

diff --git a/src/gallium/drivers/r600/r600_pipe.h b/src/gallium/drivers/r600/r600_pipe.h

index 82c4a12..032a6ec 100644

--- a/src/gallium/drivers/r600/r600_pipe.h

+++ b/src/gallium/drivers/r600/r600_pipe.h

@@ -426,7 +426,9 @@ void evergreen_update_dual_export_state(struct r600_context * rctx);

 

 /* r600_blit.c */

 void r600_init_blit_functions(struct r600_context *rctx);

-void r600_blit_uncompress_depth(struct pipe_context *ctx, struct r600_resource_texture *texture);

+void r600_blit_uncompress_depth(struct pipe_context *ctx,

+      struct r600_resource_texture *texture,

+      struct r600_resource_texture *staging);

 void r600_flush_depth_textures(struct r600_context *rctx);

 

 /* r600_buffer.c */

diff --git a/src/gallium/drivers/r600/r600_resource.h b/src/gallium/drivers/r600/r600_resource.h

index 13fce00..c02fae1 100644

--- a/src/gallium/drivers/r600/r600_resource.h

+++ b/src/gallium/drivers/r600/r600_resource.h

@@ -88,9 +88,11 @@ static INLINE struct r600_resource *r600_resource(struct pipe_resource *r)

 }

 

 void r600_init_flushed_depth_texture(struct pipe_context *ctx,

-                 struct pipe_resource *texture);

+                 struct pipe_resource *texture,

+                 struct r600_resource_texture **staging);

 void r600_texture_depth_flush(struct pipe_context *ctx,

-               struct pipe_resource *texture);

+               struct pipe_resource *texture,

+               struct r600_resource_texture **staging);

 

 /* r600_texture.c texture transfer functions. */

 struct pipe_transfer* r600_texture_get_transfer(struct pipe_context *ctx,

diff --git a/src/gallium/drivers/r600/r600_state.c b/src/gallium/drivers/r600/r600_state.c

index bb72bf8..96344fe 100644

--- a/src/gallium/drivers/r600/r600_state.c

+++ b/src/gallium/drivers/r600/r600_state.c

@@ -1000,7 +1000,7 @@ static struct pipe_sampler_view *r600_create_sampler_view(struct pipe_context *c

    }

 

    if (tmp->is_depth && !tmp->is_flushing_texture) {

-      r600_init_flushed_depth_texture(ctx, texture);

+      r600_init_flushed_depth_texture(ctx, texture, NULL);

       tmp = tmp->flushed_depth_texture;

       if (!tmp) {

          FREE(view);

diff --git a/src/gallium/drivers/r600/r600_texture.c b/src/gallium/drivers/r600/r600_texture.c

index 2368126..e24fcb3 100644

--- a/src/gallium/drivers/r600/r600_texture.c

+++ b/src/gallium/drivers/r600/r600_texture.c

@@ -298,7 +298,8 @@ static int r600_init_surface(struct radeon_surface *surface,

    if (ptex->bind & PIPE_BIND_SCANOUT) {

       surface->flags |= RADEON_SURF_SCANOUT;

    }

-   if (util_format_is_depth_and_stencil(ptex->format) && !is_transfer) {

+   if ((ptex->bind & PIPE_BIND_DEPTH_STENCIL) &&

+         util_format_is_depth_and_stencil(ptex->format) && !is_transfer) {

       surface->flags |= RADEON_SURF_ZBUFFER;

       surface->flags |= RADEON_SURF_SBUFFER;

    }

@@ -517,7 +518,7 @@ r600_texture_create_object(struct pipe_screen *screen,

    rtex->real_format = base->format;

 

    /* We must split depth and stencil into two separate buffers on Evergreen. */

-   if (!(base->flags & R600_RESOURCE_FLAG_TRANSFER) &&

+   if ((base->bind & PIPE_BIND_DEPTH_STENCIL) &&

        ((struct r600_screen*)screen)->chip_class >= EVERGREEN &&

        util_format_is_depth_and_stencil(base->format) &&

        !rscreen->use_surface_alloc) {

@@ -561,7 +562,8 @@ r600_texture_create_object(struct pipe_screen *screen,

    }

 

    /* only mark depth textures the HW can hit as depth textures */

-   if (util_format_is_depth_or_stencil(rtex->real_format) && permit_hardware_blit(screen, base))

+   if (util_format_is_depth_or_stencil(rtex->real_format) &&

+         permit_hardware_blit(screen, base))

       rtex->is_depth = true;

 

    r600_setup_miptree(screen, rtex, array_mode);

@@ -729,12 +731,15 @@ struct pipe_resource *r600_texture_from_handle(struct pipe_screen *screen,

 }

 

 void r600_init_flushed_depth_texture(struct pipe_context *ctx,

-                 struct pipe_resource *texture)

+                 struct pipe_resource *texture,

+                 struct r600_resource_texture **staging)

 {

    struct r600_resource_texture *rtex = (struct r600_resource_texture*)texture;

    struct pipe_resource resource;

+   struct r600_resource_texture **flushed_depth_texture = staging ?

+         staging : &rtex->flushed_depth_texture;

 

-   if (rtex->flushed_depth_texture)

+   if (!staging && rtex->flushed_depth_texture)

       return; /* it's ready */

 

    resource.target = texture->target;

@@ -745,32 +750,44 @@ void r600_init_flushed_depth_texture(struct pipe_context *ctx,

    resource.array_size = texture->array_size;

    resource.last_level = texture->last_level;

    resource.nr_samples = texture->nr_samples;

-   resource.usage = PIPE_USAGE_DYNAMIC;

-   resource.bind = texture->bind | PIPE_BIND_DEPTH_STENCIL;

-   resource.flags = R600_RESOURCE_FLAG_TRANSFER | texture->flags;

+   resource.usage = staging ? PIPE_USAGE_DYNAMIC : PIPE_USAGE_DEFAULT;

+   resource.bind = texture->bind & ~PIPE_BIND_DEPTH_STENCIL;

+   resource.flags = texture->flags;

+

+   if (staging)

+      resource.flags |= R600_RESOURCE_FLAG_TRANSFER;

+   else

+      rtex->dirty_db = TRUE;

 

-   rtex->flushed_depth_texture = (struct r600_resource_texture *)ctx->screen->resource_create(ctx->screen, &resource);

-   if (rtex->flushed_depth_texture == NULL) {

-      R600_ERR("failed to create temporary texture to hold untiled copy\n");

+   *flushed_depth_texture = (struct r600_resource_texture *)ctx->screen->resource_create(ctx->screen, &resource);

+   if (*flushed_depth_texture == NULL) {

+      R600_ERR("failed to create temporary texture to hold flushed depth\n");

       return;

    }

 

-   ((struct r600_resource_texture *)rtex->flushed_depth_texture)->is_flushing_texture = TRUE;

+   (*flushed_depth_texture)->is_flushing_texture = TRUE;

+

 }

 

 void r600_texture_depth_flush(struct pipe_context *ctx,

-               struct pipe_resource *texture)

+               struct pipe_resource *texture,

+               struct r600_resource_texture **staging)

 {

    struct r600_resource_texture *rtex = (struct r600_resource_texture*)texture;

 

-   r600_init_flushed_depth_texture(ctx, texture);

+   r600_init_flushed_depth_texture(ctx, texture, staging);

 

-   if (!rtex->flushed_depth_texture)

-      return; /* error */

+   if (staging) {

+      if (!*staging)

+         return; /* error */

 

-   /* XXX: only do this if the depth texture has actually changed:

-    */

-   r600_blit_uncompress_depth(ctx, rtex);

+      r600_blit_uncompress_depth(ctx, rtex, *staging);

+   } else {

+      if (!rtex->flushed_depth_texture)

+         return; /* error */

+

+      r600_blit_uncompress_depth(ctx, rtex, NULL);

+   }

 }

 

 /* Needs adjustment for pixelformat:

@@ -834,15 +851,18 @@ struct pipe_transfer* r600_texture_get_transfer(struct pipe_context *ctx,

       */

       /* XXX: when discard is true, no need to read back from depth texture

       */

-      r600_texture_depth_flush(ctx, texture);

-      if (!rtex->flushed_depth_texture) {

+      struct r600_resource_texture *staging_depth;

+

+      r600_texture_depth_flush(ctx, texture, &staging_depth);

+      if (!staging_depth) {

          R600_ERR("failed to create temporary texture to hold untiled copy\n");

          pipe_resource_reference(&trans->transfer.resource, NULL);

          FREE(trans);

          return NULL;

       }

-      trans->transfer.stride = rtex->flushed_depth_texture->pitch_in_bytes[level];

-      trans->offset = r600_texture_get_offset(rtex->flushed_depth_texture, level, box->z);

+      trans->transfer.stride = staging_depth->pitch_in_bytes[level];

+      trans->offset = r600_texture_get_offset(staging_depth, level, box->z);

+      trans->staging = (struct r600_resource*)staging_depth;

       return &trans->transfer;

    } else if (use_staging_texture) {

       resource.target = PIPE_TEXTURE_2D;

@@ -897,15 +917,8 @@ void r600_texture_transfer_destroy(struct pipe_context *ctx,

    struct pipe_resource *texture = transfer->resource;

    struct r600_resource_texture *rtex = (struct r600_resource_texture*)texture;

 

-   if (rtransfer->staging) {

-      if (transfer->usage & PIPE_TRANSFER_WRITE) {

-         r600_copy_from_staging_texture(ctx, rtransfer);

-      }

-      pipe_resource_reference((struct pipe_resource**)&rtransfer->staging, NULL);

-   }

-

-   if (rtex->is_depth && !rtex->is_flushing_texture) {

-      if ((transfer->usage & PIPE_TRANSFER_WRITE) && rtex->flushed_depth_texture) {

+   if (rtex->is_depth) {

+      if ((transfer->usage & PIPE_TRANSFER_WRITE) && rtransfer->staging) {

          struct pipe_box sbox;

 

          sbox.x = sbox.y = sbox.z = 0;

@@ -915,11 +928,18 @@ void r600_texture_transfer_destroy(struct pipe_context *ctx,

          sbox.depth = 1;

 

          ctx->resource_copy_region(ctx, texture, 0, 0, 0, 0,

-                    &rtex->flushed_depth_texture->resource.b.b, 0,

+                    &rtransfer->staging->b.b, 0,

                     &sbox);

       }

+   } else if (rtransfer->staging) {

+      if (transfer->usage & PIPE_TRANSFER_WRITE) {

+         r600_copy_from_staging_texture(ctx, rtransfer);

+      }

    }

 

+   if (rtransfer->staging)

+      pipe_resource_reference((struct pipe_resource**)&rtransfer->staging, NULL);

+

    pipe_resource_reference(&transfer->resource, NULL);

    FREE(transfer);

 }

@@ -930,6 +950,8 @@ void* r600_texture_transfer_map(struct pipe_context *ctx,

    struct r600_context *rctx = (struct r600_context *)ctx;

    struct r600_transfer *rtransfer = (struct r600_transfer*)transfer;

    struct radeon_winsys_cs_handle *buf;

+   struct r600_resource_texture *rtex =

+         (struct r600_resource_texture*)transfer->resource;

    enum pipe_format format = transfer->resource->format;

    unsigned offset = 0;

    char *map;

@@ -941,17 +963,13 @@ void* r600_texture_transfer_map(struct pipe_context *ctx,

    if (rtransfer->staging) {

       buf = ((struct r600_resource *)rtransfer->staging)->cs_buf;

    } else {

-      struct r600_resource_texture *rtex = (struct r600_resource_texture*)transfer->resource;

-

-      if (rtex->flushed_depth_texture)

-         buf = ((struct r600_resource *)rtex->flushed_depth_texture)->cs_buf;

-      else

-         buf = ((struct r600_resource *)transfer->resource)->cs_buf;

+      buf = ((struct r600_resource *)transfer->resource)->cs_buf;

+   }

 

+   if (rtex->is_depth || !rtransfer->staging)

       offset = rtransfer->offset +

          transfer->box.y / util_format_get_blockheight(format) * transfer->stride +

          transfer->box.x / util_format_get_blockwidth(format) * util_format_get_blocksize(format);

-   }

 

    if (!(map = rctx->ws->buffer_map(buf, rctx->cs, transfer->usage))) {

       return NULL;

@@ -974,13 +992,7 @@ void r600_texture_transfer_unmap(struct pipe_context *ctx,

    if (rtransfer->staging) {

       buf = ((struct r600_resource *)rtransfer->staging)->cs_buf;

    } else {

-      struct r600_resource_texture *rtex = (struct r600_resource_texture*)transfer->resource;

-

-      if (rtex->flushed_depth_texture) {

-         buf = ((struct r600_resource *)rtex->flushed_depth_texture)->cs_buf;

-      } else {

-         buf = ((struct r600_resource *)transfer->resource)->cs_buf;

-      }

+      buf = ((struct r600_resource *)transfer->resource)->cs_buf;

    }

    rctx->ws->buffer_unmap(buf);

 }
```

Salu2

----------

## ZaPa

Hola.

Acabo de añadir a la linea de CONFIG_EXTRA_FIRMWARE los archivos .bin correspondientes a PALM, los 2: PALM_pfp.bin y PAL_me.bin y comentar que ocurre lo mismo. El arranque del kernel se queda pausado durante un minuto y algo, y cuando debería de avanzar aparece las lineas de colores y rallas. Lo curioso es que antes del mensaje de 'Switching to clocksource tsc' aparece un mensaje que indica que intenta cargar PALM... algo similar a esta linea:

```

[drm] Loading PALM microcode

```

Como resultado: si añado en la linea radeon.modeset=0 consigue arrancar el kernel pero haciendo un:

```
dmesg | grep microcode
```

No dice que haya cargado ningún kernel.

Si no añado la linea citada anteriormente, aparece la pantalla esa tan extraña con colores, rayas y demás..

Un saludo.

----------

## Arctic

 *ZaPa wrote:*   

> Hola.
> 
> Acabo de añadir a la linea de CONFIG_EXTRA_FIRMWARE los archivos .bin correspondientes a PALM, los 2: PALM_pfp.bin y PAL_me.bin y comentar que ocurre lo mismo. El arranque del kernel se queda pausado durante un minuto y algo, y cuando debería de avanzar aparece las lineas de colores y rallas. Lo curioso es que antes del mensaje de 'Switching to clocksource tsc' aparece un mensaje que indica que intenta cargar PALM... algo similar a esta linea:
> 
> ```
> ...

 

Lo unico que puedes hacer es intentar cargar todos en el kernel , aunque tendria que cargar Palm que es el que se corresponde con tu Fusion.El mensaje efectivamente es que intenta cargar el firmware pero al pausarse es que ocurre algun error , si ves que ninguno arranca puedes reportar el bug a freedesktop y seguro que algo te aclararan, porque ya ha pasado un tiempecito para que tu micro este soportado.

Salu2

----------

## ZaPa

Hola de nuevo.

Ya probé anteriormente a añadir TODOS los archvios de firmware en la linea CONFIG_EXTRA_FIRMWARE de .config y al parecer tiene un numero máximo de elementos esta linea, porque me vaciaba la linea CONFIG_EXTRA_FIRMWARE al hacer el make.

Voy a probar de X en X (el mayor numero posible) y os comento que tal me fué.

Un saludo y a todos, muchisimas gracias por vuestro interes y tiempo  :Very Happy: 

----------

## Arctic

Finalmente Ati ha sacado una beta del driver legacy , que corrige bugs y proporciona compatibilidad con los cambios ABI ,eso si que nadie se espere que esto ocurra con frecuencia ni mucho menos ,y de paso ha dejado esta nota:

 *Quote:*   

> The reason for the shift in support policy is largely due to the fact that the AMD Radeon HD 2000, AMD Radeon HD 3000, 
> 
> and AMD Radeon HD 4000 Series have been optimized to their maximum potential from a performance and feature perspective.

 

Yo creo que aun por encima se rien de sus usuarios.................

Por cierto RadeonTop se ha actualizado :

https://github.com/clbr/radeontop es una herramienta para monitorizar el driver libre.

Respecto a OpenGl 3 no hace falta activar las variables :

```
R600_GLSL130=1

R600_STREAMOUT=1

```

estan habilitadas ya por defecto en la ultima version de Git de mesa , si consultais la siguiente tabla y en versiones anteriores las han deshabilitado de modo definitivo ,aunque tanto el wiki oficial de gentoo como el de radeon muestren dicha variable, se debe a una desactualizacion del manual que genera confusion :

http://en.wikipedia.org/wiki/GLSL

se corresponde con la version 3.0 de opengl , lo que ocurre es que MSAA no esta aun implementado de ahi que tengamos que esperar para tenerlo operativo.

Gracias a MarekOlsak por la aclaración y por editar la tabla de radeon's features  :Smile:  

Salu2

----------

## ZaPa

Hola.

He probado todos los firmwares localizados en /lib/firmware en ninguno de los ficheros me han funcionado.

¿Que puedo hacer entonces? ¿Debo conformarme con este horrible rendimiento?

Saludos.

----------

## Arctic

 *ZaPa wrote:*   

> Hola.
> 
> He probado todos los firmwares localizados en /lib/firmware en ninguno de los ficheros me han funcionado.
> 
> ¿Que puedo hacer entonces? ¿Debo conformarme con este horrible rendimiento?
> ...

 

Cuantos fps obtienes en el glxgears eliminando vsync y sin pantalla completa ?????

De Fusion poco puedo decirte , ademas de tener una RMA altísima desconozco el rendimiento real que se puede sacar de ellos, he ojeado varios versiones desde el A4 al A8 y tambien los futuros A10 .

----------

## Arctic

Dejo un enlace interesante sobre el rendimiento de mesa 8.0.4 y mesa 8.1-devel ............alguien comento que le habia empeorado y en mi caso ha mejorado un 10% 

http://www.phoronix.com/scan.php?page=article&item=amd_r600g_mesa81&num=1

----------

## Otamay

También tuve este mismo problema de no poder hacer funcionar el módulo radeon incluido en el núcleo. Con la misma tarjeta, Radeon HD 6310 en una lenovo G475 (procesador AMD E475).

A prueba y error concluí que se deben incluir estos 3 firmwares:

radeon/PALM_pfp.bin

radeon/PALM_me.bin

radeon/SUMO_rlc.bin

Saludos, perdón por revivir el tema   :Razz:  .

----------

## Arctic

Ya que levantais el hilo ,aprovecho para comentar antialiasing MSAA esta ya listo para las R600/R700 , supongo que será cuestion de dias que se suban los parches de r600 para el driver r600g ,lo cual proporcionara compilance 3.0 a nuestras tarjetas.El que este interesado en probarlo que este atento al git o que se espere a que lancen la version mesa 9.0 (si han decidido llamarle asi en vez de 8.1)

Salu2

----------

## colo-des

A mi me pasaba lo mismo, lo del error y demora al bootear, era el firmware mal.

Mi placa es una HD6670 y hasta que no cargue el BTC_rlc.bin no logre hacerla andar.

Tengo así:

$ zcat /proc/config.gz |grep CONFIG_EXTRA_FIRMWARE

CONFIG_EXTRA_FIRMWARE="radeon/TURKS_mc.bin radeon/TURKS_me.bin radeon/TURKS_pfp.bin radeon/BTC_rlc.bin"

CONFIG_EXTRA_FIRMWARE_DIR="/lib/firmware/"

Si, esta es una turka...que nombres que les están poniendo!

Tal vez no sea tu caso pero puedes intentar agregar BTC_rlc.bin y ver que pasa.

Respecto a opengl 3.0 lo estoy esperando ansioso como verán:

$ cat /etc/env.d/99local

R600_ENABLE_S3TC=1

R600_GLSL130=1

R600_STREAMOUT=1

R600_USE_LLVM=1

R600_HYPERZ=1

$ glxinfo |grep -i opengl

OpenGL vendor string: X.Org

OpenGL renderer string: Gallium 0.4 on AMD TURKS

OpenGL version string: 2.1 Mesa 8.1-devel

OpenGL shading language version string: 1.30

Saludos y a estar atento a phoronix...jeje

----------

## Arctic

 *colo-des wrote:*   

> A mi me pasaba lo mismo, lo del error y demora al bootear, era el firmware mal.
> 
> Mi placa es una HD6670 y hasta que no cargue el BTC_rlc.bin no logre hacerla andar.
> 
> Tengo así:
> ...

 

```
$ glxinfo | grep version

server glx version string: 1.4

client glx version string: 1.4

GLX version: 1.4

OpenGL version string: 3.0 Mesa 9.0-devel (git-a96119c)

OpenGL shading language version string: 1.30

```

Te dejo la mia   :Laughing:   ........... he tenido que usar la rama 3.6-rc4 para tener compatibilidad con opengl 3.0 , la espera fue larga pero mereció la pena, ahora toca esperar otro tanto para la aceleración de video .

Salu2

----------

