dri-devel Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Deepak Rawat <drawat@vmware.com>
To: dri-devel@lists.freedesktop.org,
	linux-graphics-maintainer@vmware.com, thellstrom@vmware.com,
	syeh@vmware.com
Cc: Deepak Rawat <drawat@vmware.com>
Subject: [PATCH v3 13/18] drm/vmwgfx: Implement SOU plane update for BO backed fb
Date: Wed, 10 Oct 2018 17:16:52 -0700	[thread overview]
Message-ID: <20181011001657.1715-13-drawat@vmware.com> (raw)
In-Reply-To: <20181011001657.1715-1-drawat@vmware.com>

Using the new interface implement SOU plane update for BO backed fb.

v2: Rebase to new resource validation.

Signed-off-by: Deepak Rawat <drawat@vmware.com>
---
 drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c | 101 +++++++++++++++++++++++++++
 1 file changed, 101 insertions(+)

diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
index 991a6e87370a..f9bb71e489db 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
@@ -76,6 +76,11 @@ struct vmw_kms_sou_dirty_cmd {
 	SVGA3dCmdBlitSurfaceToScreen body;
 };
 
+struct vmw_kms_sou_define_gmrfb {
+	uint32_t header;
+	SVGAFifoCmdDefineGMRFB body;
+};
+
 /**
  * Display unit using screen objects.
  */
@@ -499,6 +504,102 @@ vmw_sou_primary_plane_prepare_fb(struct drm_plane *plane,
 	return vmw_bo_pin_in_vram(dev_priv, vps->bo, true);
 }
 
+static uint32_t vmw_sou_bo_fifo_size(struct vmw_du_update_plane *update,
+				     uint32_t num_hits)
+{
+	return sizeof(struct vmw_kms_sou_define_gmrfb) +
+		sizeof(struct vmw_kms_sou_bo_blit) * num_hits;
+}
+
+static uint32_t vmw_sou_bo_define_gmrfb(struct vmw_du_update_plane *update,
+					void *cmd)
+{
+	struct vmw_framebuffer_bo *vfbbo =
+		container_of(update->vfb, typeof(*vfbbo), base);
+	struct vmw_kms_sou_define_gmrfb *gmr = cmd;
+	int depth = update->vfb->base.format->depth;
+
+	/* Emulate RGBA support, contrary to svga_reg.h this is not
+	 * supported by hosts. This is only a problem if we are reading
+	 * this value later and expecting what we uploaded back.
+	 */
+	if (depth == 32)
+		depth = 24;
+
+	gmr->header = SVGA_CMD_DEFINE_GMRFB;
+
+	gmr->body.format.bitsPerPixel = update->vfb->base.format->cpp[0] * 8;
+	gmr->body.format.colorDepth = depth;
+	gmr->body.format.reserved = 0;
+	gmr->body.bytesPerLine = update->vfb->base.pitches[0];
+	vmw_bo_get_guest_ptr(&vfbbo->buffer->base, &gmr->body.ptr);
+
+	return sizeof(*gmr);
+}
+
+static uint32_t vmw_sou_bo_populate_clip(struct vmw_du_update_plane  *update,
+					 void *cmd, struct drm_rect *clip,
+					 uint32_t fb_x, uint32_t fb_y)
+{
+	struct vmw_kms_sou_bo_blit *blit = cmd;
+
+	blit->header = SVGA_CMD_BLIT_GMRFB_TO_SCREEN;
+	blit->body.destScreenId = update->du->unit;
+	blit->body.srcOrigin.x = fb_x;
+	blit->body.srcOrigin.y = fb_y;
+	blit->body.destRect.left = clip->x1;
+	blit->body.destRect.top = clip->y1;
+	blit->body.destRect.right = clip->x2;
+	blit->body.destRect.bottom = clip->y2;
+
+	return sizeof(*blit);
+}
+
+static uint32_t vmw_stud_bo_post_clip(struct vmw_du_update_plane  *update,
+				      void *cmd, struct drm_rect *bb)
+{
+	return 0;
+}
+
+/**
+ * vmw_sou_plane_update_bo - Update display unit for bo backed fb.
+ * @dev_priv: Device private.
+ * @plane: Plane state.
+ * @old_state: Old plane state.
+ * @vfb: Framebuffer which is blitted to display unit.
+ * @out_fence: If non-NULL, will return a ref-counted pointer to vmw_fence_obj.
+ *             The returned fence pointer may be NULL in which case the device
+ *             has already synchronized.
+ *
+ * Return: 0 on success or a negative error code on failure.
+ */
+static int vmw_sou_plane_update_bo(struct vmw_private *dev_priv,
+				   struct drm_plane *plane,
+				   struct drm_plane_state *old_state,
+				   struct vmw_framebuffer *vfb,
+				   struct vmw_fence_obj **out_fence)
+{
+	struct vmw_du_update_plane_buffer bo_update;
+
+	memset(&bo_update, 0, sizeof(struct vmw_du_update_plane_buffer));
+	bo_update.base.plane = plane;
+	bo_update.base.old_state = old_state;
+	bo_update.base.dev_priv = dev_priv;
+	bo_update.base.du = vmw_crtc_to_du(plane->state->crtc);
+	bo_update.base.vfb = vfb;
+	bo_update.base.out_fence = out_fence;
+	bo_update.base.mutex = NULL; 
+	bo_update.base.cpu_blit = false;
+	bo_update.base.intr = true;
+
+	bo_update.base.calc_fifo_size = vmw_sou_bo_fifo_size;
+	bo_update.base.post_prepare = vmw_sou_bo_define_gmrfb;
+	bo_update.base.clip = vmw_sou_bo_populate_clip;
+	bo_update.base.post_clip = vmw_stud_bo_post_clip;
+
+	return vmw_du_helper_plane_update(&bo_update.base);
+}
+
 static uint32_t vmw_sou_surface_fifo_size(struct vmw_du_update_plane *update,
 					  uint32_t num_hits)
 {
-- 
2.17.1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

  parent reply	other threads:[~2018-10-11  0:17 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-10-11  0:16 [PATCH v3 01/18] drm: Add a new plane property to send damage during plane update Deepak Rawat
2018-10-11  0:16 ` [PATCH v3 02/18] drm: Add a new helper to validate damage during atomic_check Deepak Rawat
2018-10-15 22:01   ` Sinclair Yeh
2018-10-11  0:16 ` [PATCH v3 03/18] drm: Add helper iterator functions for plane fb_damage_clips blob Deepak Rawat
2018-10-11  0:16 ` [PATCH v3 04/18] drm/selftest: Add drm damage helper selftest Deepak Rawat
2018-10-11 16:23   ` Daniel Vetter
2018-10-15 16:11     ` Deepak Singh Rawat
2018-10-16 12:21       ` Daniel Vetter
2018-10-16 12:52         ` Alexandru-Cosmin Gheorghe
2018-10-16 16:14           ` Deepak Singh Rawat
2018-10-16 16:00         ` Deepak Singh Rawat
2018-10-11  0:16 ` [PATCH v3 05/18] drm: Add helper to implement legacy dirtyfb Deepak Rawat
2018-10-11 16:15   ` Daniel Vetter
2018-10-11 16:21     ` Daniel Vetter
2018-10-11  0:16 ` [PATCH v3 06/18] drm/vmwgfx: Add a new interface for plane update on a display unit Deepak Rawat
2018-10-11  0:16 ` [PATCH v3 07/18] drm/vmwgfx: Implement STDU plane update for surface backed fb Deepak Rawat
2018-10-11  0:16 ` [PATCH v3 08/18] drm/vmwgfx: Implement STDU plane update for BO " Deepak Rawat
2018-10-11  0:16 ` [PATCH v3 09/18] drm/vmwgfx: Use the new interface for STDU plane update Deepak Rawat
2018-10-11  0:16 ` [PATCH v3 10/18] drm/vmwgfx: Updated comment for stdu " Deepak Rawat
2018-10-15 13:09   ` Thomas Hellstrom
2018-10-11  0:16 ` [PATCH v3 11/18] drm/vmwgfx: Enable FB_DAMAGE_CLIPS property for STDU primary plane Deepak Rawat
2018-10-11  0:16 ` [PATCH v3 12/18] drm/vmwgfx: Implement SOU plane update for surface backed fb Deepak Rawat
2018-10-11  0:16 ` Deepak Rawat [this message]
2018-10-11  0:16 ` [PATCH v3 14/18] drm/vmwgfx: Use the new interface for SOU plane update Deepak Rawat
2018-10-11  0:16 ` [PATCH v3 15/18] drm/vmwgfx: Update comments for sou plane update function Deepak Rawat
2018-10-15 13:10   ` Thomas Hellstrom
2018-10-11  0:16 ` [PATCH v3 16/18] drm/vmwgfx: Enable FB_DAMAGE_CLIPS property for SOU primary plane Deepak Rawat
2018-10-11  0:16 ` [PATCH v3 17/18] drm/vmwgfx: Use atomic helper function for dirty fb IOCTL Deepak Rawat
2018-10-11  0:16 ` [PATCH v3 18/18] drm/vmwgfx: Don't clear mode::type anymore Deepak Rawat
2018-10-15 13:12   ` Thomas Hellstrom
2018-10-15 13:15 ` [PATCH v3 01/18] drm: Add a new plane property to send damage during plane update Thomas Hellstrom

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20181011001657.1715-13-drawat@vmware.com \
    --to=drawat@vmware.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=linux-graphics-maintainer@vmware.com \
    --cc=syeh@vmware.com \
    --cc=thellstrom@vmware.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox