From: Nicolai Hähnle <nicolai.haeh...@amd.com> To match radeonsi / ac_surface. --- src/amd/vulkan/radv_image.c | 12 ++++++------ src/amd/vulkan/radv_radeon_winsys.h | 5 +++-- src/amd/vulkan/winsys/amdgpu/radv_amdgpu_surface.c | 8 ++++---- 3 files changed, 13 insertions(+), 12 deletions(-)
diff --git a/src/amd/vulkan/radv_image.c b/src/amd/vulkan/radv_image.c index 6225240..04ae293 100644 --- a/src/amd/vulkan/radv_image.c +++ b/src/amd/vulkan/radv_image.c @@ -456,22 +456,22 @@ static void radv_image_get_fmask_info(struct radv_device *device, struct radv_image *image, unsigned nr_samples, struct radv_fmask_info *out) { /* FMASK is allocated like an ordinary texture. */ struct radeon_surf fmask = image->surface; struct radeon_surf_info info = image->info; memset(out, 0, sizeof(*out)); - fmask.bo_alignment = 0; - fmask.bo_size = 0; + fmask.surf_alignment = 0; + fmask.surf_size = 0; fmask.flags |= RADEON_SURF_FMASK; info.samples = 1; /* Force 2D tiling if it wasn't set. This may occur when creating * FMASK for MSAA resolve on R6xx. On R6xx, the single-sample * destination buffer must have an FMASK too. */ fmask.flags = RADEON_SURF_CLR(fmask.flags, MODE); fmask.flags |= RADEON_SURF_SET(RADEON_SURF_MODE_2D, MODE); fmask.flags |= RADEON_SURF_HAS_TILE_MODE_INDEX; @@ -490,22 +490,22 @@ radv_image_get_fmask_info(struct radv_device *device, device->ws->surface_init(device->ws, &info, &fmask); assert(fmask.level[0].mode == RADEON_SURF_MODE_2D); out->slice_tile_max = (fmask.level[0].nblk_x * fmask.level[0].nblk_y) / 64; if (out->slice_tile_max) out->slice_tile_max -= 1; out->tile_mode_index = fmask.tiling_index[0]; out->pitch_in_pixels = fmask.level[0].nblk_x; out->bank_height = fmask.bankh; - out->alignment = MAX2(256, fmask.bo_alignment); - out->size = fmask.bo_size; + out->alignment = MAX2(256, fmask.surf_alignment); + out->size = fmask.surf_size; } static void radv_image_alloc_fmask(struct radv_device *device, struct radv_image *image) { radv_image_get_fmask_info(device, image, image->info.samples, &image->fmask); image->fmask.offset = align64(image->size, image->fmask.alignment); image->size = image->fmask.offset + image->fmask.size; @@ -643,22 +643,22 @@ radv_image_create(VkDevice _device, image->exclusive = pCreateInfo->sharingMode == VK_SHARING_MODE_EXCLUSIVE; if (pCreateInfo->sharingMode == VK_SHARING_MODE_CONCURRENT) { for (uint32_t i = 0; i < pCreateInfo->queueFamilyIndexCount; ++i) image->queue_family_mask |= 1u << pCreateInfo->pQueueFamilyIndices[i]; } radv_init_surface(device, &image->surface, create_info); device->ws->surface_init(device->ws, &image->info, &image->surface); - image->size = image->surface.bo_size; - image->alignment = image->surface.bo_alignment; + image->size = image->surface.surf_size; + image->alignment = image->surface.surf_alignment; if (image->exclusive || image->queue_family_mask == 1) can_cmask_dcc = true; if ((pCreateInfo->usage & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT) && image->surface.dcc_size && can_cmask_dcc) radv_image_alloc_dcc(device, image); else image->surface.dcc_size = 0; diff --git a/src/amd/vulkan/radv_radeon_winsys.h b/src/amd/vulkan/radv_radeon_winsys.h index 660bea5..1d68629 100644 --- a/src/amd/vulkan/radv_radeon_winsys.h +++ b/src/amd/vulkan/radv_radeon_winsys.h @@ -181,22 +181,20 @@ struct radeon_surf { uint32_t blk_h; uint32_t bpe; uint32_t flags; unsigned num_dcc_levels:4; /* These are return values. Some of them can be set by the caller, but * they will be treated as hints (e.g. bankw, bankh) and might be * changed by the calculator. */ - uint64_t bo_size; - uint64_t bo_alignment; /* This applies to EG and later. */ uint32_t bankw; uint32_t bankh; uint32_t mtilea; uint32_t tile_split; uint32_t stencil_tile_split; uint64_t stencil_offset; struct radeon_surf_level level[RADEON_SURF_MAX_LEVEL]; struct radeon_surf_level stencil_level[RADEON_SURF_MAX_LEVEL]; uint32_t tiling_index[RADEON_SURF_MAX_LEVEL]; @@ -207,20 +205,23 @@ struct radeon_surf { uint32_t micro_tile_mode; /* displayable, thin, depth, rotated */ /* Whether the depth miptree or stencil miptree as used by the DB are * adjusted from their TC compatible form to ensure depth/stencil * compatibility. If either is true, the corresponding plane cannot be * sampled from. */ bool depth_adjusted; bool stencil_adjusted; + uint64_t surf_size; + uint64_t surf_alignment; + uint64_t dcc_size; uint64_t dcc_alignment; uint64_t htile_size; uint64_t htile_slice_size; uint64_t htile_alignment; }; enum radeon_bo_layout { RADEON_LAYOUT_LINEAR = 0, diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_surface.c b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_surface.c index 44b1c8f..eb9c11c 100644 --- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_surface.c +++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_surface.c @@ -194,21 +194,21 @@ static int radv_compute_level(ADDR_HANDLE addrlib, AddrSurfInfoIn->basePitch *= surf->blk_w; } ret = AddrComputeSurfaceInfo(addrlib, AddrSurfInfoIn, AddrSurfInfoOut); if (ret != ADDR_OK) return ret; surf_level = is_stencil ? &surf->stencil_level[level] : &surf->level[level]; - surf_level->offset = align64(surf->bo_size, AddrSurfInfoOut->baseAlign); + surf_level->offset = align64(surf->surf_size, AddrSurfInfoOut->baseAlign); surf_level->slice_size = AddrSurfInfoOut->sliceSize; surf_level->nblk_x = AddrSurfInfoOut->pitch; surf_level->nblk_y = AddrSurfInfoOut->height; switch (AddrSurfInfoOut->tileMode) { case ADDR_TM_LINEAR_ALIGNED: surf_level->mode = RADEON_SURF_MODE_LINEAR_ALIGNED; break; case ADDR_TM_1D_TILED_THIN1: surf_level->mode = RADEON_SURF_MODE_1D; @@ -218,21 +218,21 @@ static int radv_compute_level(ADDR_HANDLE addrlib, break; default: assert(0); } if (is_stencil) surf->stencil_tiling_index[level] = AddrSurfInfoOut->tileIndex; else surf->tiling_index[level] = AddrSurfInfoOut->tileIndex; - surf->bo_size = surf_level->offset + AddrSurfInfoOut->surfSize; + surf->surf_size = surf_level->offset + AddrSurfInfoOut->surfSize; /* Clear DCC fields at the beginning. */ surf_level->dcc_offset = 0; /* The previous level's flag tells us if we can use DCC for this level. */ if (AddrSurfInfoIn->flags.dccCompatible && (level == 0 || AddrDccOut->subLvlCompressible)) { AddrDccIn->colorSurfSize = AddrSurfInfoOut->surfSize; AddrDccIn->tileMode = AddrSurfInfoOut->tileMode; AddrDccIn->tileInfo = *AddrSurfInfoOut->pTileInfo; @@ -463,36 +463,36 @@ static int radv_amdgpu_winsys_surface_init(struct radeon_winsys *_ws, } } else { if (AddrSurfInfoIn.tileType == ADDR_DISPLAYABLE) AddrSurfInfoIn.tileIndex = 10; /* 2D displayable */ else AddrSurfInfoIn.tileIndex = 14; /* 2D non-displayable */ AddrSurfInfoOut.macroModeIndex = cik_get_macro_tile_index(surf); } } - surf->bo_size = 0; + surf->surf_size = 0; surf->num_dcc_levels = 0; surf->dcc_size = 0; surf->dcc_alignment = 1; surf->htile_size = surf->htile_slice_size = 0; surf->htile_alignment = 1; /* Calculate texture layout information. */ for (level = 0; level <= last_level; level++) { r = radv_compute_level(ws->addrlib, surf_info, surf, false, level, type, compressed, &AddrSurfInfoIn, &AddrSurfInfoOut, &AddrDccIn, &AddrDccOut); if (r) break; if (level == 0) { - surf->bo_alignment = AddrSurfInfoOut.baseAlign; + surf->surf_alignment = AddrSurfInfoOut.baseAlign; surf->pipe_config = AddrSurfInfoOut.pTileInfo->pipeConfig - 1; radv_set_micro_tile_mode(surf, &ws->info); /* For 2D modes only. */ if (AddrSurfInfoOut.tileMode >= ADDR_TM_2D_TILED_THIN1) { surf->bankw = AddrSurfInfoOut.pTileInfo->bankWidth; surf->bankh = AddrSurfInfoOut.pTileInfo->bankHeight; surf->mtilea = AddrSurfInfoOut.pTileInfo->macroAspectRatio; surf->tile_split = AddrSurfInfoOut.pTileInfo->tileSplitBytes; surf->num_banks = AddrSurfInfoOut.pTileInfo->banks; -- 2.9.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev