From: Jesse Natalie Date: Wed, 20 Jul 2022 14:00:36 +0000 (-0700) Subject: d3d12: Treat depth/stencil as planar for plane count helper X-Git-Tag: upstream/22.3.5~5752 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f972a57b0b90172506af042eb7c7bd93fdf307be;p=platform%2Fupstream%2Fmesa.git d3d12: Treat depth/stencil as planar for plane count helper Reviewed-by: Bill Kristiansen Part-of: --- diff --git a/src/gallium/drivers/d3d12/d3d12_bufmgr.cpp b/src/gallium/drivers/d3d12/d3d12_bufmgr.cpp index 68df8e9..332400b 100644 --- a/src/gallium/drivers/d3d12/d3d12_bufmgr.cpp +++ b/src/gallium/drivers/d3d12/d3d12_bufmgr.cpp @@ -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 * diff --git a/src/gallium/drivers/d3d12/d3d12_bufmgr.h b/src/gallium/drivers/d3d12/d3d12_bufmgr.h index 6b3ba01..ce2001b 100644 --- a/src/gallium/drivers/d3d12/d3d12_bufmgr.h +++ b/src/gallium/drivers/d3d12/d3d12_bufmgr.h @@ -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); diff --git a/src/gallium/drivers/d3d12/d3d12_format.c b/src/gallium/drivers/d3d12/d3d12_format.c index 486150b..59bcb10 100644 --- a/src/gallium/drivers/d3d12/d3d12_format.c +++ b/src/gallium/drivers/d3d12/d3d12_format.c @@ -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; } diff --git a/src/gallium/drivers/d3d12/d3d12_resource.cpp b/src/gallium/drivers/d3d12/d3d12_resource.cpp index 8ccf5eb..4d1a2b0 100644 --- a/src/gallium/drivers/d3d12/d3d12_resource.cpp +++ b/src/gallium/drivers/d3d12/d3d12_resource.cpp @@ -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);