Only really got good testing on r500 so far, need to enable in DDX and play some more.tags/mesa_7_6_rc1
| @@ -83,6 +83,10 @@ struct radeon_bo_funcs { | |||
| int (*bo_unmap)(struct radeon_bo *bo); | |||
| int (*bo_wait)(struct radeon_bo *bo); | |||
| int (*bo_is_static)(struct radeon_bo *bo); | |||
| int (*bo_set_tiling)(struct radeon_bo *bo, uint32_t tiling_flags, | |||
| uint32_t pitch); | |||
| int (*bo_get_tiling)(struct radeon_bo *bo, uint32_t *tiling_flags, | |||
| uint32_t *pitch); | |||
| }; | |||
| struct radeon_bo_manager { | |||
| @@ -187,6 +191,18 @@ static inline int _radeon_bo_wait(struct radeon_bo *bo, | |||
| return bo->bom->funcs->bo_wait(bo); | |||
| } | |||
| static inline int radeon_bo_set_tiling(struct radeon_bo *bo, | |||
| uint32_t tiling_flags, uint32_t pitch) | |||
| { | |||
| return bo->bom->funcs->bo_set_tiling(bo, tiling_flags, pitch); | |||
| } | |||
| static inline int radeon_bo_get_tiling(struct radeon_bo *bo, | |||
| uint32_t *tiling_flags, uint32_t *pitch) | |||
| { | |||
| return bo->bom->funcs->bo_get_tiling(bo, tiling_flags, pitch); | |||
| } | |||
| static inline int radeon_bo_is_static(struct radeon_bo *bo) | |||
| { | |||
| if (bo->bom->funcs->bo_is_static) | |||
| @@ -577,6 +577,8 @@ static struct radeon_bo_funcs bo_legacy_funcs = { | |||
| bo_unmap, | |||
| NULL, | |||
| bo_is_static, | |||
| NULL, | |||
| NULL, | |||
| }; | |||
| static int bo_vram_validate(struct radeon_bo *bo, | |||
| @@ -762,8 +762,10 @@ radeon_update_renderbuffers(__DRIcontext *context, __DRIdrawable *drawable) | |||
| bo = depth_bo; | |||
| radeon_bo_ref(bo); | |||
| } else { | |||
| uint32_t tiling_flags = 0, pitch = 0; | |||
| int ret; | |||
| #ifdef RADEON_DEBUG_BO | |||
| bo = radeon_bo_open(radeon->radeonScreen->bom, | |||
| bo = radeon_bo_open(radeon->radeonScreen->bom, | |||
| buffers[i].name, | |||
| 0, | |||
| 0, | |||
| @@ -784,6 +786,13 @@ radeon_update_renderbuffers(__DRIcontext *context, __DRIdrawable *drawable) | |||
| regname, buffers[i].name); | |||
| } | |||
| ret = radeon_bo_get_tiling(bo, &tiling_flags, &pitch); | |||
| if (tiling_flags & RADEON_TILING_MACRO) | |||
| bo->flags |= RADEON_BO_FLAGS_MACRO_TILE; | |||
| if (tiling_flags & RADEON_TILING_MICRO) | |||
| bo->flags |= RADEON_BO_FLAGS_MICRO_TILE; | |||
| } | |||
| if (buffers[i].attachment == __DRI_BUFFER_DEPTH) { | |||