drm/vmwgfx: support SVGA_3D_CMD_DX_DEFINE_RASTERIZER_STATE_V2 command
authorRoland Scheidegger <sroland@vmware.com>
Mon, 6 Dec 2021 17:26:15 +0000 (12:26 -0500)
committerZack Rusin <zackr@vmware.com>
Thu, 9 Dec 2021 18:16:27 +0000 (13:16 -0500)
This is going to be required for setting the sample count when
rendering with no attachments.
Also cleans up view handling (should fix depthstencil_v2).

Reviewed-by: Charmaine Lee <charmainel@vmware.com>
Signed-off-by: Roland Scheidegger <sroland@vmware.com>
Signed-off-by: Zack Rusin <zackr@vmware.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20211206172620.3139754-8-zack@kde.org
drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c
drivers/gpu/drm/vmwgfx/vmwgfx_so.c
drivers/gpu/drm/vmwgfx/vmwgfx_so.h

index fde2636..f3a1142 100644 (file)
@@ -3559,6 +3559,8 @@ static const struct vmw_cmd_entry vmw_cmd_entries[SVGA_3D_CMD_MAX] = {
                    &vmw_cmd_dx_define_streamoutput, true, false, true),
        VMW_CMD_DEF(SVGA_3D_CMD_DX_BIND_STREAMOUTPUT,
                    &vmw_cmd_dx_bind_streamoutput, true, false, true),
+       VMW_CMD_DEF(SVGA_3D_CMD_DX_DEFINE_RASTERIZER_STATE_V2,
+                   &vmw_cmd_dx_so_define, true, false, true),
 };
 
 bool vmw_cmd_describe(const void *buf, u32 *size, char const **cmd)
index 9739ffd..4ea32b0 100644 (file)
@@ -567,4 +567,8 @@ static void vmw_so_build_asserts(void)
                     offsetof(SVGA3dCmdDXDefineRenderTargetView, sid));
        BUILD_BUG_ON(offsetof(struct vmw_view_define, sid) !=
                     offsetof(SVGA3dCmdDXDefineDepthStencilView, sid));
+       BUILD_BUG_ON(offsetof(struct vmw_view_define, sid) !=
+                    offsetof(SVGA3dCmdDXDefineUAView, sid));
+       BUILD_BUG_ON(offsetof(struct vmw_view_define, sid) !=
+                    offsetof(SVGA3dCmdDXDefineDepthStencilView_v2, sid));
 }
index f48b84b..01c701e 100644 (file)
@@ -93,7 +93,10 @@ static inline enum vmw_view_type vmw_view_cmd_to_type(u32 id)
            id == SVGA_3D_CMD_DX_DESTROY_UA_VIEW)
                return vmw_view_ua;
 
-       if (tmp > (u32)vmw_view_max)
+       if (id == SVGA_3D_CMD_DX_DEFINE_DEPTHSTENCIL_VIEW_V2)
+               return vmw_view_ds;
+
+       if (tmp > (u32)vmw_view_ds)
                return vmw_view_max;
 
        return (enum vmw_view_type) tmp;
@@ -123,6 +126,7 @@ static inline enum vmw_so_type vmw_so_cmd_to_type(u32 id)
        case SVGA_3D_CMD_DX_DESTROY_DEPTHSTENCIL_STATE:
                return vmw_so_ds;
        case SVGA_3D_CMD_DX_DEFINE_RASTERIZER_STATE:
+       case SVGA_3D_CMD_DX_DEFINE_RASTERIZER_STATE_V2:
        case SVGA_3D_CMD_DX_DESTROY_RASTERIZER_STATE:
                return vmw_so_rs;
        case SVGA_3D_CMD_DX_DEFINE_SAMPLER_STATE: