}
static void
-r2d_clear_value(struct tu_cs *cs, VkFormat format, const VkClearValue *val)
+r2d_clear_value(struct tu_cs *cs, enum pipe_format format, const VkClearValue *val)
{
uint32_t clear_value[4] = {};
switch (format) {
- case VK_FORMAT_X8_D24_UNORM_PACK32:
- case VK_FORMAT_D24_UNORM_S8_UINT:
+ case PIPE_FORMAT_Z24_UNORM_S8_UINT:
+ case PIPE_FORMAT_Z24X8_UNORM:
/* cleared as r8g8b8a8_unorm using special format */
clear_value[0] = tu_pack_float32_for_unorm(val->depthStencil.depth, 24);
clear_value[1] = clear_value[0] >> 8;
clear_value[2] = clear_value[0] >> 16;
clear_value[3] = val->depthStencil.stencil;
break;
- case VK_FORMAT_D16_UNORM:
- case VK_FORMAT_D32_SFLOAT:
+ case PIPE_FORMAT_Z16_UNORM:
+ case PIPE_FORMAT_Z32_FLOAT:
/* R2D_FLOAT32 */
clear_value[0] = fui(val->depthStencil.depth);
break;
- case VK_FORMAT_S8_UINT:
+ case PIPE_FORMAT_S8_UINT:
clear_value[0] = val->depthStencil.stencil;
break;
- case VK_FORMAT_E5B9G9R9_UFLOAT_PACK32:
+ case PIPE_FORMAT_R9G9B9E5_FLOAT:
/* cleared as UINT32 */
clear_value[0] = float3_to_rgb9e5(val->color.float32);
break;
default:
- assert(!vk_format_is_depth_or_stencil(format));
- const struct util_format_description *desc = vk_format_description(format);
- enum a6xx_2d_ifmt ifmt = format_to_ifmt(tu_vk_format_to_pipe_format(format));
+ assert(!util_format_is_depth_or_stencil(format));
+ const struct util_format_description *desc = util_format_description(format);
+ enum a6xx_2d_ifmt ifmt = format_to_ifmt(format);
assert(desc && (desc->layout == UTIL_FORMAT_LAYOUT_PLAIN ||
- format == VK_FORMAT_B10G11R11_UFLOAT_PACK32));
+ format == PIPE_FORMAT_R11G11B10_FLOAT));
for (unsigned i = 0; i < desc->nr_channels; i++) {
const struct util_format_channel_description *ch = &desc->channel[i];
static void
r2d_src_buffer(struct tu_cmd_buffer *cmd,
struct tu_cs *cs,
- VkFormat vk_format,
+ enum pipe_format format,
uint64_t va, uint32_t pitch,
uint32_t width, uint32_t height)
{
- struct tu_native_format format = tu6_format_texture(tu_vk_format_to_pipe_format(vk_format), TILE6_LINEAR);
+ struct tu_native_format fmt = tu6_format_texture(format, TILE6_LINEAR);
tu_cs_emit_regs(cs,
A6XX_SP_PS_2D_SRC_INFO(
- .color_format = format.fmt,
- .color_swap = format.swap,
- .srgb = vk_format_is_srgb(vk_format),
+ .color_format = fmt.fmt,
+ .color_swap = fmt.swap,
+ .srgb = util_format_is_srgb(format),
.unk20 = 1,
.unk22 = 1),
A6XX_SP_PS_2D_SRC_SIZE(.width = width, .height = height),
}
static void
-r2d_dst_buffer(struct tu_cs *cs, VkFormat vk_format, uint64_t va, uint32_t pitch)
+r2d_dst_buffer(struct tu_cs *cs, enum pipe_format format, uint64_t va, uint32_t pitch)
{
- struct tu_native_format format = tu6_format_color(tu_vk_format_to_pipe_format(vk_format), TILE6_LINEAR);
+ struct tu_native_format fmt = tu6_format_color(format, TILE6_LINEAR);
tu_cs_emit_regs(cs,
A6XX_RB_2D_DST_INFO(
- .color_format = format.fmt,
- .color_swap = format.swap,
- .srgb = vk_format_is_srgb(vk_format)),
+ .color_format = fmt.fmt,
+ .color_swap = fmt.swap,
+ .srgb = util_format_is_srgb(format)),
A6XX_RB_2D_DST(.qword = va),
A6XX_RB_2D_DST_PITCH(pitch));
}
static void
r2d_setup_common(struct tu_cmd_buffer *cmd,
struct tu_cs *cs,
- VkFormat vk_format,
+ enum pipe_format format,
VkImageAspectFlags aspect_mask,
unsigned blit_param,
bool clear,
bool ubwc,
bool scissor)
{
- enum pipe_format format = tu_vk_format_to_pipe_format(vk_format);
enum a6xx_format fmt = tu6_base_format(format);
enum a6xx_2d_ifmt ifmt = format_to_ifmt(format);
+
uint32_t unknown_8c01 = 0;
- if ((vk_format == VK_FORMAT_D24_UNORM_S8_UINT ||
- vk_format == VK_FORMAT_X8_D24_UNORM_PACK32) && ubwc) {
+ if ((format == PIPE_FORMAT_Z24_UNORM_S8_UINT ||
+ format == PIPE_FORMAT_Z24X8_UNORM) && ubwc) {
fmt = FMT6_Z24_UNORM_S8_UINT_AS_R8G8B8A8;
}
/* note: the only format with partial clearing is D24S8 */
- if (vk_format == VK_FORMAT_D24_UNORM_S8_UINT) {
+ if (format == PIPE_FORMAT_Z24_UNORM_S8_UINT) {
/* preserve stencil channel */
if (aspect_mask == VK_IMAGE_ASPECT_DEPTH_BIT)
unknown_8c01 = 0x08000041;
.d24s8 = fmt == FMT6_Z24_UNORM_S8_UINT_AS_R8G8B8A8 && !clear,
.color_format = fmt,
.mask = 0xf,
- .ifmt = vk_format_is_srgb(vk_format) ? R2D_UNORM8_SRGB : ifmt,
+ .ifmt = util_format_is_srgb(format) ? R2D_UNORM8_SRGB : ifmt,
).value;
tu_cs_emit_pkt4(cs, REG_A6XX_RB_2D_BLIT_CNTL, 1);
fmt = FMT6_16_16_16_16_FLOAT;
tu_cs_emit_regs(cs, A6XX_SP_2D_DST_FORMAT(
- .sint = vk_format_is_sint(vk_format),
- .uint = vk_format_is_uint(vk_format),
+ .sint = util_format_is_pure_sint(format),
+ .uint = util_format_is_pure_uint(format),
.color_format = fmt,
- .srgb = vk_format_is_srgb(vk_format),
+ .srgb = util_format_is_srgb(format),
.mask = 0xf));
}
static void
r2d_setup(struct tu_cmd_buffer *cmd,
struct tu_cs *cs,
- VkFormat vk_format,
+ enum pipe_format format,
VkImageAspectFlags aspect_mask,
unsigned blit_param,
bool clear,
tu_emit_cache_flush_ccu(cmd, cs, TU_CMD_CCU_SYSMEM);
- r2d_setup_common(cmd, cs, vk_format, aspect_mask, blit_param, clear, ubwc, false);
+ r2d_setup_common(cmd, cs, format, aspect_mask, blit_param, clear, ubwc, false);
}
static void
}
static void
-r3d_clear_value(struct tu_cs *cs, VkFormat format, const VkClearValue *val)
+r3d_clear_value(struct tu_cs *cs, enum pipe_format format, const VkClearValue *val)
{
tu_cs_emit_pkt7(cs, CP_LOAD_STATE6_FRAG, 3 + 4);
tu_cs_emit(cs, CP_LOAD_STATE6_0_DST_OFF(0) |
tu_cs_emit(cs, CP_LOAD_STATE6_1_EXT_SRC_ADDR(0));
tu_cs_emit(cs, CP_LOAD_STATE6_2_EXT_SRC_ADDR_HI(0));
switch (format) {
- case VK_FORMAT_X8_D24_UNORM_PACK32:
- case VK_FORMAT_D24_UNORM_S8_UINT: {
+ case PIPE_FORMAT_Z24X8_UNORM:
+ case PIPE_FORMAT_Z24_UNORM_S8_UINT: {
/* cleared as r8g8b8a8_unorm using special format */
uint32_t tmp = tu_pack_float32_for_unorm(val->depthStencil.depth, 24);
tu_cs_emit(cs, fui((tmp & 0xff) / 255.0f));
tu_cs_emit(cs, fui((tmp >> 16 & 0xff) / 255.0f));
tu_cs_emit(cs, fui((val->depthStencil.stencil & 0xff) / 255.0f));
} break;
- case VK_FORMAT_D16_UNORM:
- case VK_FORMAT_D32_SFLOAT:
+ case PIPE_FORMAT_Z16_UNORM:
+ case PIPE_FORMAT_Z32_FLOAT:
tu_cs_emit(cs, fui(val->depthStencil.depth));
tu_cs_emit(cs, 0);
tu_cs_emit(cs, 0);
tu_cs_emit(cs, 0);
break;
- case VK_FORMAT_S8_UINT:
+ case PIPE_FORMAT_S8_UINT:
tu_cs_emit(cs, val->depthStencil.stencil & 0xff);
tu_cs_emit(cs, 0);
tu_cs_emit(cs, 0);
break;
default:
/* as color formats use clear value as-is */
- assert(!vk_format_is_depth_or_stencil(format));
+ assert(!util_format_is_depth_or_stencil(format));
tu_cs_emit_array(cs, val->color.uint32, 4);
break;
}
static void
r3d_src_buffer(struct tu_cmd_buffer *cmd,
struct tu_cs *cs,
- VkFormat vk_format,
+ enum pipe_format format,
uint64_t va, uint32_t pitch,
uint32_t width, uint32_t height)
{
uint32_t desc[A6XX_TEX_CONST_DWORDS];
- struct tu_native_format format = tu6_format_texture(tu_vk_format_to_pipe_format(vk_format), TILE6_LINEAR);
+ struct tu_native_format fmt = tu6_format_texture(format, TILE6_LINEAR);
desc[0] =
- COND(vk_format_is_srgb(vk_format), A6XX_TEX_CONST_0_SRGB) |
- A6XX_TEX_CONST_0_FMT(format.fmt) |
- A6XX_TEX_CONST_0_SWAP(format.swap) |
+ COND(util_format_is_srgb(format), A6XX_TEX_CONST_0_SRGB) |
+ A6XX_TEX_CONST_0_FMT(fmt.fmt) |
+ A6XX_TEX_CONST_0_SWAP(fmt.swap) |
A6XX_TEX_CONST_0_SWIZ_X(A6XX_TEX_X) |
// XXX to swizzle into .w for stencil buffer_to_image
- A6XX_TEX_CONST_0_SWIZ_Y(vk_format == VK_FORMAT_R8_UNORM ? A6XX_TEX_X : A6XX_TEX_Y) |
- A6XX_TEX_CONST_0_SWIZ_Z(vk_format == VK_FORMAT_R8_UNORM ? A6XX_TEX_X : A6XX_TEX_Z) |
- A6XX_TEX_CONST_0_SWIZ_W(vk_format == VK_FORMAT_R8_UNORM ? A6XX_TEX_X : A6XX_TEX_W);
+ A6XX_TEX_CONST_0_SWIZ_Y(format == PIPE_FORMAT_R8_UNORM ? A6XX_TEX_X : A6XX_TEX_Y) |
+ A6XX_TEX_CONST_0_SWIZ_Z(format == PIPE_FORMAT_R8_UNORM ? A6XX_TEX_X : A6XX_TEX_Z) |
+ A6XX_TEX_CONST_0_SWIZ_W(format == PIPE_FORMAT_R8_UNORM ? A6XX_TEX_X : A6XX_TEX_W);
desc[1] = A6XX_TEX_CONST_1_WIDTH(width) | A6XX_TEX_CONST_1_HEIGHT(height);
desc[2] =
A6XX_TEX_CONST_2_PITCH(pitch) |
r3d_src_gmem(struct tu_cmd_buffer *cmd,
struct tu_cs *cs,
const struct tu_image_view *iview,
- VkFormat format,
+ enum pipe_format format,
uint32_t gmem_offset,
uint32_t cpp)
{
/* patch the format so that depth/stencil get the right format */
desc[0] &= ~A6XX_TEX_CONST_0_FMT__MASK;
- desc[0] |= A6XX_TEX_CONST_0_FMT(tu6_format_texture(tu_vk_format_to_pipe_format(format), TILE6_2).fmt);
+ desc[0] |= A6XX_TEX_CONST_0_FMT(tu6_format_texture(format, TILE6_2).fmt);
/* patched for gmem */
desc[0] &= ~(A6XX_TEX_CONST_0_SWAP__MASK | A6XX_TEX_CONST_0_TILE_MODE__MASK);
}
static void
-r3d_dst_buffer(struct tu_cs *cs, VkFormat vk_format, uint64_t va, uint32_t pitch)
+r3d_dst_buffer(struct tu_cs *cs, enum pipe_format format, uint64_t va, uint32_t pitch)
{
- struct tu_native_format format = tu6_format_color(tu_vk_format_to_pipe_format(vk_format), TILE6_LINEAR);
+ struct tu_native_format fmt = tu6_format_color(format, TILE6_LINEAR);
tu_cs_emit_regs(cs,
- A6XX_RB_MRT_BUF_INFO(0, .color_format = format.fmt, .color_swap = format.swap),
+ A6XX_RB_MRT_BUF_INFO(0, .color_format = fmt.fmt, .color_swap = fmt.swap),
A6XX_RB_MRT_PITCH(0, pitch),
A6XX_RB_MRT_ARRAY_PITCH(0, 0),
A6XX_RB_MRT_BASE(0, .qword = va),
}
static uint8_t
-aspect_write_mask(VkFormat vk_format, VkImageAspectFlags aspect_mask)
+aspect_write_mask(enum pipe_format format, VkImageAspectFlags aspect_mask)
{
uint8_t mask = 0xf;
assert(aspect_mask);
/* note: the only format with partial writing is D24S8,
* clear/blit uses the _AS_R8G8B8A8 format to access it
*/
- if (vk_format == VK_FORMAT_D24_UNORM_S8_UINT) {
+ if (format == PIPE_FORMAT_Z24_UNORM_S8_UINT) {
if (aspect_mask == VK_IMAGE_ASPECT_DEPTH_BIT)
mask = 0x7;
if (aspect_mask == VK_IMAGE_ASPECT_STENCIL_BIT)
static void
r3d_setup(struct tu_cmd_buffer *cmd,
struct tu_cs *cs,
- VkFormat vk_format,
+ enum pipe_format format,
VkImageAspectFlags aspect_mask,
unsigned blit_param,
bool clear,
bool ubwc,
VkSampleCountFlagBits samples)
{
- enum a6xx_format format = tu6_base_format(tu_vk_format_to_pipe_format(vk_format));
+ enum a6xx_format fmt = tu6_base_format(format);
- if ((vk_format == VK_FORMAT_D24_UNORM_S8_UINT ||
- vk_format == VK_FORMAT_X8_D24_UNORM_PACK32) && ubwc) {
- format = FMT6_Z24_UNORM_S8_UINT_AS_R8G8B8A8;
+ if ((format == PIPE_FORMAT_Z24_UNORM_S8_UINT ||
+ format == PIPE_FORMAT_Z24X8_UNORM) && ubwc) {
+ fmt = FMT6_Z24_UNORM_S8_UINT_AS_R8G8B8A8;
}
if (!cmd->state.pass) {
tu_cs_emit_regs(cs, A6XX_SP_FS_RENDER_COMPONENTS(.rt0 = 0xf));
tu_cs_emit_regs(cs, A6XX_SP_FS_MRT_REG(0,
- .color_format = format,
- .color_sint = vk_format_is_sint(vk_format),
- .color_uint = vk_format_is_uint(vk_format)));
+ .color_format = fmt,
+ .color_sint = util_format_is_pure_sint(format),
+ .color_uint = util_format_is_pure_uint(format)));
tu_cs_emit_regs(cs, A6XX_RB_MRT_CONTROL(0,
- .component_enable = aspect_write_mask(vk_format, aspect_mask)));
- tu_cs_emit_regs(cs, A6XX_RB_SRGB_CNTL(vk_format_is_srgb(vk_format)));
- tu_cs_emit_regs(cs, A6XX_SP_SRGB_CNTL(vk_format_is_srgb(vk_format)));
+ .component_enable = aspect_write_mask(format, aspect_mask)));
+ tu_cs_emit_regs(cs, A6XX_RB_SRGB_CNTL(util_format_is_srgb(format)));
+ tu_cs_emit_regs(cs, A6XX_SP_SRGB_CNTL(util_format_is_srgb(format)));
tu_cs_emit_regs(cs, A6XX_GRAS_LRZ_CNTL(0));
tu_cs_emit_regs(cs, A6XX_RB_LRZ_CNTL(0));
const VkOffset2D *dst,
const VkOffset2D *src,
const VkExtent2D *extent);
- void (*clear_value)(struct tu_cs *cs, VkFormat format, const VkClearValue *val);
+ void (*clear_value)(struct tu_cs *cs, enum pipe_format format, const VkClearValue *val);
void (*src)(
struct tu_cmd_buffer *cmd,
struct tu_cs *cs,
uint32_t layer,
VkFilter filter);
void (*src_buffer)(struct tu_cmd_buffer *cmd, struct tu_cs *cs,
- VkFormat vk_format,
+ enum pipe_format format,
uint64_t va, uint32_t pitch,
uint32_t width, uint32_t height);
void (*dst)(struct tu_cs *cs, const struct fdl6_view *iview, uint32_t layer);
- void (*dst_buffer)(struct tu_cs *cs, VkFormat vk_format, uint64_t va, uint32_t pitch);
+ void (*dst_buffer)(struct tu_cs *cs, enum pipe_format format, uint64_t va, uint32_t pitch);
void (*setup)(struct tu_cmd_buffer *cmd,
struct tu_cs *cs,
- VkFormat vk_format,
+ enum pipe_format format,
VkImageAspectFlags aspect_mask,
unsigned blit_param, /* CmdBlitImage: rotation in 2D path and z scaling in 3D path */
bool clear,
* compression behavior, so no just returning R8_UINT/R16_UINT/R32_UINT for
* everything.
*/
-static VkFormat
-copy_format(VkFormat format, VkImageAspectFlags aspect_mask, bool copy_buffer)
-{
- if (vk_format_is_compressed(format)) {
- switch (vk_format_get_blocksize(format)) {
- case 1: return VK_FORMAT_R8_UINT;
- case 2: return VK_FORMAT_R16_UINT;
- case 4: return VK_FORMAT_R32_UINT;
- case 8: return VK_FORMAT_R32G32_UINT;
- case 16:return VK_FORMAT_R32G32B32A32_UINT;
+static enum pipe_format
+copy_format(VkFormat vk_format, VkImageAspectFlags aspect_mask, bool copy_buffer)
+{
+ if (vk_format_is_compressed(vk_format)) {
+ switch (vk_format_get_blocksize(vk_format)) {
+ case 1: return PIPE_FORMAT_R8_UINT;
+ case 2: return PIPE_FORMAT_R16_UINT;
+ case 4: return PIPE_FORMAT_R32_UINT;
+ case 8: return PIPE_FORMAT_R32G32_UINT;
+ case 16:return PIPE_FORMAT_R32G32B32A32_UINT;
default:
unreachable("unhandled format size");
}
}
- switch (format) {
+ enum pipe_format format = tu_vk_format_to_pipe_format(vk_format);
+
/* For SNORM formats, copy them as the equivalent UNORM format. If we treat
* them as snorm then the 0x80 (-1.0 snorm8) value will get clamped to 0x81
* (also -1.0), when we're supposed to be memcpying the bits. See
* https://gitlab.khronos.org/Tracker/vk-gl-cts/-/issues/2917 for discussion.
*/
- case VK_FORMAT_R8_SNORM:
- return VK_FORMAT_R8_UNORM;
- case VK_FORMAT_R8G8_SNORM:
- return VK_FORMAT_R8G8_UNORM;
- case VK_FORMAT_R8G8B8_SNORM:
- return VK_FORMAT_R8G8B8_UNORM;
- case VK_FORMAT_B8G8R8_SNORM:
- return VK_FORMAT_B8G8R8_UNORM;
- case VK_FORMAT_R8G8B8A8_SNORM:
- return VK_FORMAT_R8G8B8A8_UNORM;
- case VK_FORMAT_B8G8R8A8_SNORM:
- return VK_FORMAT_B8G8R8A8_UNORM;
- case VK_FORMAT_A8B8G8R8_SNORM_PACK32:
- return VK_FORMAT_A8B8G8R8_UNORM_PACK32;
- case VK_FORMAT_A2R10G10B10_SNORM_PACK32:
- return VK_FORMAT_A2R10G10B10_UNORM_PACK32;
- case VK_FORMAT_A2B10G10R10_SNORM_PACK32:
- return VK_FORMAT_A2B10G10R10_UNORM_PACK32;
- case VK_FORMAT_R16_SNORM:
- return VK_FORMAT_R16_UNORM;
- case VK_FORMAT_R16G16_SNORM:
- return VK_FORMAT_R16G16_UNORM;
- case VK_FORMAT_R16G16B16_SNORM:
- return VK_FORMAT_R16G16B16_UNORM;
- case VK_FORMAT_R16G16B16A16_SNORM:
- return VK_FORMAT_R16G16B16A16_UNORM;
-
- case VK_FORMAT_E5B9G9R9_UFLOAT_PACK32:
- return VK_FORMAT_R32_UINT;
-
- case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM:
+ format = util_format_snorm_to_unorm(format);
+
+ switch (format) {
+ case PIPE_FORMAT_R9G9B9E5_FLOAT:
+ return PIPE_FORMAT_R32_UINT;
+
+ case PIPE_FORMAT_R8_G8B8_420_UNORM:
if (aspect_mask == VK_IMAGE_ASPECT_PLANE_1_BIT)
- return VK_FORMAT_R8G8_UNORM;
+ return PIPE_FORMAT_R8G8_UNORM;
else
- return VK_FORMAT_R8_UNORM;
- case VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM:
- return VK_FORMAT_R8_UNORM;
+ return PIPE_FORMAT_R8_UNORM;
+ case PIPE_FORMAT_R8_G8_B8_420_UNORM:
+ return PIPE_FORMAT_R8_UNORM;
- case VK_FORMAT_D24_UNORM_S8_UINT:
+ case PIPE_FORMAT_Z24_UNORM_S8_UINT:
if (aspect_mask == VK_IMAGE_ASPECT_STENCIL_BIT && copy_buffer)
- return VK_FORMAT_R8_UNORM;
+ return PIPE_FORMAT_R8_UNORM;
else
return format;
- case VK_FORMAT_D32_SFLOAT_S8_UINT:
+ case PIPE_FORMAT_Z32_FLOAT_S8X24_UINT:
if (aspect_mask == VK_IMAGE_ASPECT_STENCIL_BIT)
- return VK_FORMAT_S8_UINT;
+ return PIPE_FORMAT_S8_UINT;
assert(aspect_mask == VK_IMAGE_ASPECT_DEPTH_BIT);
- return VK_FORMAT_D32_SFLOAT;
+ return PIPE_FORMAT_Z32_FLOAT;
default:
return format;
{
const struct blit_ops *ops = &r2d_ops;
- ops->setup(cmd, cs, VK_FORMAT_D16_UNORM, VK_IMAGE_ASPECT_DEPTH_BIT, 0, true, false,
+ ops->setup(cmd, cs, PIPE_FORMAT_Z16_UNORM, VK_IMAGE_ASPECT_DEPTH_BIT, 0, true, false,
VK_SAMPLE_COUNT_1_BIT);
- ops->clear_value(cs, VK_FORMAT_D16_UNORM, value);
- ops->dst_buffer(cs, VK_FORMAT_D16_UNORM,
+ ops->clear_value(cs, PIPE_FORMAT_Z16_UNORM, value);
+ ops->dst_buffer(cs, PIPE_FORMAT_Z16_UNORM,
image->bo->iova + image->bo_offset + image->lrz_offset,
image->lrz_pitch * 2);
ops->coords(cs, &(VkOffset2D) {}, NULL, &(VkExtent2D) {image->lrz_pitch, image->lrz_height});
static void
tu_image_view_copy_blit(struct fdl6_view *iview,
struct tu_image *image,
- VkFormat format,
+ enum pipe_format format,
const VkImageSubresourceLayers *subres,
uint32_t layer,
bool stencil_read,
VkImageAspectFlags aspect_mask = subres->aspectMask;
/* always use the AS_R8G8B8A8 format for these */
- if (format == VK_FORMAT_D24_UNORM_S8_UINT ||
- format == VK_FORMAT_X8_D24_UNORM_PACK32) {
+ if (format == PIPE_FORMAT_Z24_UNORM_S8_UINT ||
+ format == PIPE_FORMAT_Z24X8_UNORM) {
aspect_mask = VK_IMAGE_ASPECT_COLOR_BIT;
}
.layer_count = 1,
.base_miplevel = subres->mipLevel,
.level_count = 1,
- .format = tu_format_for_aspect(tu_vk_format_to_pipe_format(format),
- aspect_mask),
+ .format = tu_format_for_aspect(format, aspect_mask),
.swiz = {
/* image_to_buffer from d24s8 with stencil aspect mask writes out to r8 */
stencil_read ? PIPE_SWIZZLE_W : PIPE_SWIZZLE_X,
static void
tu_image_view_copy(struct fdl6_view *iview,
struct tu_image *image,
- VkFormat format,
+ enum pipe_format format,
const VkImageSubresourceLayers *subres,
uint32_t layer,
bool stencil_read)
const VkImageSubresourceLayers *subres,
uint32_t layer)
{
- VkFormat format =
+ enum pipe_format format =
tu6_plane_format(image->vk_format, tu6_plane_index(image->vk_format,
subres->aspectMask));
tu_image_view_copy_blit(iview, image, format, subres, layer, false, false);
trace_start_blit(&cmd->trace, cs);
- ops->setup(cmd, cs, format, info->dstSubresource.aspectMask,
+ ops->setup(cmd, cs, tu_vk_format_to_pipe_format(format), info->dstSubresource.aspectMask,
blit_param, false, dst_image->layout[0].ubwc,
dst_image->layout[0].nr_samples);
MIN2(info->dstOffsets[0].z, info->dstOffsets[1].z));
if (z_scale) {
- VkFormat src_format =
+ enum pipe_format src_format =
tu6_plane_format(src_image->vk_format,
tu6_plane_index(src_image->vk_format,
info->srcSubresource.aspectMask));
{
struct tu_cs *cs = &cmd->cs;
uint32_t layers = MAX2(info->imageExtent.depth, info->imageSubresource.layerCount);
- VkFormat src_format =
+ enum pipe_format src_format =
copy_format(dst_image->vk_format, info->imageSubresource.aspectMask, true);
+ enum pipe_format dst_format =
+ copy_format(dst_image->vk_format, info->imageSubresource.aspectMask, false);
const struct blit_ops *ops = &r2d_ops;
/* special case for buffer to stencil */
copy_compressed(dst_image->vk_format, &offset, &extent, &src_width, &src_height);
- uint32_t pitch = src_width * vk_format_get_blocksize(src_format);
+ uint32_t pitch = src_width * util_format_get_blocksize(src_format);
uint32_t layer_size = src_height * pitch;
- ops->setup(cmd, cs,
- copy_format(dst_image->vk_format, info->imageSubresource.aspectMask, false),
+ ops->setup(cmd, cs, dst_format,
info->imageSubresource.aspectMask, 0, false, dst_image->layout[0].ubwc,
dst_image->layout[0].nr_samples);
struct fdl6_view dst;
- VkFormat dst_format =
- copy_format(dst_image->vk_format, info->imageSubresource.aspectMask, false);
tu_image_view_copy(&dst, dst_image, dst_format, &info->imageSubresource, offset.z, false);
for (uint32_t i = 0; i < layers; i++) {
uint64_t src_va = tu_buffer_iova(src_buffer) + info->bufferOffset + layer_size * i;
if ((src_va & 63) || (pitch & 63)) {
for (uint32_t y = 0; y < extent.height; y++) {
- uint32_t x = (src_va & 63) / vk_format_get_blocksize(src_format);
+ uint32_t x = (src_va & 63) / util_format_get_blocksize(src_format);
ops->src_buffer(cmd, cs, src_format, src_va & ~63, pitch,
x + extent.width, 1);
ops->coords(cs, &(VkOffset2D){offset.x, offset.y + y}, &(VkOffset2D){x},
{
struct tu_cs *cs = &cmd->cs;
uint32_t layers = MAX2(info->imageExtent.depth, info->imageSubresource.layerCount);
- VkFormat dst_format =
+ enum pipe_format dst_format =
copy_format(src_image->vk_format, info->imageSubresource.aspectMask, true);
+ enum pipe_format src_format =
+ copy_format(src_image->vk_format, info->imageSubresource.aspectMask, false);
bool stencil_read = false;
if (src_image->vk_format == VK_FORMAT_D24_UNORM_S8_UINT &&
copy_compressed(src_image->vk_format, &offset, &extent, &dst_width, &dst_height);
- uint32_t pitch = dst_width * vk_format_get_blocksize(dst_format);
+ uint32_t pitch = dst_width * util_format_get_blocksize(dst_format);
uint32_t layer_size = pitch * dst_height;
ops->setup(cmd, cs, dst_format, VK_IMAGE_ASPECT_COLOR_BIT, 0, false, false,
VK_SAMPLE_COUNT_1_BIT);
struct fdl6_view src;
- VkFormat src_format =
- copy_format(src_image->vk_format, info->imageSubresource.aspectMask, false);
tu_image_view_copy(&src, src_image, src_format, &info->imageSubresource, offset.z, stencil_read);
for (uint32_t i = 0; i < layers; i++) {
uint64_t dst_va = tu_buffer_iova(dst_buffer) + info->bufferOffset + layer_size * i;
if ((dst_va & 63) || (pitch & 63)) {
for (uint32_t y = 0; y < extent.height; y++) {
- uint32_t x = (dst_va & 63) / vk_format_get_blocksize(dst_format);
+ uint32_t x = (dst_va & 63) / util_format_get_blocksize(dst_format);
ops->dst_buffer(cs, dst_format, dst_va & ~63, 0);
ops->coords(cs, &(VkOffset2D) {x}, &(VkOffset2D){offset.x, offset.y + y},
&(VkExtent2D) {extent.width, 1});
*/
static bool
-is_swapped_format(VkFormat format)
+is_swapped_format(enum pipe_format format)
{
- struct tu_native_format linear = tu6_format_texture(tu_vk_format_to_pipe_format(format), TILE6_LINEAR);
- struct tu_native_format tiled = tu6_format_texture(tu_vk_format_to_pipe_format(format), TILE6_3);
+ struct tu_native_format linear = tu6_format_texture(format, TILE6_LINEAR);
+ struct tu_native_format tiled = tu6_format_texture(format, TILE6_3);
return linear.fmt != tiled.fmt || linear.swap != tiled.swap;
}
if (dst_image->layout[0].nr_samples > 1)
ops = &r3d_ops;
- VkFormat format = VK_FORMAT_UNDEFINED;
+ enum pipe_format format = PIPE_FORMAT_NONE;
VkOffset3D src_offset = info->srcOffset;
VkOffset3D dst_offset = info->dstOffset;
VkExtent3D extent = info->extent;
copy_compressed(src_image->vk_format, &src_offset, &extent, NULL, NULL);
copy_compressed(dst_image->vk_format, &dst_offset, NULL, NULL, NULL);
- VkFormat dst_format = copy_format(dst_image->vk_format, info->dstSubresource.aspectMask, false);
- VkFormat src_format = copy_format(src_image->vk_format, info->srcSubresource.aspectMask, false);
+ enum pipe_format dst_format = copy_format(dst_image->vk_format, info->dstSubresource.aspectMask, false);
+ enum pipe_format src_format = copy_format(src_image->vk_format, info->srcSubresource.aspectMask, false);
bool use_staging_blit = false;
staging_layout.ubwc = false;
fdl6_layout(&staging_layout,
- vk_format_to_pipe_format(src_format),
+ src_format,
src_image->layout[0].nr_samples,
extent.width,
extent.height,
.layer_count = 1,
.base_miplevel = 0,
.level_count = info->srcSubresource.layerCount,
- .format = tu_format_for_aspect(vk_format_to_pipe_format(src_format),
- VK_IMAGE_ASPECT_COLOR_BIT),
+ .format = tu_format_for_aspect(src_format, VK_IMAGE_ASPECT_COLOR_BIT),
.swiz = { PIPE_SWIZZLE_X, PIPE_SWIZZLE_Y, PIPE_SWIZZLE_Z, PIPE_SWIZZLE_W },
.type = FDL_VIEW_TYPE_2D,
}, false);
.layer_count = 1,
.base_miplevel = 0,
.level_count = info->srcSubresource.layerCount,
- .format = tu_format_for_aspect(vk_format_to_pipe_format(dst_format),
- VK_IMAGE_ASPECT_COLOR_BIT),
+ .format = tu_format_for_aspect(dst_format, VK_IMAGE_ASPECT_COLOR_BIT),
.swiz = { PIPE_SWIZZLE_X, PIPE_SWIZZLE_Y, PIPE_SWIZZLE_Z, PIPE_SWIZZLE_W },
.type = FDL_VIEW_TYPE_2D,
}, false);
{
const struct blit_ops *ops = &r2d_ops;
struct tu_cs *cs = &cmd->cs;
- VkFormat format = block_size == 4 ? VK_FORMAT_R32_UINT : VK_FORMAT_R8_UNORM;
+ enum pipe_format format = block_size == 4 ? PIPE_FORMAT_R32_UINT : PIPE_FORMAT_R8_UNORM;
uint64_t blocks = size / block_size;
ops->setup(cmd, cs, format, VK_IMAGE_ASPECT_COLOR_BIT, 0, false, false,
uint64_t dst_va = tu_buffer_iova(buffer) + dstOffset;
uint32_t blocks = fillSize / 4;
- ops->setup(cmd, cs, VK_FORMAT_R32_UINT, VK_IMAGE_ASPECT_COLOR_BIT, 0, true, false,
+ ops->setup(cmd, cs, PIPE_FORMAT_R32_UINT, VK_IMAGE_ASPECT_COLOR_BIT, 0, true, false,
VK_SAMPLE_COUNT_1_BIT);
- ops->clear_value(cs, VK_FORMAT_R32_UINT, &(VkClearValue){.color = {.uint32[0] = data}});
+ ops->clear_value(cs, PIPE_FORMAT_R32_UINT, &(VkClearValue){.color = {.uint32[0] = data}});
while (blocks) {
uint32_t dst_x = (dst_va & 63) / 4;
uint32_t width = MIN2(blocks, 0x4000 - dst_x);
- ops->dst_buffer(cs, VK_FORMAT_R32_UINT, dst_va & ~63, 0);
+ ops->dst_buffer(cs, PIPE_FORMAT_R32_UINT, dst_va & ~63, 0);
ops->coords(cs, &(VkOffset2D) {dst_x}, NULL, &(VkExtent2D) {width, 1});
ops->run(cmd, cs);
const struct blit_ops *ops = &r2d_ops;
struct tu_cs *cs = &cmd->cs;
- ops->setup(cmd, cs, dst_image->vk_format, VK_IMAGE_ASPECT_COLOR_BIT,
- 0, false, dst_image->layout[0].ubwc, VK_SAMPLE_COUNT_1_BIT);
+ ops->setup(cmd, cs, tu_vk_format_to_pipe_format(dst_image->vk_format),
+ VK_IMAGE_ASPECT_COLOR_BIT, 0, false, dst_image->layout[0].ubwc,
+ VK_SAMPLE_COUNT_1_BIT);
for (uint32_t i = 0; i < regionCount; ++i) {
const VkImageResolve *info = &pRegions[i];
trace_start_sysmem_resolve(&cmd->trace, cs);
- ops->setup(cmd, cs, format, VK_IMAGE_ASPECT_COLOR_BIT,
- 0, false, dst->view.ubwc_enabled, VK_SAMPLE_COUNT_1_BIT);
+ ops->setup(cmd, cs, tu_vk_format_to_pipe_format(format),
+ VK_IMAGE_ASPECT_COLOR_BIT, 0, false, dst->view.ubwc_enabled,
+ VK_SAMPLE_COUNT_1_BIT);
ops->coords(cs, &rect->offset, &rect->offset, &rect->extent);
for_each_layer(i, layer_mask, layers) {
uint32_t level_count = tu_get_levelCount(image, range);
uint32_t layer_count = tu_get_layerCount(image, range);
struct tu_cs *cs = &cmd->cs;
- VkFormat format;
+ enum pipe_format format;
if (image->vk_format == VK_FORMAT_E5B9G9R9_UFLOAT_PACK32) {
- format = VK_FORMAT_R32_UINT;
+ format = PIPE_FORMAT_R32_UINT;
} else {
format = tu6_plane_format(image->vk_format,
tu6_plane_index(image->vk_format,
ops->setup(cmd, cs, format, aspect_mask, 0, true, image->layout[0].ubwc,
image->layout[0].nr_samples);
if (image->vk_format == VK_FORMAT_E5B9G9R9_UFLOAT_PACK32)
- ops->clear_value(cs, VK_FORMAT_E5B9G9R9_UFLOAT_PACK32, clear_value);
+ ops->clear_value(cs, PIPE_FORMAT_R9G9B9E5_FLOAT, clear_value);
else
ops->clear_value(cs, format, clear_value);
}
static void
-pack_gmem_clear_value(const VkClearValue *val, VkFormat format, uint32_t clear_value[4])
+pack_gmem_clear_value(const VkClearValue *val, enum pipe_format format, uint32_t clear_value[4])
{
switch (format) {
- case VK_FORMAT_X8_D24_UNORM_PACK32:
- case VK_FORMAT_D24_UNORM_S8_UINT:
+ case PIPE_FORMAT_Z24X8_UNORM:
+ case PIPE_FORMAT_Z24_UNORM_S8_UINT:
clear_value[0] = tu_pack_float32_for_unorm(val->depthStencil.depth, 24) |
val->depthStencil.stencil << 24;
return;
- case VK_FORMAT_D16_UNORM:
+ case PIPE_FORMAT_Z16_UNORM:
clear_value[0] = tu_pack_float32_for_unorm(val->depthStencil.depth, 16);
return;
- case VK_FORMAT_D32_SFLOAT:
+ case PIPE_FORMAT_Z32_FLOAT:
clear_value[0] = fui(val->depthStencil.depth);
return;
- case VK_FORMAT_S8_UINT:
+ case PIPE_FORMAT_S8_UINT:
clear_value[0] = val->depthStencil.stencil;
return;
default:
float tmp[4];
memcpy(tmp, val->color.float32, 4 * sizeof(float));
- if (vk_format_is_srgb(format)) {
+ if (util_format_is_srgb(format)) {
for (int i = 0; i < 3; i++)
tmp[i] = util_format_linear_to_srgb_float(tmp[i]);
}
#define PACK_F(type) util_format_##type##_pack_rgba_float \
( (uint8_t*) &clear_value[0], 0, tmp, 0, 1, 1)
- switch (vk_format_get_component_bits(format, UTIL_FORMAT_COLORSPACE_RGB, PIPE_SWIZZLE_X)) {
+ switch (util_format_get_component_bits(format, UTIL_FORMAT_COLORSPACE_RGB, PIPE_SWIZZLE_X)) {
case 4:
PACK_F(r4g4b4a4_unorm);
break;
case 5:
- if (vk_format_get_component_bits(format, UTIL_FORMAT_COLORSPACE_RGB, PIPE_SWIZZLE_Y) == 6)
+ if (util_format_get_component_bits(format, UTIL_FORMAT_COLORSPACE_RGB, PIPE_SWIZZLE_Y) == 6)
PACK_F(r5g6b5_unorm);
else
PACK_F(r5g5b5a1_unorm);
break;
case 8:
- if (vk_format_is_snorm(format))
+ if (util_format_is_snorm(format))
PACK_F(r8g8b8a8_snorm);
- else if (vk_format_is_unorm(format))
+ else if (util_format_is_unorm(format))
PACK_F(r8g8b8a8_unorm);
else
pack_int8(clear_value, val->color.uint32);
break;
case 10:
- if (vk_format_is_int(format))
+ if (util_format_is_pure_integer(format))
pack_int10_2(clear_value, val->color.uint32);
else
PACK_F(r10g10b10a2_unorm);
clear_value[0] = float3_to_r11g11b10f(val->color.float32);
break;
case 16:
- if (vk_format_is_snorm(format))
+ if (util_format_is_snorm(format))
PACK_F(r16g16b16a16_snorm);
- else if (vk_format_is_unorm(format))
+ else if (util_format_is_unorm(format))
PACK_F(r16g16b16a16_unorm);
- else if (vk_format_is_float(format))
+ else if (util_format_is_float(format))
PACK_F(r16g16b16a16_float);
else
pack_int16(clear_value, val->color.uint32);
static void
clear_gmem_attachment(struct tu_cmd_buffer *cmd,
struct tu_cs *cs,
- VkFormat format,
+ enum pipe_format format,
uint8_t clear_mask,
uint32_t gmem_offset,
const VkClearValue *value)
{
tu_cs_emit_pkt4(cs, REG_A6XX_RB_BLIT_DST_INFO, 1);
- tu_cs_emit(cs, A6XX_RB_BLIT_DST_INFO_COLOR_FORMAT(tu6_base_format(tu_vk_format_to_pipe_format(format))));
+ tu_cs_emit(cs, A6XX_RB_BLIT_DST_INFO_COLOR_FORMAT(tu6_base_format(format)));
tu_cs_emit_regs(cs, A6XX_RB_BLIT_INFO(.gmem = 1, .clear_mask = clear_mask));
trace_start_gmem_clear(&cmd->trace, cs);
+ enum pipe_format format = tu_vk_format_to_pipe_format(att->format);
if (att->format == VK_FORMAT_D32_SFLOAT_S8_UINT) {
if (mask & VK_IMAGE_ASPECT_DEPTH_BIT)
- clear_gmem_attachment(cmd, cs, VK_FORMAT_D32_SFLOAT, 0xf, att->gmem_offset, value);
+ clear_gmem_attachment(cmd, cs, PIPE_FORMAT_Z32_FLOAT, 0xf, att->gmem_offset, value);
if (mask & VK_IMAGE_ASPECT_STENCIL_BIT)
- clear_gmem_attachment(cmd, cs, VK_FORMAT_S8_UINT, 0xf, att->gmem_offset_stencil, value);
+ clear_gmem_attachment(cmd, cs, PIPE_FORMAT_S8_UINT, 0xf, att->gmem_offset_stencil, value);
return;
}
- clear_gmem_attachment(cmd, cs, att->format, aspect_write_mask(att->format, mask), att->gmem_offset, value);
+ clear_gmem_attachment(cmd, cs, format, aspect_write_mask(format, mask), att->gmem_offset, value);
trace_end_gmem_clear(&cmd->trace, cs, att->format, att->samples);
}
static void
clear_sysmem_attachment(struct tu_cmd_buffer *cmd,
struct tu_cs *cs,
- VkFormat format,
+ VkFormat vk_format,
VkImageAspectFlags clear_mask,
const VkRenderPassBeginInfo *info,
uint32_t a,
bool separate_stencil)
{
+ enum pipe_format format = tu_vk_format_to_pipe_format(vk_format);
const struct tu_framebuffer *fb = cmd->state.framebuffer;
const struct tu_image_view *iview = cmd->state.attachments[a];
const uint32_t clear_views = cmd->state.pass->attachments[a].clear_views;
ops->teardown(cmd, cs);
trace_end_sysmem_clear(&cmd->trace, cs,
- format, ops == &r3d_ops,
+ vk_format, ops == &r3d_ops,
cmd->state.pass->attachments[a].samples);
}
const struct tu_image_view *iview,
uint32_t samples,
bool separate_stencil,
- VkFormat format,
+ enum pipe_format format,
uint32_t gmem_offset,
uint32_t cpp)
{
tu_cs_emit_regs(cs,
A6XX_SP_PS_2D_SRC_INFO(
- .color_format = tu6_format_texture(tu_vk_format_to_pipe_format(format), TILE6_2).fmt,
+ .color_format = tu6_format_texture(format, TILE6_2).fmt,
.tile_mode = TILE6_2,
- .srgb = vk_format_is_srgb(format),
+ .srgb = util_format_is_srgb(format),
.samples = tu_msaa_samples(samples),
- .samples_average = !vk_format_is_int(format) &&
- !vk_format_is_depth_or_stencil(format),
+ .samples_average = !util_format_is_pure_integer(format) &&
+ !util_format_is_depth_or_stencil(format),
.unk20 = 1,
.unk22 = 1),
/* note: src size does not matter when not scaling */
const struct tu_image_view *iview,
uint32_t dst_samples,
bool separate_stencil,
- VkFormat format,
+ enum pipe_format format,
const VkRect2D *render_area,
uint32_t gmem_offset,
uint32_t cpp)
return;
}
- VkFormat format = src->format;
- if (format == VK_FORMAT_D32_SFLOAT_S8_UINT)
- format = VK_FORMAT_D32_SFLOAT;
+ enum pipe_format format = tu_vk_format_to_pipe_format(src->format);
+ if (format == PIPE_FORMAT_Z32_FLOAT_S8X24_UINT)
+ format = PIPE_FORMAT_Z32_FLOAT;
if (dst->samples > 1) {
/* If we hit this path, we have to disable draw states after every tile
render_area, src->gmem_offset, src->cpp);
}
if (dst->store_stencil) {
- store_3d_blit(cmd, cs, iview, dst->samples, true, VK_FORMAT_S8_UINT,
+ store_3d_blit(cmd, cs, iview, dst->samples, true, PIPE_FORMAT_S8_UINT,
render_area, src->gmem_offset, src->samples);
}
} else {
src->gmem_offset, src->cpp);
}
if (dst->store_stencil) {
- store_cp_blit(cmd, cs, iview, src->samples, true, VK_FORMAT_S8_UINT,
+ store_cp_blit(cmd, cs, iview, src->samples, true, PIPE_FORMAT_S8_UINT,
src->gmem_offset_stencil, src->samples);
}
}