d3d12: Treat depth/stencil as planar for plane count helper
authorJesse Natalie <jenatali@microsoft.com>
Wed, 20 Jul 2022 14:00:36 +0000 (07:00 -0700)
committerMarge Bot <emma+marge@anholt.net>
Fri, 22 Jul 2022 14:42:56 +0000 (14:42 +0000)
Reviewed-by: Bill Kristiansen <billkris@microsoft.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17688>

src/gallium/drivers/d3d12/d3d12_bufmgr.cpp
src/gallium/drivers/d3d12/d3d12_bufmgr.h
src/gallium/drivers/d3d12/d3d12_format.c
src/gallium/drivers/d3d12/d3d12_resource.cpp

index 68df8e9..332400b 100644 (file)
@@ -53,7 +53,7 @@ d3d12_bufmgr(struct pb_manager *mgr)
 }
 
 static struct TransitionableResourceState *
-create_trans_state(ID3D12Resource *res, enum pipe_format format)
+create_trans_state(ID3D12Resource *res)
 {
    D3D12_RESOURCE_DESC desc = GetDesc(res);
 
@@ -63,8 +63,6 @@ create_trans_state(ID3D12Resource *res, enum pipe_format format)
    unsigned total_subresources = desc.MipLevels *
                                  arraySize *
                                  d3d12_non_opaque_plane_count(desc.Format);
-   total_subresources *= util_format_has_stencil(util_format_description(format)) ?
-                         2 : 1;
 
    return new TransitionableResourceState(res,
                                           total_subresources,
@@ -98,7 +96,7 @@ d3d12_debug_describe_bo(char *buf, struct d3d12_bo *ptr)
 }
 
 struct d3d12_bo *
-d3d12_bo_wrap_res(struct d3d12_screen *screen, ID3D12Resource *res, enum pipe_format format, enum d3d12_residency_status residency)
+d3d12_bo_wrap_res(struct d3d12_screen *screen, ID3D12Resource *res, enum d3d12_residency_status residency)
 {
    struct d3d12_bo *bo;
 
@@ -109,7 +107,7 @@ d3d12_bo_wrap_res(struct d3d12_screen *screen, ID3D12Resource *res, enum pipe_fo
    pipe_reference_init(&bo->reference, 1);
    bo->screen = screen;
    bo->res = res;
-   bo->trans_state = create_trans_state(res, format);
+   bo->trans_state = create_trans_state(res);
    bo->unique_id = p_atomic_inc_return(&screen->resource_id_generator);
 
    bo->residency_status = residency;
@@ -166,7 +164,7 @@ d3d12_bo_new(struct d3d12_screen *screen, uint64_t size, const pb_desc *pb_desc)
    if (FAILED(hres))
       return NULL;
 
-   return d3d12_bo_wrap_res(screen, res, PIPE_FORMAT_NONE, init_residency);
+   return d3d12_bo_wrap_res(screen, res, init_residency);
 }
 
 struct d3d12_bo *
index 6b3ba01..ce2001b 100644 (file)
@@ -115,7 +115,7 @@ struct d3d12_bo *
 d3d12_bo_new(struct d3d12_screen *screen, uint64_t size, uint64_t alignment);
 
 struct d3d12_bo *
-d3d12_bo_wrap_res(struct d3d12_screen *screen, ID3D12Resource *res, enum pipe_format format, enum d3d12_residency_status residency);
+d3d12_bo_wrap_res(struct d3d12_screen *screen, ID3D12Resource *res, enum d3d12_residency_status residency);
 
 struct d3d12_bo *
 d3d12_bo_wrap_buffer(struct d3d12_screen *screen, struct pb_buffer *buf);
index 486150b..59bcb10 100644 (file)
@@ -426,6 +426,16 @@ d3d12_non_opaque_plane_count(DXGI_FORMAT format)
    case DXGI_FORMAT_NV11:
       return 2;
 
+   case DXGI_FORMAT_R24G8_TYPELESS:
+   case DXGI_FORMAT_R24_UNORM_X8_TYPELESS:
+   case DXGI_FORMAT_X24_TYPELESS_G8_UINT:
+   case DXGI_FORMAT_D24_UNORM_S8_UINT:
+   case DXGI_FORMAT_R32G8X24_TYPELESS:
+   case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS:
+   case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT:
+   case DXGI_FORMAT_D32_FLOAT_S8X24_UINT:
+      return 2;
+
    default:
       return 1;
    }
index 8ccf5eb..4d1a2b0 100644 (file)
@@ -293,7 +293,7 @@ init_texture(struct d3d12_screen *screen,
                                              &res->dt_stride);
    }
 
-   res->bo = d3d12_bo_wrap_res(screen, d3d12_res, templ->format, init_residency);
+   res->bo = d3d12_bo_wrap_res(screen, d3d12_res, init_residency);
 
    return true;
 }
@@ -621,7 +621,7 @@ d3d12_resource_from_handle(struct pipe_screen *pscreen,
    res->first_plane = &res->base.b;
 
    if (!res->bo) {
-      res->bo = d3d12_bo_wrap_res(screen, d3d12_res, res->overall_format, d3d12_permanently_resident);
+      res->bo = d3d12_bo_wrap_res(screen, d3d12_res, d3d12_permanently_resident);
    }
    init_valid_range(res);