From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jesse Barnes Subject: Re: [PATCH 5/5] drm/i915: add destination color key support Date: Thu, 3 Nov 2011 11:23:19 -0700 Message-ID: <20111103112319.6d46f337@jbarnes-desktop> References: <1320264203-18715-1-git-send-email-jbarnes@virtuousgeek.org> <1320264203-18715-6-git-send-email-jbarnes@virtuousgeek.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="===============1450592385==" Return-path: In-Reply-To: <1320264203-18715-6-git-send-email-jbarnes@virtuousgeek.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: dri-devel-bounces+sf-dri-devel=m.gmane.org@lists.freedesktop.org Errors-To: dri-devel-bounces+sf-dri-devel=m.gmane.org@lists.freedesktop.org To: dri-devel@lists.freedesktop.org Cc: intel-gfx@lists.freedesktop.org, rob.clark@linaro.org List-Id: intel-gfx@lists.freedesktop.org --===============1450592385== Content-Type: multipart/signed; micalg=PGP-SHA1; boundary="Sig_/twPNttfq0_0eEX5CJZWOW3R"; protocol="application/pgp-signature" --Sig_/twPNttfq0_0eEX5CJZWOW3R Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: quoted-printable On Wed, 2 Nov 2011 13:03:23 -0700 Jesse Barnes wrote: > Add new ioctls for getting and setting the current destination color > key. This allows for simple overlay display control by matching a color > key value in the primary plane before blending the overlay on top. >=20 > Signed-off-by: Jesse Barnes > --- Updated with changed context due to other changes. --=20 Jesse Barnes, Intel Open Source Technology Center =46rom 00904140838effe4511213c89e887adee5937bd7 Mon Sep 17 00:00:00 2001 From: Jesse Barnes Date: Tue, 1 Nov 2011 15:13:28 -0700 Subject: [PATCH 4/4] drm/i915: add destination color key support Add new ioctls for getting and setting the current destination color key. This allows for simple overlay display control by matching a color key value in the primary plane before blending the overlay on top. Signed-off-by: Jesse Barnes --- drivers/gpu/drm/i915/i915_dma.c | 2 + drivers/gpu/drm/i915/intel_drv.h | 6 +++ drivers/gpu/drm/i915/intel_sprite.c | 72 +++++++++++++++++++++++++++++++= ++++ include/drm/i915_drm.h | 16 ++++++++ 4 files changed, 96 insertions(+), 0 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dm= a.c index 2eac955..0385a27 100644 --- a/drivers/gpu/drm/i915/i915_dma.c +++ b/drivers/gpu/drm/i915/i915_dma.c @@ -2294,6 +2294,8 @@ struct drm_ioctl_desc i915_ioctls[] =3D { DRM_IOCTL_DEF_DRV(I915_GEM_MADVISE, i915_gem_madvise_ioctl, DRM_UNLOCKED), DRM_IOCTL_DEF_DRV(I915_OVERLAY_PUT_IMAGE, intel_overlay_put_image, DRM_MA= STER|DRM_CONTROL_ALLOW|DRM_UNLOCKED), DRM_IOCTL_DEF_DRV(I915_OVERLAY_ATTRS, intel_overlay_attrs, DRM_MASTER|DRM= _CONTROL_ALLOW|DRM_UNLOCKED), + DRM_IOCTL_DEF_DRV(I915_SET_SPRITE_DESTKEY, intel_sprite_set_destkey, DRM_= MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED), + DRM_IOCTL_DEF_DRV(I915_GET_SPRITE_DESTKEY, intel_sprite_get_destkey, DRM_= MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED), }; =20 int i915_max_ioctl =3D DRM_ARRAY_SIZE(i915_ioctls); diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_= drv.h index 785bae7..2f376dc 100644 --- a/drivers/gpu/drm/i915/intel_drv.h +++ b/drivers/gpu/drm/i915/intel_drv.h @@ -407,4 +407,10 @@ extern void intel_write_eld(struct drm_encoder *encode= r, struct drm_display_mode *mode); extern void intel_cpt_verify_modeset(struct drm_device *dev, int pipe); =20 +extern int intel_sprite_set_destkey(struct drm_device *dev, void *data, + struct drm_file *file_priv); +extern int intel_sprite_get_destkey(struct drm_device *dev, void *data, + struct drm_file *file_priv); + + #endif /* __INTEL_DRV_H__ */ diff --git a/drivers/gpu/drm/i915/intel_sprite.c b/drivers/gpu/drm/i915/int= el_sprite.c index ca0da52..0891bda 100644 --- a/drivers/gpu/drm/i915/intel_sprite.c +++ b/drivers/gpu/drm/i915/intel_sprite.c @@ -99,6 +99,7 @@ ivb_update_plane(struct drm_plane *plane, struct drm_fram= ebuffer *fb, /* must disable */ sprctl |=3D SPRITE_TRICKLE_FEED_DISABLE; sprctl |=3D SPRITE_ENABLE; + sprctl |=3D SPRITE_DEST_KEY; =20 /* Sizes are 0 based */ src_w--; @@ -396,6 +397,77 @@ static void intel_destroy_plane(struct drm_plane *plan= e) kfree(intel_plane); } =20 +int intel_sprite_set_destkey(struct drm_device *dev, void *data, + struct drm_file *file_priv) +{ + struct drm_intel_set_sprite_destkey *set =3D data; + struct drm_i915_private *dev_priv =3D dev->dev_private; + struct drm_mode_object *obj; + struct drm_plane *plane; + struct intel_plane *intel_plane; + int ret =3D 0; + + if (!dev_priv) + return -EINVAL; + + if (set->value > 0xffffff) + return -EINVAL; + + mutex_lock(&dev->mode_config.mutex); + + obj =3D drm_mode_object_find(dev, set->plane_id, DRM_MODE_OBJECT_PLANE); + if (!obj) { + ret =3D -EINVAL; + goto out_unlock; + } + + plane =3D obj_to_plane(obj); + intel_plane =3D to_intel_plane(plane); + + mutex_lock(&dev->struct_mutex); + I915_WRITE(SPRKEYVAL(intel_plane->pipe), set->value); + I915_WRITE(SPRKEYMSK(intel_plane->pipe), 0xffffff); + POSTING_READ(SPRKEYMSK(intel_plane->pipe)); + mutex_unlock(&dev->struct_mutex); + +out_unlock: + mutex_unlock(&dev->mode_config.mutex); + return ret; +} + +int intel_sprite_get_destkey(struct drm_device *dev, void *data, + struct drm_file *file_priv) +{ + struct drm_intel_get_sprite_destkey *get =3D data; + struct drm_i915_private *dev_priv =3D dev->dev_private; + struct drm_mode_object *obj; + struct drm_plane *plane; + struct intel_plane *intel_plane; + int ret =3D 0; + + if (!dev_priv) + return -EINVAL; + + mutex_lock(&dev->mode_config.mutex); + + obj =3D drm_mode_object_find(dev, get->plane_id, DRM_MODE_OBJECT_PLANE); + if (!obj) { + ret =3D -EINVAL; + goto out_unlock; + } + + plane =3D obj_to_plane(obj); + intel_plane =3D to_intel_plane(plane); + + mutex_lock(&dev->struct_mutex); + get->value =3D I915_READ(SPRKEYVAL(intel_plane->pipe)); + mutex_unlock(&dev->struct_mutex); + +out_unlock: + mutex_unlock(&dev->mode_config.mutex); + return ret; +} + static const struct drm_plane_funcs intel_plane_funcs =3D { .update_plane =3D intel_update_plane, .disable_plane =3D intel_disable_plane, diff --git a/include/drm/i915_drm.h b/include/drm/i915_drm.h index 28c0d11..f9a390b 100644 --- a/include/drm/i915_drm.h +++ b/include/drm/i915_drm.h @@ -198,6 +198,8 @@ typedef struct _drm_i915_sarea { #define DRM_I915_OVERLAY_PUT_IMAGE 0x27 #define DRM_I915_OVERLAY_ATTRS 0x28 #define DRM_I915_GEM_EXECBUFFER2 0x29 +#define DRM_I915_GET_SPRITE_DESTKEY 0x2a +#define DRM_I915_SET_SPRITE_DESTKEY 0x2b =20 #define DRM_IOCTL_I915_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_I915_INIT, dr= m_i915_init_t) #define DRM_IOCTL_I915_FLUSH DRM_IO ( DRM_COMMAND_BASE + DRM_I915_FLUSH) @@ -239,6 +241,8 @@ typedef struct _drm_i915_sarea { #define DRM_IOCTL_I915_GEM_MADVISE DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GE= M_MADVISE, struct drm_i915_gem_madvise) #define DRM_IOCTL_I915_OVERLAY_PUT_IMAGE DRM_IOW(DRM_COMMAND_BASE + DRM_I9= 15_OVERLAY_PUT_IMAGE, struct drm_intel_overlay_put_image) #define DRM_IOCTL_I915_OVERLAY_ATTRS DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_= OVERLAY_ATTRS, struct drm_intel_overlay_attrs) +#define DRM_IOCTL_I915_SET_SPRITE_DESTKEY DRM_IOWR(DRM_COMMAND_BASE + DRM_= I915_SET_SPRITE_DESTKEY, struct drm_intel_set_sprite_destkey) +#define DRM_IOCTL_I915_GET_SPRITE_DESTKEY DRM_IOWR(DRM_COMMAND_BASE + DRM_= I915_SET_SPRITE_DESTKEY, struct drm_intel_get_sprite_destkey) =20 /* Allow drivers to submit batchbuffers directly to hardware, relying * on the security mechanisms provided by hardware. @@ -844,4 +848,16 @@ struct drm_intel_overlay_attrs { __u32 gamma5; }; =20 +/* Set the destination color key on a given sprite */ +struct drm_intel_set_sprite_destkey { + __u32 plane_id; + __u32 value; +}; + +/* Get the current destination color key on a given sprite */ +struct drm_intel_get_sprite_destkey { + __u32 plane_id; + __u64 value; +}; + #endif /* _I915_DRM_H_ */ --=20 1.7.4.1 --Sig_/twPNttfq0_0eEX5CJZWOW3R Content-Type: application/pgp-signature; name=signature.asc Content-Disposition: attachment; filename=signature.asc -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (GNU/Linux) iQIcBAEBAgAGBQJOstwXAAoJEIEoDkX4Qk9h9YwP/jaUxpxs/jMoFfcJIp+bvZe5 Gs3EtOAL77xNyW/U4IcGcbq4TsUpYSAX5aQCbdcPQH1zU99StiR5wOovX53k0Kmp UbaQKPp5emSKXvln9ykHFstQkIfJKG2DntYI31DRCV5nmPOwHbLDN+I7+W2KiLhL XSvL5XmVjhDp7lmL0hwfVkj1ke1qRikD85t0lVzCGLWBnm1HPUBBNXwZerx1OV5r 6ZbDdxoiaRLmmMp3jIgFfN6ObS+W0wk0o1t7QI/EroWLkvkOo/Fa1Wha/DeDc+eK CCXCjzs+GRgl9uJD3eioWV4knZvis+5Vs+FcB/1JZJ/o/vefvOzT7aIf+sig0Qhu QFquCzKdJ1AiVYTJ7WDpVV31mqH1Tmv2BU6b6OSZPTHnbW+RgF0bEOrGc1aV9rk0 9g77QxyDBTz+4zJYTNqr8mjcwA31D/m2kW+J261i88jqSfmPUtAKeePZHW4GAHvI Ksd1b0ZQCeexSrM+gDy0XaL9pLIYbmrlXWyKavD07FfpH/X7WuAFJnm4WXQs9Y4Z oaNEpHd2gMm0dLHnG3Cy7FqJRAA4aP6A7W8/lQ+loYfUhNbE0HtyT/xHgw2ASxhw 2tb/Bp5fJhyNljoKw5v474ccfLadm0FiQ0a+e5N02SAWmDtb0ZRAJ6egfsDACIJb 2vKf9+ApNTEFSXVE+r4n =LxfJ -----END PGP SIGNATURE----- --Sig_/twPNttfq0_0eEX5CJZWOW3R-- --===============1450592385== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/dri-devel --===============1450592385==--