Mesa (main): d3d10umd: Update for transfer interface changes.
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Tue Oct 26 14:16:19 UTC 2021
Module: Mesa
Branch: main
Commit: cf464affb426913fb56963651dc5aad47f50f5c2
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=cf464affb426913fb56963651dc5aad47f50f5c2
Author: Jose Fonseca <jfonseca at vmware.com>
Date: Mon Jul 19 14:35:48 2021 +0100
d3d10umd: Update for transfer interface changes.
Update for eb74f977693221eb1419f4827f549d48251f22da.
Reviewed-by: Roland Scheidegger <sroland at vmware.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11973>
---
src/gallium/frontends/d3d10umd/Resource.cpp | 131 ++++++++++++++++++++--------
src/gallium/frontends/d3d10umd/State.h | 1 +
2 files changed, 95 insertions(+), 37 deletions(-)
diff --git a/src/gallium/frontends/d3d10umd/Resource.cpp b/src/gallium/frontends/d3d10umd/Resource.cpp
index a7910d2e3cf..3dd91365b23 100644
--- a/src/gallium/frontends/d3d10umd/Resource.cpp
+++ b/src/gallium/frontends/d3d10umd/Resource.cpp
@@ -270,6 +270,7 @@ CreateResource(D3D10DDI_HDEVICE hDevice, // IN
templat.target = translate_texture_target( pCreateResource->ResourceDimension,
pCreateResource->ArraySize );
+ pResource->buffer = templat.target == PIPE_BUFFER;
if (pCreateResource->Format == DXGI_FORMAT_UNKNOWN) {
assert(pCreateResource->ResourceDimension == D3D10DDIRESOURCE_BUFFER);
@@ -315,37 +316,62 @@ CreateResource(D3D10DDI_HDEVICE hDevice, // IN
sizeof *pResource->transfers);
if (pCreateResource->pInitialDataUP) {
- for (UINT SubResource = 0; SubResource < pResource->NumSubResources; ++SubResource) {
+ if (pResource->buffer) {
+ assert(pResource->NumSubResources == 1);
const D3D10_DDIARG_SUBRESOURCE_UP* pInitialDataUP =
- &pCreateResource->pInitialDataUP[SubResource];
+ &pCreateResource->pInitialDataUP[0];
unsigned level;
struct pipe_box box;
- subResourceBox(pResource->resource, SubResource, &level, &box);
+ subResourceBox(pResource->resource, 0, &level, &box);
struct pipe_transfer *transfer;
void *map;
- map = pipe->transfer_map(pipe,
- pResource->resource,
- level,
- PIPE_MAP_WRITE |
- PIPE_MAP_UNSYNCHRONIZED,
- &box,
- &transfer);
+ map = pipe->buffer_map(pipe,
+ pResource->resource,
+ level,
+ PIPE_MAP_WRITE |
+ PIPE_MAP_UNSYNCHRONIZED,
+ &box,
+ &transfer);
assert(map);
if (map) {
- for (int z = 0; z < box.depth; ++z) {
- ubyte *dst = (ubyte*)map + z*transfer->layer_stride;
- const ubyte *src = (const ubyte*)pInitialDataUP->pSysMem + z*pInitialDataUP->SysMemSlicePitch;
- util_copy_rect(dst,
- templat.format,
- transfer->stride,
- 0, 0, box.width, box.height,
- src,
- pInitialDataUP->SysMemPitch,
- 0, 0);
+ memcpy(map, pInitialDataUP->pSysMem, box.width);
+ pipe_buffer_unmap(pipe, transfer);
+ }
+ } else {
+ for (UINT SubResource = 0; SubResource < pResource->NumSubResources; ++SubResource) {
+ const D3D10_DDIARG_SUBRESOURCE_UP* pInitialDataUP =
+ &pCreateResource->pInitialDataUP[SubResource];
+
+ unsigned level;
+ struct pipe_box box;
+ subResourceBox(pResource->resource, SubResource, &level, &box);
+
+ struct pipe_transfer *transfer;
+ void *map;
+ map = pipe->texture_map(pipe,
+ pResource->resource,
+ level,
+ PIPE_MAP_WRITE |
+ PIPE_MAP_UNSYNCHRONIZED,
+ &box,
+ &transfer);
+ assert(map);
+ if (map) {
+ for (int z = 0; z < box.depth; ++z) {
+ ubyte *dst = (ubyte*)map + z*transfer->layer_stride;
+ const ubyte *src = (const ubyte*)pInitialDataUP->pSysMem + z*pInitialDataUP->SysMemSlicePitch;
+ util_copy_rect(dst,
+ templat.format,
+ transfer->stride,
+ 0, 0, box.width, box.height,
+ src,
+ pInitialDataUP->SysMemPitch,
+ 0, 0);
+ }
+ pipe_texture_unmap(pipe, transfer);
}
- pipe_transfer_unmap(pipe, transfer);
}
}
}
@@ -423,7 +449,11 @@ DestroyResource(D3D10DDI_HDEVICE hDevice, // IN
for (UINT SubResource = 0; SubResource < pResource->NumSubResources; ++SubResource) {
if (pResource->transfers[SubResource]) {
- pipe_transfer_unmap(pipe, pResource->transfers[SubResource]);
+ if (pResource->buffer) {
+ pipe_buffer_unmap(pipe, pResource->transfers[SubResource]);
+ } else {
+ pipe_texture_unmap(pipe, pResource->transfers[SubResource]);
+ }
pResource->transfers[SubResource] = NULL;
}
}
@@ -493,12 +523,21 @@ ResourceMap(D3D10DDI_HDEVICE hDevice, // IN
assert(!pResource->transfers[SubResource]);
void *map;
- map = pipe->transfer_map(pipe,
- resource,
- level,
- usage,
- &box,
- &pResource->transfers[SubResource]);
+ if (pResource->buffer) {
+ map = pipe->buffer_map(pipe,
+ resource,
+ level,
+ usage,
+ &box,
+ &pResource->transfers[SubResource]);
+ } else {
+ map = pipe->texture_map(pipe,
+ resource,
+ level,
+ usage,
+ &box,
+ &pResource->transfers[SubResource]);
+ }
if (!map) {
DebugPrintf("%s: failed to map resource\n", __FUNCTION__);
SetError(hDevice, E_FAIL);
@@ -534,7 +573,11 @@ ResourceUnmap(D3D10DDI_HDEVICE hDevice, // IN
assert(SubResource < pResource->NumSubResources);
if (pResource->transfers[SubResource]) {
- pipe_transfer_unmap(pipe, pResource->transfers[SubResource]);
+ if (pResource->buffer) {
+ pipe_buffer_unmap(pipe, pResource->transfers[SubResource]);
+ } else {
+ pipe_texture_unmap(pipe, pResource->transfers[SubResource]);
+ }
pResource->transfers[SubResource] = NULL;
}
}
@@ -834,7 +877,8 @@ ResourceUpdateSubResourceUP(D3D10DDI_HDEVICE hDevice, // IN
}
struct pipe_context *pipe = pDevice->pipe;
- struct pipe_resource *dst_resource = CastPipeResource(hDstResource);
+ Resource *pDstResource = CastResource(hDstResource);
+ struct pipe_resource *dst_resource = pDstResource->resource;
unsigned level;
struct pipe_box box;
@@ -855,12 +899,21 @@ ResourceUpdateSubResourceUP(D3D10DDI_HDEVICE hDevice, // IN
struct pipe_transfer *transfer;
void *map;
- map = pipe->transfer_map(pipe,
- dst_resource,
- level,
- PIPE_MAP_WRITE | PIPE_MAP_DISCARD_RANGE,
- &box,
- &transfer);
+ if (pDstResource->buffer) {
+ map = pipe->buffer_map(pipe,
+ dst_resource,
+ level,
+ PIPE_MAP_WRITE | PIPE_MAP_DISCARD_RANGE,
+ &box,
+ &transfer);
+ } else {
+ map = pipe->texture_map(pipe,
+ dst_resource,
+ level,
+ PIPE_MAP_WRITE | PIPE_MAP_DISCARD_RANGE,
+ &box,
+ &transfer);
+ }
assert(map);
if (map) {
for (int z = 0; z < box.depth; ++z) {
@@ -874,7 +927,11 @@ ResourceUpdateSubResourceUP(D3D10DDI_HDEVICE hDevice, // IN
RowPitch,
0, 0);
}
- pipe_transfer_unmap(pipe, transfer);
+ if (pDstResource->buffer) {
+ pipe_buffer_unmap(pipe, transfer);
+ } else {
+ pipe_texture_unmap(pipe, transfer);
+ }
}
}
diff --git a/src/gallium/frontends/d3d10umd/State.h b/src/gallium/frontends/d3d10umd/State.h
index 5cb865ce695..3e45cb79743 100644
--- a/src/gallium/frontends/d3d10umd/State.h
+++ b/src/gallium/frontends/d3d10umd/State.h
@@ -150,6 +150,7 @@ struct Resource
DXGI_FORMAT Format;
UINT MipLevels;
UINT NumSubResources;
+ bool buffer;
struct pipe_resource *resource;
struct pipe_transfer **transfers;
struct pipe_stream_output_target *so_target;
More information about the mesa-commit
mailing list