No announcement yet.

AMD Releases Catalyst 9.6 For Linux

  • Filter
  • Time
  • Show
Clear All
new posts

  • fbo offscreen rendering appears to have been fixed in wine 1.1.24 which has just been released. Also X3R got fixed for me as well, in that the menu now renders and so do ingame textures, although all of the "normal" wine problems still exist. i.e. requires native libraries for movie playback, trading, etc. mouse is EXTREMELY laggy.

    So those, apparently were actually wine bugs and not fglrx bugs.

    GW still crashes as normal, and still wants to repair the archive every startup. The latter is definitely a wine bug, while I'm not at all sure about the cause of the former. In any even it now actually crashes in the loading screen itself instead of seeming to get as far as starting to render the playscreen.

    My sleep & video playback & other assorted bugs remain which I'm still pointing the finger at fglrx for as in the sleep freeze problem disabling compiz/beryl works around that one.

    The 192SP 260 is about the same price as the 4850 while the 216SP is c. $50 more which is not alot more, and it IS a better performing card than the 4850. The 216SP 260 IS going into my i7 build because of these drivers. (Briefly consider CF 4770s, but NOT with these drivers.)
    Last edited by cutterjohn; 21 June 2009, 09:09 PM.


    • Nice link to the 216sp, it wasn't out when I bought my 4850 (and I think my shuttle would have to be modded for the card to fit...)
      It doesn't change my point though.

      Thanks for the info.


      • Originally posted by RealNC View Post
        Gentoo isn't Slackware. You aren't supposed to do things by hand in Gentoo. There are tools you should use, or you break the system. So your instructions are not for everyone. If you don't know how to unbreak the system, don't follow them. If you know how to unbreak your system, I suppose you didn't need those instructions in the first place
        Very true.
        However, for those who feel adventurous, here's a post in Gentoo forums that explains how to install a fglrx driver which is not in the portage tree (stucked in 9.3 probably for compatibility reasons ?).

        In a nutshell, it's about creating a local overlay, copy the ebuild files from portage tree, modify them to accept 9.5 or 9.6 drivers, manifest them and finally emerge them.

        This looks simple, but there is few caveats to avoid in order to keep a nice and clean running gentoo.

        I have to admit that I didn't follow that topic, as I'm part of the guys who don't know how to unbreak my system. So, I'm waiting patiently the update in the official portage tree. Much safer.


        • You can read the official documentation on how to create overlays rather than some people writing on forums :P


          • Originally posted by PuckPoltergeist View Post
            The errors come from the binary blob. This can only be fixed by the ATI/AMD devs.

            the patch to get the source compile with 2.6.30:
            diff -Nru fglrx-orig/build_mod/drm_os_linux.h fglrx/build_mod/drm_os_linux.h
            --- fglrx-orig/build_mod/drm_os_linux.h	2009-05-30 01:21:53.000000000 +0200
            +++ fglrx/build_mod/drm_os_linux.h	2009-06-17 14:08:22.000000000 +0200
            @@ -42,7 +42,7 @@
             #define DRM_IRQ_ARGS		int irq, void *arg, struct pt_regs *regs
             /** backwards compatibility with old irq return values */
             #ifndef IRQ_HANDLED
            -typedef void irqreturn_t;
            +//typedef void irqreturn_t;
             #define IRQ_HANDLED   /* nothing */
             #define IRQ_NONE      /* nothing */
            diff -Nru fglrx-orig/build_mod/firegl_public.c fglrx/build_mod/firegl_public.c
            --- fglrx-orig/build_mod/firegl_public.c	2009-05-30 01:21:53.000000000 +0200
            +++ fglrx/build_mod/firegl_public.c	2009-06-17 15:21:09.000000000 +0200
            @@ -282,6 +282,18 @@
             // ============================================================
             /* global structures */
            +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,29)
            +#undef pci_enable_msi
            +int pci_enable_msi(struct pci_dev* dev)
            +	int status;
            +	status = pci_enable_msi_block(dev, 1);
            +	return status;
            +#endif //LINUX_VERSION_CODE > KERNEL_VERSION(2,6,29)
             int ip_firegl_open(struct inode* inode, struct file* filp)
                 int m;
            @@ -1226,8 +1238,6 @@
             int ATI_API_CALL KCL_SetPageCache_Array(unsigned long *pt, int pages, int enable)
            -    unsigned int i;
            -    int ret = 0;
             #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,28)
                 if (enable)
            @@ -1238,6 +1248,8 @@
                     return set_memory_array_uc(pt, pages);
            +    unsigned int i;
            +    int ret = 0;
                 for( i = 0; i < pages; i++ )
                     ret = KCL_SetPageCache((void *)pt[i], 1, enable);
            @@ -1448,7 +1460,11 @@
             KCL_TYPE_Uid ATI_API_CALL KCL_GetEffectiveUid(void)
            +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,28)
            +    return current->cred->euid;
                 return current->euid;
             /** /brief Delay execution for the specified number of microseconds
            @@ -1820,15 +1836,28 @@
             void ATI_API_CALL KCL_PosixSecurityCapSetIPCLock(unsigned int lock)
            +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,28)
            +    struct cred *new = prepare_creds();
            +    if (!new) {
            +        printk(KERN_ERR "fglrx: could not allocate memory\n");
            +        return;
            +    }
            +#define new current
                 if (lock == 0 )
            -        cap_lower(current->cap_effective, CAP_IPC_LOCK);
            +	cap_lower(new->cap_effective, CAP_IPC_LOCK);
            -        cap_raise(current->cap_effective, CAP_IPC_LOCK);
            -    }    
            -    return; 
            +	cap_raise(new->cap_effective, CAP_IPC_LOCK);
            +    }
            +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,28)
            +    commit_creds(new);
            +#undef new
             /** \brief Get number of available RAM pages
            diff -Nru fglrx-orig/build_mod/firegl_public.h fglrx/build_mod/firegl_public.h
            --- fglrx-orig/build_mod/firegl_public.h	2009-05-30 01:21:53.000000000 +0200
            +++ fglrx/build_mod/firegl_public.h	2009-06-17 14:11:15.000000000 +0200
            @@ -18,6 +18,7 @@
             #define _FIREGL_PUBLIC_H_
             #include <stdarg.h>
            +#include <asm/pgtable.h>
             #include "kcl_pci.h"
             #include "kcl_io.h"
            @@ -600,6 +601,11 @@
             #define cpu_has_pge test_bit(X86_FEATURE_PGE, &boot_cpu_data.x86_capability)
            +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,28)
            +#undef pgprot_writecombine
            +#undef pgprot_noncached
             #ifndef pgprot_writecombine
             #define pgprot_writecombine(prot) __pgprot((pgprot_val(prot) & ~(_PAGE_PCD)) | _PAGE_PWT)
            diff -Nru fglrx-orig/build_mod/kcl_acpi.c fglrx/build_mod/kcl_acpi.c
            --- fglrx-orig/build_mod/kcl_acpi.c	2009-05-30 01:21:53.000000000 +0200
            +++ fglrx/build_mod/kcl_acpi.c	2009-06-17 14:33:21.000000000 +0200
            @@ -18,6 +18,12 @@
             #include <linux/autoconf.h>
             #include <linux/acpi.h>
            +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,28)
            +#include <../drivers/acpi/acpica/acconfig.h>
            +#include <../drivers/acpi/acpica/aclocal.h>
            +#include <../drivers/acpi/acpica/acobject.h>
             #include "kcl_config.h"
             #include "kcl_type.h"
             #include "kcl_acpi.h"
            Changes on the linux source aren't necessary.

            Thank you for the patch - most elegant I have found on the net.
            Kano, I can confirm it works with 2.6.30 unmodified kernel - at least on my openSUSE_11.1 system.

            For 2.6.30-git18 and catalyst 9-6 I found that the following one patch to the linux kernel:
            add "EXPORT_SYMBOL(find_task_by_vpid);" in pid.c
            also makes your patch work with 2.6.30-git18, so fglrx will probably work with 2.6.31 as well.

            Looking forward to your patch for 2.6.31 without modified kernel sources!


            • Maybe it is only needed for 32 bit.


              • Originally posted by Kano View Post
                Maybe it is only needed for 32 bit.
                You mean flush_tlb_page? I don't find it in the driver, neither in the glue layer nor in the binary.


                • Did you try 9-3 and other drivers too? 9-3 is needed for older cards too. Of course not possible for Xserver 1.6.


                  • Originally posted by Kano View Post
                    Did you try 9-3 and other drivers too? 9-3 is needed for older cards too. Of course not possible for Xserver 1.6.
                    No, I've only checked 9.6 cause the patch is only made for 9.6.


                    • Usually the same patch works at least down to 9-2 (did not test older ones). I did not try this patch however, but the fglrx kernel module code did not change much...