summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/vmwgfx/vmwgfx_surface.c')
-rw-r--r--drivers/gpu/drm/vmwgfx/vmwgfx_surface.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c b/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c
index 6abcf82d8a39..41b9d20d6ae7 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c
@@ -1479,10 +1479,24 @@ int vmw_surface_gb_priv_define(struct drm_device *dev,
*srf_out = NULL;
if (for_scanout) {
+ uint32_t max_width, max_height;
+
if (!svga3dsurface_is_screen_target_format(format)) {
DRM_ERROR("Invalid Screen Target surface format.");
return -EINVAL;
}
+
+ max_width = min(dev_priv->texture_max_width,
+ dev_priv->stdu_max_width);
+ max_height = min(dev_priv->texture_max_height,
+ dev_priv->stdu_max_height);
+
+ if (size.width > max_width || size.height > max_height) {
+ DRM_ERROR("%ux%u\n, exeeds max surface size %ux%u",
+ size.width, size.height,
+ max_width, max_height);
+ return -EINVAL;
+ }
} else {
const struct svga3d_surface_desc *desc;