d3d12: Treat depth/stencil as planar for plane count helper

Reviewed-by: Bill Kristiansen <billkris@microsoft.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17688>
This commit is contained in:
Jesse Natalie 2022-07-20 07:00:36 -07:00 committed by Marge Bot
parent 6bc5df76d3
commit f972a57b0b
4 changed files with 17 additions and 9 deletions

View 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 *

View 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);

View 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;
}

View 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);