winsys/intel: test for and expose address swizzling

Without knowing whether addresses are swizzled or not, we cannot manipulate a
tiled surface in CPU.
This commit is contained in:
Chia-I Wu 2013-05-10 14:23:33 +08:00
parent 639d0f73c1
commit 5c9b69d259
2 changed files with 23 additions and 0 deletions

View file

@ -584,6 +584,26 @@ get_param(struct intel_drm_winsys *drm_ws, int param, int *value)
return true;
}
static bool
test_address_swizzling(struct intel_drm_winsys *drm_ws)
{
drm_intel_bo *bo;
uint32_t tiling = I915_TILING_X, swizzle;
unsigned long pitch;
bo = drm_intel_bo_alloc_tiled(drm_ws->bufmgr,
"address swizzling test", 64, 64, 4, &tiling, &pitch, 0);
if (bo) {
drm_intel_bo_get_tiling(bo, &tiling, &swizzle);
drm_intel_bo_unreference(bo);
}
else {
swizzle = I915_BIT_6_SWIZZLE_NONE;
}
return (swizzle != I915_BIT_6_SWIZZLE_NONE);
}
static bool
init_info(struct intel_drm_winsys *drm_ws)
{
@ -605,6 +625,8 @@ init_info(struct intel_drm_winsys *drm_ws)
get_param(drm_ws, I915_PARAM_HAS_GEN7_SOL_RESET, &val);
info->has_gen7_sol_reset = val;
info->has_address_swizzling = test_address_swizzling(drm_ws);
return true;
}

View file

@ -74,6 +74,7 @@ struct intel_winsys_info {
int devid;
bool has_llc;
bool has_gen7_sol_reset;
bool has_address_swizzling;
};
/**