drm/i915: update FBC maximum fb sizes
CTG/ILK/SNB/IVB support 4kx2k surfaces. HSW supports 4kx4k, but without proper front buffer invalidation on the last 2k lines, so don't enable FBC on these cases for now. v2: Use gen >= 5, not gen > 4 (Daniel). Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
parent
6c49f24180
commit
f85da868e3
@ -431,7 +431,7 @@ void intel_disable_fbc(struct drm_device *dev)
|
|||||||
* - no pixel mulitply/line duplication
|
* - no pixel mulitply/line duplication
|
||||||
* - no alpha buffer discard
|
* - no alpha buffer discard
|
||||||
* - no dual wide
|
* - no dual wide
|
||||||
* - framebuffer <= 2048 in width, 1536 in height
|
* - framebuffer <= max_hdisplay in width, max_vdisplay in height
|
||||||
*
|
*
|
||||||
* We can't assume that any compression will take place (worst case),
|
* We can't assume that any compression will take place (worst case),
|
||||||
* so the compressed buffer has to be the same size as the uncompressed
|
* so the compressed buffer has to be the same size as the uncompressed
|
||||||
@ -449,6 +449,7 @@ void intel_update_fbc(struct drm_device *dev)
|
|||||||
struct intel_framebuffer *intel_fb;
|
struct intel_framebuffer *intel_fb;
|
||||||
struct drm_i915_gem_object *obj;
|
struct drm_i915_gem_object *obj;
|
||||||
int enable_fbc;
|
int enable_fbc;
|
||||||
|
unsigned int max_hdisplay, max_vdisplay;
|
||||||
|
|
||||||
if (!i915_powersave)
|
if (!i915_powersave)
|
||||||
return;
|
return;
|
||||||
@ -507,8 +508,16 @@ void intel_update_fbc(struct drm_device *dev)
|
|||||||
dev_priv->no_fbc_reason = FBC_UNSUPPORTED_MODE;
|
dev_priv->no_fbc_reason = FBC_UNSUPPORTED_MODE;
|
||||||
goto out_disable;
|
goto out_disable;
|
||||||
}
|
}
|
||||||
if ((crtc->mode.hdisplay > 2048) ||
|
|
||||||
(crtc->mode.vdisplay > 1536)) {
|
if (IS_G4X(dev) || INTEL_INFO(dev)->gen >= 5) {
|
||||||
|
max_hdisplay = 4096;
|
||||||
|
max_vdisplay = 2048;
|
||||||
|
} else {
|
||||||
|
max_hdisplay = 2048;
|
||||||
|
max_vdisplay = 1536;
|
||||||
|
}
|
||||||
|
if ((crtc->mode.hdisplay > max_hdisplay) ||
|
||||||
|
(crtc->mode.vdisplay > max_vdisplay)) {
|
||||||
DRM_DEBUG_KMS("mode too large for compression, disabling\n");
|
DRM_DEBUG_KMS("mode too large for compression, disabling\n");
|
||||||
dev_priv->no_fbc_reason = FBC_MODE_TOO_LARGE;
|
dev_priv->no_fbc_reason = FBC_MODE_TOO_LARGE;
|
||||||
goto out_disable;
|
goto out_disable;
|
||||||
|
Loading…
Reference in New Issue
Block a user