注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Nihui's Blog

nihui的私人空间和日志

 
 
 

日志

 
 

xf86-video-sis EXA 2D加速修复补丁  

2012-09-15 14:04:14|  分类: 工作側記 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
最近打开 ~x86,然后升级 gentoo,完了后发现 X 启动后直接崩溃,看回溯就知道是 exa 的问题。
xorg server 1.13.0 完全删除了 XAA 加速模式,原先自己做的 siska 驱动就没办法用上了,只好想办法修下 EXA 加速模式,sis 驱动使用 EXA 崩溃的 bug 似乎好几年没人管,用 sis 显卡的人不多,会修驱动 bug 的人更少,也难怪。
https://bugs.freedesktop.org/show_bug.cgi?id=35763

打开 EXA 好处和 XAA 差不多,比 vesa 随便放个视频 cpu 70% 强大多了。xf86-video-sis EXA 2D加速修复补丁 - nihui - Nihuis Blog

[ 11525.956] (II) EXA(0): Offscreen pixmap area of 29786112 bytes
[ 11525.956] (II) EXA(0): Driver registered support for the following operations:
[ 11525.956] (II) Solid
[ 11525.956] (II) Copy
[ 11525.956] (II) UploadToScreen
[ 11525.956] (II) DownloadFromScreen


补丁本身不大,就直接贴blog上好啦,如果有人遇到和我一样的问题可以试试~~

diff -Nuarp xf86-video-sis-0.10.7/src/sis310_accel.c xf86-video-sis-0.10.7.exautsdfs/src/sis310_accel.c
--- xf86-video-sis-0.10.7/src/sis310_accel.c 2012-06-06 16:47:03.000000000 +0800
+++ xf86-video-sis-0.10.7.exautsdfs/src/sis310_accel.c 2012-09-15 13:42:59.535124999 +0800
@@ -1874,7 +1874,7 @@ SiSUploadToScreen(PixmapPtr pDst, int x,
{
ScrnInfoPtr pScrn = xf86ScreenToScrn(pDst->drawable.pScreen);
SISPtr pSiS = SISPTR(pScrn);
- unsigned char *dst = pDst->devPrivate.ptr;
+ unsigned char *dst = ((unsigned char *) pSiS->FbBase) + exaGetPixmapOffset(pDst);
int dst_pitch = exaGetPixmapPitch(pDst);

(pSiS->SyncAccel)(pScrn);
@@ -1882,7 +1882,7 @@ SiSUploadToScreen(PixmapPtr pDst, int x,
if(pDst->drawable.bitsPerPixel < 8)
return FALSE;

- dst += (x * pDst->drawable.bitsPerPixel / 8) + (y * src_pitch);
+ dst += (x * pDst->drawable.bitsPerPixel / 8) + (y * dst_pitch);
while(h--) {
SiSMemCopyToVideoRam(pSiS, dst, (unsigned char *)src,
(w * pDst->drawable.bitsPerPixel / 8));
@@ -1953,9 +1953,8 @@ SiSDownloadFromScreen(PixmapPtr pSrc, in
{
ScrnInfoPtr pScrn = xf86ScreenToScrn(pSrc->drawable.pScreen);
SISPtr pSiS = SISPTR(pScrn);
- unsigned char *src = pSrc->devPrivate.ptr;
+ unsigned char *src = ((unsigned char *) pSiS->FbBase) + exaGetPixmapOffset(pSrc);
int src_pitch = exaGetPixmapPitch(pSrc);
- int size = src_pitch < dst_pitch ? src_pitch : dst_pitch;

(pSiS->SyncAccel)(pScrn);

@@ -1964,7 +1963,8 @@ SiSDownloadFromScreen(PixmapPtr pSrc, in

src += (x * pSrc->drawable.bitsPerPixel / 8) + (y * src_pitch);
while(h--) {
- SiSMemCopyFromVideoRam(pSiS, (unsigned char *)dst, src, size);
+ SiSMemCopyFromVideoRam(pSiS, (unsigned char *)dst, src,
+ (w * pSrc->drawable.bitsPerPixel / 8));
src += src_pitch;
dst += dst_pitch;
}

  评论这张
 
阅读(1617)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017