nvk/copy: Split out nvk_remap_extract_aspect
Reviewed-by: Faith Ekstrand <faith.ekstrand@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/36950>
This commit is contained in:
committed by
Faith Ekstrand
parent
caced4e028
commit
5e1c705bd1
@@ -537,6 +537,63 @@ nvk_CmdCopyBufferToImage2(VkCommandBuffer commandBuffer,
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
nvk_remap_extract_aspect(struct nouveau_copy *copy,
|
||||
struct nouveau_copy *copy2,
|
||||
enum pipe_format p_format,
|
||||
const VkImageAspectFlagBits aspects)
|
||||
{
|
||||
switch (p_format) {
|
||||
case PIPE_FORMAT_Z32_FLOAT_S8X24_UINT:
|
||||
if (aspects == VK_IMAGE_ASPECT_DEPTH_BIT) {
|
||||
copy->remap.comp_size = 4;
|
||||
copy->remap.dst[0] = NV90B5_SET_REMAP_COMPONENTS_DST_X_SRC_X;
|
||||
copy->remap.dst[1] = NV90B5_SET_REMAP_COMPONENTS_DST_Y_NO_WRITE;
|
||||
copy->remap.dst[2] = NV90B5_SET_REMAP_COMPONENTS_DST_Z_NO_WRITE;
|
||||
copy->remap.dst[3] = NV90B5_SET_REMAP_COMPONENTS_DST_W_NO_WRITE;
|
||||
} else {
|
||||
assert(aspects == VK_IMAGE_ASPECT_STENCIL_BIT);
|
||||
copy2->extent_el = copy->extent_el;
|
||||
|
||||
copy->remap.comp_size = 2;
|
||||
copy->remap.dst[0] = NV90B5_SET_REMAP_COMPONENTS_DST_X_SRC_Z;
|
||||
copy->remap.dst[1] = NV90B5_SET_REMAP_COMPONENTS_DST_Y_NO_WRITE;
|
||||
copy->remap.dst[2] = NV90B5_SET_REMAP_COMPONENTS_DST_Z_NO_WRITE;
|
||||
copy->remap.dst[3] = NV90B5_SET_REMAP_COMPONENTS_DST_W_NO_WRITE;
|
||||
|
||||
copy2->remap.comp_size = 1;
|
||||
copy2->remap.dst[0] = NV90B5_SET_REMAP_COMPONENTS_DST_X_SRC_X;
|
||||
copy2->remap.dst[1] = NV90B5_SET_REMAP_COMPONENTS_DST_Y_NO_WRITE;
|
||||
copy2->remap.dst[2] = NV90B5_SET_REMAP_COMPONENTS_DST_Z_NO_WRITE;
|
||||
copy2->remap.dst[3] = NV90B5_SET_REMAP_COMPONENTS_DST_W_NO_WRITE;
|
||||
}
|
||||
break;
|
||||
case PIPE_FORMAT_Z24_UNORM_S8_UINT:
|
||||
if (aspects == VK_IMAGE_ASPECT_DEPTH_BIT) {
|
||||
copy->remap.comp_size = 1;
|
||||
copy->remap.dst[0] = NV90B5_SET_REMAP_COMPONENTS_DST_X_SRC_X;
|
||||
copy->remap.dst[1] = NV90B5_SET_REMAP_COMPONENTS_DST_Y_SRC_Y;
|
||||
copy->remap.dst[2] = NV90B5_SET_REMAP_COMPONENTS_DST_Z_SRC_Z;
|
||||
copy->remap.dst[3] = NV90B5_SET_REMAP_COMPONENTS_DST_W_NO_WRITE;
|
||||
} else {
|
||||
assert(aspects == VK_IMAGE_ASPECT_STENCIL_BIT);
|
||||
copy->remap.comp_size = 1;
|
||||
copy->remap.dst[0] = NV90B5_SET_REMAP_COMPONENTS_DST_X_SRC_W;
|
||||
copy->remap.dst[1] = NV90B5_SET_REMAP_COMPONENTS_DST_Y_NO_WRITE;
|
||||
copy->remap.dst[2] = NV90B5_SET_REMAP_COMPONENTS_DST_Z_NO_WRITE;
|
||||
copy->remap.dst[3] = NV90B5_SET_REMAP_COMPONENTS_DST_W_NO_WRITE;
|
||||
}
|
||||
break;
|
||||
case PIPE_FORMAT_Z16_UNORM_S8_UINT:
|
||||
case PIPE_FORMAT_S8_UINT_Z24_UNORM:
|
||||
UNREACHABLE("Unsupported packed depth/stencil format");
|
||||
break;
|
||||
default:
|
||||
copy->remap = nouveau_copy_remap_format(p_format);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL
|
||||
nvk_CmdCopyImageToBuffer2(VkCommandBuffer commandBuffer,
|
||||
const VkCopyImageToBufferInfo2 *pCopyImageToBufferInfo)
|
||||
@@ -574,59 +631,13 @@ nvk_CmdCopyImageToBuffer2(VkCommandBuffer commandBuffer,
|
||||
};
|
||||
struct nouveau_copy copy2 = { 0 };
|
||||
|
||||
switch (format.p_format) {
|
||||
case PIPE_FORMAT_Z32_FLOAT_S8X24_UINT:
|
||||
if (aspects == VK_IMAGE_ASPECT_DEPTH_BIT) {
|
||||
copy.remap.comp_size = 4;
|
||||
copy.remap.dst[0] = NV90B5_SET_REMAP_COMPONENTS_DST_X_SRC_X;
|
||||
copy.remap.dst[1] = NV90B5_SET_REMAP_COMPONENTS_DST_Y_NO_WRITE;
|
||||
copy.remap.dst[2] = NV90B5_SET_REMAP_COMPONENTS_DST_Z_NO_WRITE;
|
||||
copy.remap.dst[3] = NV90B5_SET_REMAP_COMPONENTS_DST_W_NO_WRITE;
|
||||
} else {
|
||||
assert(aspects == VK_IMAGE_ASPECT_STENCIL_BIT);
|
||||
copy2.dst = copy.dst;
|
||||
copy2.extent_el = copy.extent_el;
|
||||
copy.dst = copy2.src =
|
||||
nouveau_copy_rect_image(src, &src->stencil_copy_temp,
|
||||
region->imageOffset,
|
||||
®ion->imageSubresource);
|
||||
|
||||
copy.remap.comp_size = 2;
|
||||
copy.remap.dst[0] = NV90B5_SET_REMAP_COMPONENTS_DST_X_SRC_Z;
|
||||
copy.remap.dst[1] = NV90B5_SET_REMAP_COMPONENTS_DST_Y_NO_WRITE;
|
||||
copy.remap.dst[2] = NV90B5_SET_REMAP_COMPONENTS_DST_Z_NO_WRITE;
|
||||
copy.remap.dst[3] = NV90B5_SET_REMAP_COMPONENTS_DST_W_NO_WRITE;
|
||||
|
||||
copy2.remap.comp_size = 1;
|
||||
copy2.remap.dst[0] = NV90B5_SET_REMAP_COMPONENTS_DST_X_SRC_X;
|
||||
copy2.remap.dst[1] = NV90B5_SET_REMAP_COMPONENTS_DST_Y_NO_WRITE;
|
||||
copy2.remap.dst[2] = NV90B5_SET_REMAP_COMPONENTS_DST_Z_NO_WRITE;
|
||||
copy2.remap.dst[3] = NV90B5_SET_REMAP_COMPONENTS_DST_W_NO_WRITE;
|
||||
}
|
||||
break;
|
||||
case PIPE_FORMAT_Z24_UNORM_S8_UINT:
|
||||
if (aspects == VK_IMAGE_ASPECT_DEPTH_BIT) {
|
||||
copy.remap.comp_size = 1;
|
||||
copy.remap.dst[0] = NV90B5_SET_REMAP_COMPONENTS_DST_X_SRC_X;
|
||||
copy.remap.dst[1] = NV90B5_SET_REMAP_COMPONENTS_DST_Y_SRC_Y;
|
||||
copy.remap.dst[2] = NV90B5_SET_REMAP_COMPONENTS_DST_Z_SRC_Z;
|
||||
copy.remap.dst[3] = NV90B5_SET_REMAP_COMPONENTS_DST_W_NO_WRITE;
|
||||
} else {
|
||||
assert(aspects == VK_IMAGE_ASPECT_STENCIL_BIT);
|
||||
copy.remap.comp_size = 1;
|
||||
copy.remap.dst[0] = NV90B5_SET_REMAP_COMPONENTS_DST_X_SRC_W;
|
||||
copy.remap.dst[1] = NV90B5_SET_REMAP_COMPONENTS_DST_Y_NO_WRITE;
|
||||
copy.remap.dst[2] = NV90B5_SET_REMAP_COMPONENTS_DST_Z_NO_WRITE;
|
||||
copy.remap.dst[3] = NV90B5_SET_REMAP_COMPONENTS_DST_W_NO_WRITE;
|
||||
}
|
||||
break;
|
||||
case PIPE_FORMAT_Z16_UNORM_S8_UINT:
|
||||
case PIPE_FORMAT_S8_UINT_Z24_UNORM:
|
||||
UNREACHABLE("Unsupported packed depth/stencil format");
|
||||
break;
|
||||
default:
|
||||
copy.remap = nouveau_copy_remap_format(format.p_format);
|
||||
break;
|
||||
nvk_remap_extract_aspect(©, ©2, format.p_format, aspects);
|
||||
if (copy2.extent_el.width > 0) {
|
||||
copy2.dst = copy.dst;
|
||||
copy.dst = copy2.src =
|
||||
nouveau_copy_rect_image(src, &src->stencil_copy_temp,
|
||||
region->imageOffset,
|
||||
®ion->imageSubresource);
|
||||
}
|
||||
|
||||
nouveau_copy_rect(cmd, ©);
|
||||
|
||||
Reference in New Issue
Block a user