d3d12: Fix TBOs from suballocated buffers

Reviewed-by: Sil Vilerino <sivileri@microsoft.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14933>
This commit is contained in:
Jesse Natalie 2022-02-08 06:46:02 -08:00 committed by Marge Bot
parent c35f77aa84
commit 58a9a63d9e
1 changed files with 6 additions and 2 deletions

View File

@ -817,6 +817,10 @@ d3d12_init_sampler_view_descriptor(struct d3d12_sampler_view *sampler_view)
component_mapping((pipe_swizzle)sampler_view->swizzle_override_a, D3D12_SHADER_COMPONENT_MAPPING_FROM_MEMORY_COMPONENT_3)
);
uint64_t offset = 0;
ID3D12Resource *d3d12_res = d3d12_resource_underlying(res, &offset);
assert(offset == 0 || res->base.b.target == PIPE_BUFFER);
unsigned array_size = state->u.tex.last_layer - state->u.tex.first_layer + 1;
switch (desc.ViewDimension) {
case D3D12_SRV_DIMENSION_TEXTURE1D:
@ -889,15 +893,15 @@ d3d12_init_sampler_view_descriptor(struct d3d12_sampler_view *sampler_view)
desc.TextureCubeArray.ResourceMinLODClamp = 0.0f;
break;
case D3D12_SRV_DIMENSION_BUFFER:
desc.Buffer.FirstElement = 0;
desc.Buffer.StructureByteStride = 0;
desc.Buffer.FirstElement = offset / util_format_get_blocksize(state->format);
desc.Buffer.NumElements = texture->width0 / util_format_get_blocksize(state->format);
break;
default:
unreachable("Invalid SRV dimension");
}
screen->dev->CreateShaderResourceView(d3d12_resource_resource(res), &desc,
screen->dev->CreateShaderResourceView(d3d12_res, &desc,
sampler_view->handle.cpu_handle);
}