mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-04-23 00:50:36 +02:00
etnaviv: Support 128 bit formats transfers
Signed-off-by: Christian Gmeiner <cgmeiner@igalia.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/37597>
This commit is contained in:
parent
511a743587
commit
f4689fd467
1 changed files with 31 additions and 11 deletions
|
|
@ -29,6 +29,7 @@
|
|||
#include "etnaviv_context.h"
|
||||
#include "etnaviv_debug.h"
|
||||
#include "etnaviv_etc2.h"
|
||||
#include "etnaviv_format.h"
|
||||
#include "etnaviv_rs.h"
|
||||
#include "etnaviv_screen.h"
|
||||
|
||||
|
|
@ -230,13 +231,23 @@ etna_texture_unmap(struct pipe_context *pctx, struct pipe_transfer *ptrans)
|
|||
/* map buffer object */
|
||||
if (rsc->layout == ETNA_LAYOUT_TILED) {
|
||||
for (unsigned z = 0; z < ptrans->box.depth; z++) {
|
||||
etna_texture_tile(
|
||||
trans->mapped + (ptrans->box.z + z) * res_level->layer_stride,
|
||||
trans->staging + z * ptrans->layer_stride,
|
||||
ptrans->box.x, ptrans->box.y,
|
||||
res_level->stride, ptrans->box.width, ptrans->box.height,
|
||||
ptrans->stride, util_format_get_blocksize(rsc->base.format));
|
||||
if (format_is_128bit(rsc->base.format)) {
|
||||
etna_texture_tile_rgba32f(
|
||||
trans->mapped + (ptrans->box.z + z) * res_level->layer_stride,
|
||||
trans->staging + z * ptrans->layer_stride,
|
||||
ptrans->box.x, ptrans->box.y,
|
||||
res_level->stride, ptrans->box.width, ptrans->box.height,
|
||||
ptrans->stride, (res_level->size * res_level->depth) / 2);
|
||||
|
||||
} else {
|
||||
etna_texture_tile(
|
||||
trans->mapped + (ptrans->box.z + z) * res_level->layer_stride,
|
||||
trans->staging + z * ptrans->layer_stride,
|
||||
ptrans->box.x, ptrans->box.y,
|
||||
res_level->stride, ptrans->box.width, ptrans->box.height,
|
||||
ptrans->stride, util_format_get_blocksize(rsc->base.format));
|
||||
}
|
||||
}
|
||||
} else if (rsc->layout == ETNA_LAYOUT_LINEAR) {
|
||||
util_copy_box(trans->mapped, rsc->base.format, res_level->stride,
|
||||
res_level->layer_stride, ptrans->box.x,
|
||||
|
|
@ -465,11 +476,20 @@ etna_texture_map(struct pipe_context *pctx, struct pipe_resource *prsc,
|
|||
if (usage & PIPE_MAP_READ) {
|
||||
if (rsc->layout == ETNA_LAYOUT_TILED) {
|
||||
for (unsigned z = 0; z < ptrans->box.depth; z++) {
|
||||
etna_texture_untile(trans->staging + z * ptrans->layer_stride,
|
||||
trans->mapped + (ptrans->box.z + z) * res_level->layer_stride,
|
||||
ptrans->box.x, ptrans->box.y, res_level->stride,
|
||||
ptrans->box.width, ptrans->box.height, ptrans->stride,
|
||||
util_format_get_blocksize(rsc->base.format));
|
||||
if (format_is_128bit(rsc->base.format)) {
|
||||
etna_texture_untile_rgba32f(trans->staging + z * ptrans->layer_stride,
|
||||
trans->mapped + (ptrans->box.z + z) * res_level->layer_stride,
|
||||
ptrans->box.x, ptrans->box.y, res_level->stride,
|
||||
ptrans->box.width, ptrans->box.height, ptrans->stride,
|
||||
(res_level->size * res_level->depth) / 2);
|
||||
|
||||
} else {
|
||||
etna_texture_untile(trans->staging + z * ptrans->layer_stride,
|
||||
trans->mapped + (ptrans->box.z + z) * res_level->layer_stride,
|
||||
ptrans->box.x, ptrans->box.y, res_level->stride,
|
||||
ptrans->box.width, ptrans->box.height, ptrans->stride,
|
||||
util_format_get_blocksize(rsc->base.format));
|
||||
}
|
||||
}
|
||||
} else if (rsc->layout == ETNA_LAYOUT_LINEAR) {
|
||||
util_copy_box(trans->staging, rsc->base.format, ptrans->stride,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue