anv: Set only one ISL usage bit (RT/texture) for CopyBuffer sources

Most uses of this function deal with destination buffers, but for
copy_buffer_to_image, the buffer is the source, and isn't rendered
to.  We should avoid setting ISL_SURF_USAGE_RENDER_TARGET_BIT.
Also, we should avoid setting ISL_SURF_USAGE_TEXTURE_BIT for the
destination, which isn't sampled from.

Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7104>
This commit is contained in:
Kenneth Graunke
2020-09-30 15:05:54 -07:00
committed by Marge Bot
parent 4df98c3c0c
commit 103ad427bc

View File

@@ -132,6 +132,7 @@ get_blorp_surf_for_anv_buffer(struct anv_device *device,
struct anv_buffer *buffer, uint64_t offset, struct anv_buffer *buffer, uint64_t offset,
uint32_t width, uint32_t height, uint32_t width, uint32_t height,
uint32_t row_pitch, enum isl_format format, uint32_t row_pitch, enum isl_format format,
bool is_dest,
struct blorp_surf *blorp_surf, struct blorp_surf *blorp_surf,
struct isl_surf *isl_surf) struct isl_surf *isl_surf)
{ {
@@ -171,8 +172,8 @@ get_blorp_surf_for_anv_buffer(struct anv_device *device,
.array_len = 1, .array_len = 1,
.samples = 1, .samples = 1,
.row_pitch_B = row_pitch, .row_pitch_B = row_pitch,
.usage = ISL_SURF_USAGE_TEXTURE_BIT | .usage = is_dest ? ISL_SURF_USAGE_RENDER_TARGET_BIT
ISL_SURF_USAGE_RENDER_TARGET_BIT, : ISL_SURF_USAGE_TEXTURE_BIT,
.tiling_flags = ISL_TILING_LINEAR_BIT); .tiling_flags = ISL_TILING_LINEAR_BIT);
assert(ok); assert(ok);
} }
@@ -567,7 +568,7 @@ copy_buffer_to_image(struct anv_cmd_buffer *cmd_buffer,
get_blorp_surf_for_anv_buffer(cmd_buffer->device, get_blorp_surf_for_anv_buffer(cmd_buffer->device,
anv_buffer, region->bufferOffset, anv_buffer, region->bufferOffset,
buffer_extent.width, buffer_extent.height, buffer_extent.width, buffer_extent.height,
buffer_row_pitch, buffer_format, buffer_row_pitch, buffer_format, false,
&buffer.surf, &buffer_isl_surf); &buffer.surf, &buffer_isl_surf);
bool dst_has_shadow = false; bool dst_has_shadow = false;
@@ -1111,7 +1112,7 @@ void anv_CmdFillBuffer(
get_blorp_surf_for_anv_buffer(cmd_buffer->device, get_blorp_surf_for_anv_buffer(cmd_buffer->device,
dst_buffer, dstOffset, dst_buffer, dstOffset,
MAX_SURFACE_DIM, MAX_SURFACE_DIM, MAX_SURFACE_DIM, MAX_SURFACE_DIM,
MAX_SURFACE_DIM * bs, isl_format, MAX_SURFACE_DIM * bs, isl_format, true,
&surf, &isl_surf); &surf, &isl_surf);
blorp_clear(&batch, &surf, isl_format, ISL_SWIZZLE_IDENTITY, blorp_clear(&batch, &surf, isl_format, ISL_SWIZZLE_IDENTITY,
@@ -1128,7 +1129,7 @@ void anv_CmdFillBuffer(
get_blorp_surf_for_anv_buffer(cmd_buffer->device, get_blorp_surf_for_anv_buffer(cmd_buffer->device,
dst_buffer, dstOffset, dst_buffer, dstOffset,
MAX_SURFACE_DIM, height, MAX_SURFACE_DIM, height,
MAX_SURFACE_DIM * bs, isl_format, MAX_SURFACE_DIM * bs, isl_format, true,
&surf, &isl_surf); &surf, &isl_surf);
blorp_clear(&batch, &surf, isl_format, ISL_SWIZZLE_IDENTITY, blorp_clear(&batch, &surf, isl_format, ISL_SWIZZLE_IDENTITY,
@@ -1143,7 +1144,7 @@ void anv_CmdFillBuffer(
get_blorp_surf_for_anv_buffer(cmd_buffer->device, get_blorp_surf_for_anv_buffer(cmd_buffer->device,
dst_buffer, dstOffset, dst_buffer, dstOffset,
width, 1, width, 1,
width * bs, isl_format, width * bs, isl_format, true,
&surf, &isl_surf); &surf, &isl_surf);
blorp_clear(&batch, &surf, isl_format, ISL_SWIZZLE_IDENTITY, blorp_clear(&batch, &surf, isl_format, ISL_SWIZZLE_IDENTITY,