お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2012-05-23 23:04:45

katsu07
ゲスト

オープンソースドライバで3Dアクセラレーションがソフトウェアレンダリングになる

使用機種: Thinkpad R40 2681-KUJ
搭載video: Mobility Radeon 7500 32MB AGPx4
ubuntu 12.04 LTS desktop 日本語 Remixをクリーンインストールで使用

古い機種であり、搭載videoも古いのでオープンソースのドライバで使用していますが、KMS(Kernel Mode Setting)だとAGPが1倍速になってしまう為にUMS(Userspace mode setting)にしてxorg.confを作成し、AGPx4にしています。


問題
ubuntu 10.10~11.10まではAGPと3Dアクセラレーションの設定が反映されていたんですが、12.04にしてからXorg.0.logに以下のエラーが出てしまい、3Dアクセラレーションがソフトウェアレンダリングになってしまいます。

コード:

(EE) AIGLX error: radeon does not export required DRI extension
(EE) AIGLX: reverting to software rendering

但し、UMSをやめてKMSで駆動すればこのエラーは無くなりDRIが正常にinitializeされます。
AGPが1倍速になるので、描画は遅くなりますが・・・


そもそもunityもサポート外なのでunity-2dを使用しており、特にOpenGL等の3Dで何かしていると言う訳でも無く、AGPの方は4倍速で駆動できているので使用上の害は何も無いのですが、どなたか対処方を御存知でしたら後教授願います。

 

#2 2012-05-24 03:54:07

udooon
メンバ
登録日: 2012-01-24

Re: オープンソースドライバで3Dアクセラレーションがソフトウェアレンダリングになる

https://wiki.ubuntu.com/LaptopTestingTeam/Old/ThinkpadR40-2681
こちら等、参考にしてみては。

オフライン

 

#3 2012-05-24 16:42:47

katsu07
ゲスト

Re: オープンソースドライバで3Dアクセラレーションがソフトウェアレンダリングになる

御助言ありがとうございます。

しかし、ハードウェアやXorgの設定が問題ではなく、何故KMSかUMSかの違いだけでDRIがinitializeできないのかと言う問題の様です。

KMSでDRIがinitializeできるなら、AGPが4倍速になりさえすれば問題がなくなると思い、AGP module(ati_agp)をロードさせる為initramfsを作り試してみたました。
しかしsyslogにAGP4倍速のセットが出力されているのにXorg.0.logには反映されず、実際4倍速にはなりませんでした。
(xorg.confに記述されたAGPMode "4"のセットはnot usedで無視される)

結局UMSでXorg.confの4倍速を設定し反映させて使っています。(AIGLX errorとなる為、DRIはinitializeされない)

自分でも調べてみましたが、現状preciseではlaunchpadにAIGLX errorのbugが報告されており、PowerPCの場合はmesaのバージョンを戻す様に説明されていました。
x86なPCでもエラーの内容が少し違いますがやはりUMSでDRIがinitializeできない報告がありました。
(ATIのchipを使用してオープンソースドライバの場合)

アップデートを待つ事にしてみます。

 

#4 2012-05-28 15:28:43

udooon
メンバ
登録日: 2012-01-24

Re: オープンソースドライバで3Dアクセラレーションがソフトウェアレンダリングになる

コード:

$ modinfo radeon | grep parm
parm:           no_wb:Disable AGP writeback for scratch registers (int)
parm:           modeset:Disable/Enable modesetting (int)
parm:           dynclks:Disable/Enable dynamic clocks (int)
parm:           r4xx_atom:Enable ATOMBIOS modesetting for R4xx (int)
parm:           vramlimit:Restrict VRAM for testing (int)
parm:           agpmode:AGP Mode (-1 == PCI) (int)
parm:           gartsize:Size of PCIE/IGP gart to setup in megabytes (32,64, etc)
parm:           benchmark:Run benchmark (int)
parm:           test:Run tests (int)
parm:           connector_table:Force connector table (int)
parm:           tv:TV enable (0 = disable) (int)
parm:           audio:Audio enable (1 = enable) (int)
parm:           disp_priority:Display Priority (0 = auto, 1 = normal, 2 = high) (int)
parm:           hw_i2c:hw i2c engine enable (0 = disable) (int)
parm:           pcie_gen2:PCIE Gen2 mode (1 = enable) (int)
parm:           msi:MSI support (1 = enable, 0 = disable, -1 = auto) (int)

kernelオプション
radeon.modeset=1 radeon.agpmode=4
を指定すれば、AGP4xになるのでは?
ソース内の
/usr/src/linux-source-3.2.0/drivers/gpu/drm/radeon/radeon_agp.c
static struct radeon_agpmode_quirk radeon_agpmode_quirk_list[] =
のなかで、AGP1xに設定されていたりするのでは?

オフライン

 

#5 2012-05-28 21:03:56

katsu07
ゲスト

Re: オープンソースドライバで3Dアクセラレーションがソフトウェアレンダリングになる

再びの御助言ありがとうございます。
カーネルオプションは何度か試していますが、syslog上はx4 modeの出力がありますが、それがXorg側に反映されない感じです。

kernel mode settingの場合。
標準では何もオプションを渡さなければ自動的にKMSですが明示的にmodeset=1を指定してみました。

/etc/modprobe.d/radeon-kms.confに以下を記述

コード:

options radeon modeset=1
options radeon agpmode=4
options radeon gartsize=64

syslog抜粋

コード:

[    0.366044] Linux agpgart interface v0.103
[    0.366223] agpgart-intel 0000:00:00.0: Intel i845 Chipset
[    0.376419] agpgart-intel 0000:00:00.0: AGP aperture is 64M @ 0xe0000000
[   28.072753] [drm] AGP mode requested: 4
[   28.072762] agpgart-intel 0000:00:00.0: AGP 2.0 bridge
[   28.072784] agpgart-intel 0000:00:00.0: putting AGP V2 device into 4x mode
[   28.072834] radeon 0000:01:00.0: putting AGP V2 device into 4x mode

Xorg.0.log抜粋

コード:

[    32.254] (==) AIGLX enabled
[    32.255] (II) Loading extension XFree86-DRI
[    32.262] (II) Loading extension DRI2
[    32.278] (II) [KMS] Kernel modesetting enabled.   <-- KMS enable
[    32.279] (**) RADEON(0): Option "DRI" "true"
[    32.279] (--) RADEON(0): Chipset: "ATI Radeon Mobility M7 LW (AGP)" (ChipID = 0x4c57)
[    32.279] (II) RADEON(0): AGP card detected
[    32.383] (II) RADEON(0): [DRI2] Setup complete
[    32.383] (II) RADEON(0): [DRI2]   DRI driver: radeon
[    32.383] (II) RADEON(0): [DRI2]   VDPAU driver: radeon
[    32.430] (WW) RADEON(0): Option "AGPMode" is not used  <-- KMSではxorg.confのAGPModeが無視される
[    32.486] (II) AIGLX: enabled GLX_MESA_copy_sub_buffer
[    32.486] (II) AIGLX: enabled GLX_INTEL_swap_event
[    32.486] (II) AIGLX: enabled GLX_SGI_swap_control and GLX_MESA_swap_control
[    32.486] (II) AIGLX: GLX_EXT_texture_from_pixmap backed by buffer objects
[    32.487] (II) AIGLX: Loaded and initialized radeon
[    32.487] (II) GLX: Initialized DRI2 GL provider for screen 0

usespace mode setting(kernel mode setting disable)の場合

/etc/modprobe.d/radeon-kms.confに以下を記述

コード:

options radeon modeset=0

syslog抜粋

コード:

[    0.316253] Linux agpgart interface v0.103
[    0.316436] agpgart-intel 0000:00:00.0: Intel i845 Chipset
[    0.372141] agpgart-intel 0000:00:00.0: AGP aperture is 64M @ 0xe0000000
[   33.392366] agpgart-intel 0000:00:00.0: AGP 2.0 bridge
[   33.392392] agpgart-intel 0000:00:00.0: putting AGP V2 device into 4x mode
[   33.392443] pci 0000:01:00.0: putting AGP V2 device into 4x mode

Xorg.0.log抜粋

コード:

[    32.259] (==) AIGLX enabled
[    32.261] (II) Loading extension XFree86-DRI
[    32.262] (II) Loading extension DRI2
[    32.269] (II) [KMS] drm report modesetting isn't supported.   <-- KMS disable
[    32.270] (**) RADEON(0): Option "AGPMode" "4"
[    32.271] (**) RADEON(0): Option "DRI" "true"
[    32.271] (--) RADEON(0): Chipset: "ATI Radeon Mobility M7 LW (AGP)" (ChipID = 0x4c57)
[    32.272] (II) RADEON(0): AGP card detected
[    32.274] (II) RADEON(0): [dri] Found DRI library version 1.3.0 and kernel module version 1.33.0
[    33.391] (II) RADEON(0):   MC_AGP_LOCATION  : 0xffffffc0
[    33.392] (**) RADEON(0): Using AGP 4x    <-- xorg.confの設定にて4倍速で使用される
[    33.392] (II) RADEON(0): [agp] Mode 0x1f000207 [AGP 0x8086/0x1a30; Card 0x1002/0x4c57 0x1014/0x0527]
[    33.535] (II) RADEON(0): [agp] 65536 kB allocated with handle 0x00000001
[    33.542] (II) RADEON(0): [agp] ring handle = 0xe0000000
[    33.542] (II) RADEON(0): [agp] Ring mapped at 0xb54ed000
[    33.542] (II) RADEON(0): [agp] ring read ptr handle = 0xe0101000
[    33.543] (II) RADEON(0): [agp] Ring read ptr mapped at 0xb77a0000
[    33.543] (II) RADEON(0): [agp] vertex/indirect buffers handle = 0xe0102000
[    33.543] (II) RADEON(0): [agp] Vertex/indirect buffers mapped at 0xb52ed000
[    33.543] (II) RADEON(0): [agp] GART texture map handle = 0xe0302000
[    33.558] (II) RADEON(0): [agp] GART Texture map mapped at 0xb16ed000
[    33.558] (II) RADEON(0):   MC_AGP_LOCATION  : 0xffffffc0
[    33.759] (II) RADEON(0): [DRI] installation complete
[    33.770] (WW) RADEON(0): DRI init changed memory map, adjusting ...
[    33.770] (WW) RADEON(0):   MC_AGP_LOCATION was: 0xffffffc0 is: 0xe3ffe000
[    33.770] (II) RADEON(0):   MC_AGP_LOCATION  : 0xe3ffe000
[    35.905] (II) RADEON(0):   MC_AGP_LOCATION  : 0xe3ffe000
[    37.127] (II) AIGLX: Screen 0 is not DRI2 capable
[    37.136] (EE) AIGLX error: radeon does not export required DRI extension  <-- error
[    37.136] (EE) AIGLX: reverting to software rendering                               <-- error
[    37.174] (II) AIGLX: Loaded and initialized swrast
[    37.174] (II) GLX: Initialized DRISWRAST GL provider for screen 0

やはりkernel mode setting以外ではAIGLX errorが出て3Dアクセラレーションがソフトウェアレンダリングになってしまいます。


後、今更ですが前回#3で投稿した内容に誤りがありました・・・

--> AGP module(ati_agp)をロードさせる為initramfsを作り試してみたました。

は誤りです。
intel chipsetのPCなので、ドライバーはintel_agpが正解です。
但し、標準でintel_agpはカーネルに組み込まれています。
それではうまく行かない為、あえてmoduleになっているati_agpをロードする様にinitramfsを作り直して確認してみたと言う意味です。
ati_agp自体はati chipset?関連のドライバーでしょうからロードはできても利用はできませんでした。
lsmodの出力に表示されるだけです。

 

#6 2012-05-28 23:20:13

katsu07
ゲスト

Re: オープンソースドライバで3Dアクセラレーションがソフトウェアレンダリングになる

ソース内の
/usr/src/linux-source-3.2.0/drivers/gpu/drm/radeon/radeon_agp.c
static struct radeon_agpmode_quirk radeon_agpmode_quirk_list[] =
のなかで、AGP1xに設定されていたりするのでは?

$apt-get source linux-source-3.2.0
でカーネルソースをダウンロードし、確認してみました。
確かにATIのデバイスIDが1箇所一致していましたが、INTELのデバイスIDとIBMのデバイスIDが一致していません。

コード:

/* Intel 82855PM host bridge / Mobility M7 needs AGPMode 1 */
{ PCI_VENDOR_ID_INTEL, 0x3340, PCI_VENDOR_ID_ATI, 0x4c57,
    PCI_VENDOR_ID_IBM, 0x0530, 1},

詳しくはわかりませんが、一致していないから逆に標準設定で1倍速にセットされてしまう?
カーネルオプションで指定すればsyslog上には
radeon 0000:01:00.0: putting AGP V2 device into 4x mode
と出力されてるんですが・・・


試しにlspciの結果から得たデバイスIDを使って以下を追記してカーネル再構築をするのも手かもしれませんね。
時間がある時にやってみようと思います。

コード:

/* Intel 82845 host bridge / Mobility M7 needs AGPMode 4 */
{ PCI_VENDOR_ID_INTEL, 0x1a30, PCI_VENDOR_ID_ATI, 0x4c57,
    PCI_VENDOR_ID_IBM, 0x0527, 4},

$sudo lspci -vvnns の出力

コード:

00:00.0 Host bridge [0600]: Intel Corporation 82845 845 [Brookdale] Chipset Host Bridge [8086:1a30] (rev 04)
    Subsystem: IBM Device [1014:0507]
    Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx-
    Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort+ >SERR- <PERR- INTx-
    Latency: 0
    Region 0: Memory at e0000000 (32-bit, prefetchable) [size=64M]
    Capabilities: [e4] Vendor Specific Information: Len=04 <?>
    Capabilities: [a0] AGP version 2.0
        Status: RQ=32 Iso- ArqSz=0 Cal=0 SBA+ ITACoh- GART64- HTrans- 64bit- FW+ AGP3- Rate=x1,x2,x4
        Command: RQ=1 ArqSz=0 Cal=0 SBA+ AGP+ GART64- 64bit- FW- Rate=x4
    Kernel driver in use: agpgart-intel

01:00.0 VGA compatible controller [0300]: Advanced Micro Devices [AMD] nee ATI RV200 [Mobility Radeon 7500] [1002:4c57] (prog-if 00 [VGA controller])
    Subsystem: IBM Device [1014:0527]
    Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping+ SERR+ FastB2B+ DisINTx-
    Status: Cap+ 66MHz+ UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
    Latency: 66 (2000ns min), Cache Line Size: 32 bytes
    Interrupt: pin A routed to IRQ 11
    Region 0: Memory at e8000000 (32-bit, prefetchable) [size=128M]
    Region 1: I/O ports at 3000 [size=256]
    Region 2: Memory at d0100000 (32-bit, non-prefetchable) [size=64K]
    [virtual] Expansion ROM at d0120000 [disabled] [size=128K]
    Capabilities: [58] AGP version 2.0
        Status: RQ=48 Iso- ArqSz=0 Cal=0 SBA+ ITACoh- GART64- HTrans- 64bit- FW- AGP3- Rate=x1,x2,x4
        Command: RQ=32 ArqSz=0 Cal=0 SBA+ AGP+ GART64- 64bit- FW- Rate=x4
    Capabilities: [50] Power Management version 2
        Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
        Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
    Kernel modules: radeon, radeonfb
 

#7 2012-05-29 13:22:54

udooon
メンバ
登録日: 2012-01-24

Re: オープンソースドライバで3Dアクセラレーションがソフトウェアレンダリングになる

http://d.hatena.ne.jp/junkawa/20060103
こちらのページの、一番最後などはどうですか。

オフライン

 

#8 2012-06-02 16:40:00

katsu07
ゲスト

Re: オープンソースドライバで3Dアクセラレーションがソフトウェアレンダリングになる

udooon様 再度の情報ありがとうございます。
しかし、情報にあるintel_agpやgartsize等は標準のコンフィグレーションでカーネル組み込みとなっています。
試してはみましたが、やはり効果はありませんでした。


前回投稿したカーネルドライバーの件も試してみましたが、効果はありませんでした。
カーネルの再構築に5時間〜6時間もかかりました・・・・
結果として、カーネルドライバ側が標準でAGP4倍速になるだけでした。
それがKMSでX側に反映されないので状況は変わりません。


と言う事で、一応X側のドライバも確認してみました。
xserver-xorg-video-atiのソースにカーネルと同じ様な箇所がありますが、ここを同じように変更してみてもUMS側が標準でAGP4倍速になるだけであり、KMSを有効にすると完全に無視されます。
UMSではAIGLX errorとなるのでこちらも状況は変わりません。

もう1箇所KMSに関するプログラムがあり、それがKMS時のオプション関連だったので、そこにAGPに関する記述を追加して試してみました。
しかし、KMSでもAGP関連のオプションを受け付ける(ログ上no usedにならない)様にはなるものの、実際には4倍速にはなりませんでした。


自分にはこの辺りが限界なので、以下のbug報告などでアクションされるのを待つ事にします。
情報ありがとうございました。

https://bugs.launchpad.net/ubuntu/+sour … ug/1002562
https://bugs.launchpad.net/ubuntu/+sour … bug/946677

 

Board footer

Powered by FluxBB