Igt-dev Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: "Martin Krastev (VMware)" <martinkrastev768@gmail.com>
To: igt-dev@lists.freedesktop.org
Cc: krastevm@vmware.com, banackm@vmware.com, mombasawalam@vmware.com
Subject: Re: [igt-dev] [PATCH i-g-t v2 3/8] igt/vmwgfx: Add triangle test
Date: Thu, 16 Mar 2023 15:37:45 +0200	[thread overview]
Message-ID: <a26be195-c032-1e40-4fec-23a60eb0f1f9@gmail.com> (raw)
In-Reply-To: <DM6PR05MB7099906944F388E2AF52683CAEBC9@DM6PR05MB7099.namprd05.prod.outlook.com>

From: Martin Krastev <krastevm@vmware.com>


LGTM

Reviewed-by: Martin Krastev <krastevm@vmware.com>


Regards,

Martin


On 16.03.23 г. 14:54 ч., Martin Krastev wrote:
> From: Maaz Mombasawala <mombasawalam@vmware.com>
>
> Add vmwgfx tests support in tests/meson and a tri test.
> This basic test draws a triangle using vmwgfx and checks if it has
> been rendered correctly.
>
> Signed-off-by: Roye Eshed <reshed@vmware.com>
> Signed-off-by: Zack Rusin <zackr@vmware.com>
> Signed-off-by: Maaz Mombasawala <mombasawalam@vmware.com>
> ---
>   tests/meson.build        |   2 +
>   tests/vmwgfx/meson.build |  14 +++
>   tests/vmwgfx/tri.c       | 210 +++++++++++++++++++++++++++++++++++++++
>   3 files changed, 226 insertions(+)
>   create mode 100644 tests/vmwgfx/meson.build
>   create mode 100644 tests/vmwgfx/tri.c
>
> diff --git a/tests/meson.build b/tests/meson.build
> index 632e36e0..b2d75afa 100644
> --- a/tests/meson.build
> +++ b/tests/meson.build
> @@ -508,6 +508,8 @@ subdir('v3d')
>
>   subdir('vc4')
>
> +subdir('vmwgfx')
> +
>   gen_testlist = find_program('generate_testlist.sh')
>   test_list_target = custom_target('testlist',
>                output : 'test-list.txt',
> diff --git a/tests/vmwgfx/meson.build b/tests/vmwgfx/meson.build
> new file mode 100644
> index 00000000..46961503
> --- /dev/null
> +++ b/tests/vmwgfx/meson.build
> @@ -0,0 +1,14 @@
> +
> +vmwgfx_progs = [
> +       'tri'
> +]
> +vmwgfx_deps = test_deps
> +
> +foreach prog : vmwgfx_progs
> +       test_executables += executable(prog, prog + '.c',
> +                                      dependencies : vmwgfx_deps,
> +                                      install_dir : vmwgfxdir,
> +                                      install_rpath : vmwgfx_rpathdir,
> +                                      install : true)
> +       test_list += join_paths('vmwgfx', prog)
> +endforeach
> diff --git a/tests/vmwgfx/tri.c b/tests/vmwgfx/tri.c
> new file mode 100644
> index 00000000..6fc02967
> --- /dev/null
> +++ b/tests/vmwgfx/tri.c
> @@ -0,0 +1,210 @@
> +// SPDX-License-Identifier: GPL-2.0 OR MIT
> +/**********************************************************
> + * Copyright 2021-2022 VMware, Inc.
> + *
> + * Permission is hereby granted, free of charge, to any person
> + * obtaining a copy of this software and associated documentation
> + * files (the "Software"), to deal in the Software without
> + * restriction, including without limitation the rights to use, copy,
> + * modify, merge, publish, distribute, sublicense, and/or sell copies
> + * of the Software, and to permit persons to whom the Software is
> + * furnished to do so, subject to the following conditions:
> + *
> + * The above copyright notice and this permission notice shall be
> + * included in all copies or substantial portions of the Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
> + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
> + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
> + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
> + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
> + * SOFTWARE.
> + *
> + **********************************************************/
> +
> +#include "igt_vmwgfx.h"
> +
> +static void draw_triangle(struct vmw_svga_device *device, int32 cid)
> +{
> +       struct vmw_default_objects objects;
> +       uint8 *rendered_img;
> +       bool save_status;
> +
> +       vmw_create_default_objects(device, cid, &objects,
> +                                  &vmw_default_rect_size);
> +       rendered_img = vmw_triangle_draw(device, cid, &objects, true);
> +
> +       save_status = vmw_save_data_as_png(objects.color_rt, rendered_img,
> +                                          "vmwgfx_tri.png");
> +       igt_assert(save_status);
> +
> +       vmw_triangle_assert_values(rendered_img, objects.color_rt);
> +
> +       /* Clean up */
> +       free(rendered_img);
> +       vmw_destroy_default_objects(device, &objects);
> +}
> +
> +static void replace_with_coherent_rt(struct vmw_svga_device *device,
> +                                    int32 context_id,
> +                                    struct vmw_default_objects *objects,
> +                                    const SVGA3dSize *rt_size)
> +{
> +       struct vmw_execbuf *cmd_buf;
> +       SVGA3dRenderTargetViewDesc rtv_desc = { 0 };
> +       SVGA3dCmdDXDefineRenderTargetView rt_view_define_cmd = { 0 };
> +       SVGA3dCmdDXDefineDepthStencilView ds_view_define_cmd = { 0 };
> +
> +       objects->color_rt = vmw_ioctl_create_surface_full(
> +               device->drm_fd,
> +               SVGA3D_SURFACE_HINT_TEXTURE | SVGA3D_SURFACE_HINT_RENDERTARGET |
> +                       SVGA3D_SURFACE_BIND_RENDER_TARGET,
> +               SVGA3D_R8G8B8A8_UNORM, 0, SVGA3D_MS_PATTERN_NONE,
> +               SVGA3D_MS_QUALITY_NONE, SVGA3D_TEX_FILTER_NONE, 1, 1, *rt_size,
> +               NULL, drm_vmw_surface_flag_coherent);
> +
> +       objects->depth_rt = vmw_ioctl_create_surface_full(
> +               device->drm_fd,
> +               SVGA3D_SURFACE_HINT_DEPTHSTENCIL |
> +                       SVGA3D_SURFACE_HINT_RENDERTARGET |
> +                       SVGA3D_SURFACE_BIND_DEPTH_STENCIL,
> +               SVGA3D_R24G8_TYPELESS, 0, SVGA3D_MS_PATTERN_NONE,
> +               SVGA3D_MS_QUALITY_NONE, SVGA3D_TEX_FILTER_NONE, 1, 1, *rt_size,
> +               NULL, drm_vmw_surface_flag_coherent);
> +
> +       cmd_buf = vmw_execbuf_create(device->drm_fd, context_id);
> +
> +       rtv_desc.tex.arraySize = 1;
> +       rtv_desc.tex.firstArraySlice = 0;
> +       rtv_desc.tex.mipSlice = 0;
> +       vmw_bitvector_find_next_bit(device->rt_view_bv,
> +                                   &rt_view_define_cmd.renderTargetViewId);
> +       rt_view_define_cmd.sid = objects->color_rt->base.handle;
> +       rt_view_define_cmd.format = SVGA3D_R8G8B8A8_UNORM;
> +       rt_view_define_cmd.resourceDimension = SVGA3D_RESOURCE_TEXTURE2D;
> +       rt_view_define_cmd.desc = rtv_desc;
> +       vmw_execbuf_append(cmd_buf, SVGA_3D_CMD_DX_DEFINE_RENDERTARGET_VIEW,
> +                          &rt_view_define_cmd, sizeof(rt_view_define_cmd), NULL,
> +                          0);
> +       objects->color_rt_id = rt_view_define_cmd.renderTargetViewId;
> +
> +       vmw_bitvector_find_next_bit(device->ds_view_bv,
> +                                   &ds_view_define_cmd.depthStencilViewId);
> +       ds_view_define_cmd.sid = objects->depth_rt->base.handle;
> +       ds_view_define_cmd.format = SVGA3D_D24_UNORM_S8_UINT;
> +       ds_view_define_cmd.resourceDimension = SVGA3D_RESOURCE_TEXTURE2D;
> +       ds_view_define_cmd.mipSlice = 0;
> +       ds_view_define_cmd.firstArraySlice = 0;
> +       ds_view_define_cmd.arraySize = 1;
> +       vmw_execbuf_append(cmd_buf, SVGA_3D_CMD_DX_DEFINE_DEPTHSTENCIL_VIEW,
> +                          &ds_view_define_cmd, sizeof(ds_view_define_cmd), NULL,
> +                          0);
> +       objects->ds_view_id = ds_view_define_cmd.depthStencilViewId;
> +
> +       vmw_execbuf_submit(cmd_buf, NULL);
> +       vmw_execbuf_destroy(cmd_buf);
> +}
> +
> +static void destroy_rt(struct vmw_svga_device *device, int32 context_id,
> +                      struct vmw_default_objects *objects)
> +{
> +       struct vmw_execbuf *cmd_buf;
> +
> +       SVGA3dCmdDXDestroyRenderTargetView rt_view_cmd = {
> +               .renderTargetViewId = objects->color_rt_id
> +       };
> +
> +       SVGA3dCmdDXDestroyDepthStencilView ds_view_cmd = {
> +               .depthStencilViewId = objects->ds_view_id
> +       };
> +
> +       cmd_buf = vmw_execbuf_create(device->drm_fd, objects->context_id);
> +
> +       vmw_execbuf_append(cmd_buf, SVGA_3D_CMD_DX_DESTROY_RENDERTARGET_VIEW,
> +                          &rt_view_cmd, sizeof(rt_view_cmd), NULL, 0);
> +
> +       vmw_execbuf_append(cmd_buf, SVGA_3D_CMD_DX_DESTROY_DEPTHSTENCIL_VIEW,
> +                          &ds_view_cmd, sizeof(ds_view_cmd), NULL, 0);
> +
> +       vmw_ioctl_surface_unref(device->drm_fd, objects->color_rt);
> +       vmw_ioctl_surface_unref(device->drm_fd, objects->depth_rt);
> +
> +       vmw_bitvector_free_bit(device->rt_view_bv, objects->color_rt_id);
> +       vmw_bitvector_free_bit(device->ds_view_bv, objects->ds_view_id);
> +
> +       vmw_execbuf_submit(cmd_buf, NULL);
> +       vmw_execbuf_destroy(cmd_buf);
> +}
> +
> +static void draw_triangle_on_coherent_rt(struct vmw_svga_device *device,
> +                                        int32 cid)
> +{
> +       struct vmw_default_objects objects;
> +       uint8 *rendered_img;
> +       struct vmw_surface *default_color_rt;
> +       struct vmw_surface *default_depth_rt;
> +       SVGA3dRenderTargetViewId default_color_rt_id;
> +       SVGA3dDepthStencilViewId default_ds_view_id;
> +
> +       vmw_create_default_objects(device, cid, &objects,
> +                                  &vmw_default_rect_size);
> +
> +       /* Replace default rendertargets with coherent equivalents */
> +       default_color_rt = objects.color_rt;
> +       default_depth_rt = objects.depth_rt;
> +       default_color_rt_id = objects.color_rt_id;
> +       default_ds_view_id = objects.ds_view_id;
> +       replace_with_coherent_rt(device, cid, &objects, &vmw_default_rect_size);
> +
> +       rendered_img = vmw_triangle_draw(device, cid, &objects, false);
> +
> +       vmw_triangle_assert_values(rendered_img, objects.color_rt);
> +
> +       /* Clean up */
> +       free(rendered_img);
> +
> +       destroy_rt(device, cid, &objects);
> +       objects.color_rt = default_color_rt;
> +       objects.depth_rt = default_depth_rt;
> +       objects.color_rt_id = default_color_rt_id;
> +       objects.ds_view_id = default_ds_view_id;
> +
> +       vmw_destroy_default_objects(device, &objects);
> +}
> +
> +igt_main
> +{
> +       struct vmw_svga_device device;
> +       int32 cid;
> +
> +       igt_fixture
> +       {
> +               vmw_svga_device_init(&device, vmw_svga_device_node_render);
> +               igt_require(device.drm_fd != -1);
> +
> +               cid = vmw_ioctl_context_create(device.drm_fd);
> +               igt_require(cid != SVGA3D_INVALID_ID);
> +       }
> +
> +       igt_subtest("tri")
> +       {
> +               draw_triangle(&device, cid);
> +       }
> +
> +       /*
> +        * Check that vmwgfx correctly handles coherent rendertarget
> +        * surfaces when no explicit sync is given from userspace
> +        */
> +       igt_subtest("tri-no-sync-coherent")
> +       {
> +               draw_triangle_on_coherent_rt(&device, cid);
> +       }
> +
> +       igt_fixture
> +       {
> +               vmw_ioctl_context_destroy(device.drm_fd, cid);
> +               vmw_svga_device_fini(&device);
> +       }
> +}
> --
> 2.38.1
>

  parent reply	other threads:[~2023-03-16 13:37 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-03-16  2:26 [igt-dev] [PATCH i-g-t v2 0/8] Add vmwgfx support Zack Rusin
2023-03-16  2:26 ` [igt-dev] [PATCH i-g-t v2 1/8] igt/vmwgfx: Add generated headers for svga device Zack Rusin
     [not found]   ` <DM6PR05MB7099753BF0C4C180B50FE6F5AEBC9@DM6PR05MB7099.namprd05.prod.outlook.com>
2023-03-16 13:03     ` Martin Krastev (VMware)
2023-03-20 17:08       ` Kamil Konieczny
2023-03-17 16:52   ` Kamil Konieczny
2023-03-17 19:34     ` Zack Rusin
2023-04-03 12:57       ` Kamil Konieczny
2023-03-16  2:26 ` [igt-dev] [PATCH i-g-t v2 2/8] igt/vmwgfx: Add vmwgfx support Zack Rusin
     [not found]   ` <DM6PR05MB7099CE80747EDA8D25FA1B80AEBC9@DM6PR05MB7099.namprd05.prod.outlook.com>
2023-03-16 13:17     ` Martin Krastev (VMware)
2023-03-17  8:12   ` Petri Latvala
2023-03-16  2:26 ` [igt-dev] [PATCH i-g-t v2 3/8] igt/vmwgfx: Add triangle test Zack Rusin
     [not found]   ` <DM6PR05MB7099906944F388E2AF52683CAEBC9@DM6PR05MB7099.namprd05.prod.outlook.com>
2023-03-16 13:37     ` Martin Krastev (VMware) [this message]
2023-03-17 16:58   ` Kamil Konieczny
2023-03-16  2:26 ` [igt-dev] [PATCH i-g-t v2 4/8] igt/vmwgfx: Add execution buffer test Zack Rusin
     [not found]   ` <DM6PR05MB7099387153CDB475DEC7D7A4AEBC9@DM6PR05MB7099.namprd05.prod.outlook.com>
2023-03-16 13:55     ` Martin Krastev (VMware)
2023-03-16  2:26 ` [igt-dev] [PATCH i-g-t v2 5/8] igt/vmwgfx: Add surface copy test Zack Rusin
     [not found]   ` <DM6PR05MB7099EFBC41B5FCEE66C80C44AEBC9@DM6PR05MB7099.namprd05.prod.outlook.com>
2023-03-16 14:08     ` Martin Krastev (VMware)
2023-03-16  2:26 ` [igt-dev] [PATCH i-g-t v2 6/8] igt/vmwgfx: Add mob stress test Zack Rusin
     [not found]   ` <DM6PR05MB70993CAD6D2EF2959A0522F8AEBC9@DM6PR05MB7099.namprd05.prod.outlook.com>
2023-03-16 14:13     ` Martin Krastev (VMware)
2023-03-16  2:26 ` [igt-dev] [PATCH i-g-t v2 7/8] igt/vmwgfx: Add reference counting tests Zack Rusin
     [not found]   ` <DM6PR05MB70999D64A5D5DC1B22771866AEBC9@DM6PR05MB7099.namprd05.prod.outlook.com>
2023-03-16 14:22     ` Martin Krastev (VMware)
2023-03-16  2:26 ` [igt-dev] [PATCH i-g-t v2 8/8] lib/igt_kms: vmwgfx returns 8 crtc Zack Rusin
     [not found]   ` <DM6PR05MB70990327C01C62C72489C001AEBC9@DM6PR05MB7099.namprd05.prod.outlook.com>
2023-03-16 14:25     ` Martin Krastev (VMware)
2023-03-16 17:39   ` Maaz Mombasawala (VMware)
2023-03-16  3:07 ` [igt-dev] ✓ Fi.CI.BAT: success for Add vmwgfx support (rev2) Patchwork
2023-03-16  8:19 ` [igt-dev] ✗ Fi.CI.IGT: failure " Patchwork

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=a26be195-c032-1e40-4fec-23a60eb0f1f9@gmail.com \
    --to=martinkrastev768@gmail.com \
    --cc=banackm@vmware.com \
    --cc=igt-dev@lists.freedesktop.org \
    --cc=krastevm@vmware.com \
    --cc=mombasawalam@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