From: Marek Olšák <marek.ol...@amd.com> --- src/amd/common/ac_surface.c | 20 +++++++++---------- src/amd/common/ac_surface.h | 10 +++------- src/amd/vulkan/radv_image.c | 12 +++++------ src/gallium/drivers/radeonsi/si_texture.c | 16 +++++++-------- .../winsys/radeon/drm/radeon_drm_surface.c | 6 +++--- 5 files changed, 30 insertions(+), 34 deletions(-)
diff --git a/src/amd/common/ac_surface.c b/src/amd/common/ac_surface.c index 69a0c8a0f2f..5030d10242e 100644 --- a/src/amd/common/ac_surface.c +++ b/src/amd/common/ac_surface.c @@ -846,23 +846,23 @@ static int gfx6_compute_surface(ADDR_HANDLE addrlib, fin.numSlices = AddrSurfInfoIn.numSlices; fin.numSamples = AddrSurfInfoIn.numSamples; fin.numFrags = AddrSurfInfoIn.numFrags; fin.tileIndex = AddrSurfInfoOut.tileIndex; fout.pTileInfo = &fmask_tile_info; r = AddrComputeFmaskInfo(addrlib, &fin, &fout); if (r) return r; - surf->u.legacy.fmask.size = fout.fmaskBytes; - surf->u.legacy.fmask.alignment = fout.baseAlign; - surf->u.legacy.fmask.tile_swizzle = 0; + surf->fmask_size = fout.fmaskBytes; + surf->fmask_alignment = fout.baseAlign; + surf->fmask_tile_swizzle = 0; surf->u.legacy.fmask.slice_tile_max = (fout.pitch * fout.height) / 64; if (surf->u.legacy.fmask.slice_tile_max) surf->u.legacy.fmask.slice_tile_max -= 1; surf->u.legacy.fmask.tiling_index = fout.tileIndex; surf->u.legacy.fmask.bankh = fout.pTileInfo->bankHeight; surf->u.legacy.fmask.pitch_in_pixels = fout.pitch; @@ -881,21 +881,21 @@ static int gfx6_compute_surface(ADDR_HANDLE addrlib, xin.macroModeIndex = fout.macroModeIndex; xin.pTileInfo = fout.pTileInfo; xin.tileMode = fin.tileMode; int r = AddrComputeBaseSwizzle(addrlib, &xin, &xout); if (r != ADDR_OK) return r; assert(xout.tileSwizzle <= u_bit_consecutive(0, sizeof(surf->tile_swizzle) * 8)); - surf->u.legacy.fmask.tile_swizzle = xout.tileSwizzle; + surf->fmask_tile_swizzle = xout.tileSwizzle; } } /* Recalculate the whole DCC miptree size including disabled levels. * This is what addrlib does, but calling addrlib would be a lot more * complicated. */ if (surf->dcc_size && config->info.levels > 1) { /* The smallest miplevels that are never compressed by DCC * still read the DCC buffer via TC if the base level uses DCC, @@ -1176,22 +1176,22 @@ static int gfx9_compute_miptree(ADDR_HANDLE addrlib, fin.numSlices = in->numSlices; fin.numSamples = in->numSamples; fin.numFrags = in->numFrags; ret = Addr2ComputeFmaskInfo(addrlib, &fin, &fout); if (ret != ADDR_OK) return ret; surf->u.gfx9.fmask.swizzle_mode = fin.swizzleMode; surf->u.gfx9.fmask.epitch = fout.pitch - 1; - surf->u.gfx9.fmask_size = fout.fmaskBytes; - surf->u.gfx9.fmask_alignment = fout.baseAlign; + surf->fmask_size = fout.fmaskBytes; + surf->fmask_alignment = fout.baseAlign; /* Compute tile swizzle for the FMASK surface. */ if (config->info.fmask_surf_index && fin.swizzleMode >= ADDR_SW_64KB_Z_T && !(surf->flags & RADEON_SURF_SHAREABLE)) { ADDR2_COMPUTE_PIPEBANKXOR_INPUT xin = {0}; ADDR2_COMPUTE_PIPEBANKXOR_OUTPUT xout = {0}; xin.size = sizeof(ADDR2_COMPUTE_PIPEBANKXOR_INPUT); xout.size = sizeof(ADDR2_COMPUTE_PIPEBANKXOR_OUTPUT); @@ -1203,22 +1203,22 @@ static int gfx9_compute_miptree(ADDR_HANDLE addrlib, xin.resourceType = in->resourceType; xin.format = in->format; xin.numSamples = in->numSamples; xin.numFrags = in->numFrags; ret = Addr2ComputePipeBankXor(addrlib, &xin, &xout); if (ret != ADDR_OK) return ret; assert(xout.pipeBankXor <= - u_bit_consecutive(0, sizeof(surf->u.gfx9.fmask_tile_swizzle) * 8)); - surf->u.gfx9.fmask_tile_swizzle = xout.pipeBankXor; + u_bit_consecutive(0, sizeof(surf->fmask_tile_swizzle) * 8)); + surf->fmask_tile_swizzle = xout.pipeBankXor; } } /* CMASK */ if (in->swizzleMode != ADDR_SW_LINEAR) { ADDR2_COMPUTE_CMASK_INFO_INPUT cin = {0}; ADDR2_COMPUTE_CMASK_INFO_OUTPUT cout = {0}; cin.size = sizeof(ADDR2_COMPUTE_CMASK_INFO_INPUT); cout.size = sizeof(ADDR2_COMPUTE_CMASK_INFO_OUTPUT); @@ -1370,26 +1370,26 @@ static int gfx9_compute_surface(ADDR_HANDLE addrlib, default: assert(0); } surf->u.gfx9.resource_type = AddrSurfInfoIn.resourceType; surf->has_stencil = !!(surf->flags & RADEON_SURF_SBUFFER); surf->num_dcc_levels = 0; surf->surf_size = 0; + surf->fmask_size = 0; surf->dcc_size = 0; surf->htile_size = 0; surf->htile_slice_size = 0; surf->u.gfx9.surf_offset = 0; surf->u.gfx9.stencil_offset = 0; - surf->u.gfx9.fmask_size = 0; surf->u.gfx9.cmask_size = 0; /* Calculate texture layout information. */ r = gfx9_compute_miptree(addrlib, config, surf, compressed, &AddrSurfInfoIn); if (r) return r; /* Calculate texture layout information for stencil. */ if (surf->flags & RADEON_SURF_SBUFFER) { @@ -1470,21 +1470,21 @@ static int gfx9_compute_surface(ADDR_HANDLE addrlib, case ADDR_SW_VAR_Z_X: surf->micro_tile_mode = RADEON_MICRO_MODE_DEPTH; break; default: assert(0); } /* Temporary workaround to prevent VM faults and hangs. */ if (info->family == CHIP_VEGA12) - surf->u.gfx9.fmask_size *= 8; + surf->fmask_size *= 8; return 0; } int ac_compute_surface(ADDR_HANDLE addrlib, const struct radeon_info *info, const struct ac_surf_config *config, enum radeon_surf_mode mode, struct radeon_surf *surf) { int r; diff --git a/src/amd/common/ac_surface.h b/src/amd/common/ac_surface.h index d0249684ad2..45fb8045e53 100644 --- a/src/amd/common/ac_surface.h +++ b/src/amd/common/ac_surface.h @@ -73,23 +73,20 @@ struct legacy_surf_level { uint64_t offset; uint32_t slice_size_dw; /* in dwords; max = 4GB / 4. */ uint32_t dcc_offset; /* relative offset within DCC mip tree */ uint32_t dcc_fast_clear_size; unsigned nblk_x:15; unsigned nblk_y:15; enum radeon_surf_mode mode:2; }; struct legacy_surf_fmask { - uint64_t size; - unsigned alignment; - unsigned tile_swizzle; unsigned slice_tile_max; /* max 4M */ uint8_t tiling_index; /* max 31 */ uint8_t bankh; /* max 8 */ uint16_t pitch_in_pixels; }; struct legacy_surf_layout { unsigned bankw:4; /* max 8 */ unsigned bankh:4; /* max 8 */ unsigned mtilea:4; /* max 8 */ @@ -146,27 +143,23 @@ struct gfx9_surf_layout { uint64_t surf_offset; /* 0 unless imported with an offset */ /* The size of the 2D plane containing all mipmap levels. */ uint64_t surf_slice_size; /* Mipmap level offset within the slice in bytes. Only valid for LINEAR. */ uint32_t offset[RADEON_SURF_MAX_LEVELS]; uint16_t dcc_pitch_max; /* (mip chain pitch - 1) */ uint64_t stencil_offset; /* separate stencil */ - uint64_t fmask_size; uint64_t cmask_size; - uint32_t fmask_alignment; uint32_t cmask_alignment; - - uint8_t fmask_tile_swizzle; }; struct radeon_surf { /* Format properties. */ unsigned blk_w:4; unsigned blk_h:4; unsigned bpe:5; /* Number of mipmap levels where DCC is enabled starting from level 0. * Non-zero levels may be disabled due to alignment constraints, but not * the first level. @@ -192,29 +185,32 @@ struct radeon_surf { * tail. * * Only these surfaces are allowed to set it: * - color (if it doesn't have to be displayable) * - DCC (same tile swizzle as color) * - FMASK * - CMASK if it's TC-compatible or if the gen is GFX9 * - depth/stencil if HTILE is not TC-compatible and if the gen is not GFX9 */ uint8_t tile_swizzle; + uint8_t fmask_tile_swizzle; uint64_t surf_size; + uint64_t fmask_size; /* DCC and HTILE are very small. */ uint32_t dcc_size; uint32_t htile_size; uint32_t htile_slice_size; uint32_t surf_alignment; + uint32_t fmask_alignment; uint32_t dcc_alignment; uint32_t htile_alignment; union { /* R600-VI return values. * * Some of them can be set by the caller if certain parameters are * desirable. The allocator will try to obey them. */ struct legacy_surf_layout legacy; diff --git a/src/amd/vulkan/radv_image.c b/src/amd/vulkan/radv_image.c index 9df59e759aa..031250b1cb2 100644 --- a/src/amd/vulkan/radv_image.c +++ b/src/amd/vulkan/radv_image.c @@ -720,33 +720,33 @@ radv_init_metadata(struct radv_device *device, } /* The number of samples can be specified independently of the texture. */ static void radv_image_get_fmask_info(struct radv_device *device, struct radv_image *image, unsigned nr_samples, struct radv_fmask_info *out) { if (device->physical_device->rad_info.chip_class >= GFX9) { - out->alignment = image->surface.u.gfx9.fmask_alignment; - out->size = image->surface.u.gfx9.fmask_size; - out->tile_swizzle = image->surface.u.gfx9.fmask_tile_swizzle; + out->alignment = image->surface.fmask_alignment; + out->size = image->surface.fmask_size; + out->tile_swizzle = image->surface.fmask_tile_swizzle; return; } out->slice_tile_max = image->surface.u.legacy.fmask.slice_tile_max; out->tile_mode_index = image->surface.u.legacy.fmask.tiling_index; out->pitch_in_pixels = image->surface.u.legacy.fmask.pitch_in_pixels; out->bank_height = image->surface.u.legacy.fmask.bankh; - out->tile_swizzle = image->surface.u.legacy.fmask.tile_swizzle; - out->alignment = image->surface.u.legacy.fmask.alignment; - out->size = image->surface.u.legacy.fmask.size; + out->tile_swizzle = image->surface.fmask_tile_swizzle; + out->alignment = image->surface.fmask_alignment; + out->size = image->surface.fmask_size; assert(!out->tile_swizzle || !image->shareable); } 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); diff --git a/src/gallium/drivers/radeonsi/si_texture.c b/src/gallium/drivers/radeonsi/si_texture.c index e072fbd0b4d..3fd34af338d 100644 --- a/src/gallium/drivers/radeonsi/si_texture.c +++ b/src/gallium/drivers/radeonsi/si_texture.c @@ -845,33 +845,33 @@ static void si_texture_destroy(struct pipe_screen *screen, static const struct u_resource_vtbl si_texture_vtbl; /* The number of samples can be specified independently of the texture. */ void si_texture_get_fmask_info(struct si_screen *sscreen, struct r600_texture *rtex, unsigned nr_samples, struct r600_fmask_info *out) { if (sscreen->info.chip_class >= GFX9) { - out->alignment = rtex->surface.u.gfx9.fmask_alignment; - out->size = rtex->surface.u.gfx9.fmask_size; - out->tile_swizzle = rtex->surface.u.gfx9.fmask_tile_swizzle; + out->alignment = rtex->surface.fmask_alignment; + out->size = rtex->surface.fmask_size; + out->tile_swizzle = rtex->surface.fmask_tile_swizzle; return; } out->slice_tile_max = rtex->surface.u.legacy.fmask.slice_tile_max; out->tile_mode_index = rtex->surface.u.legacy.fmask.tiling_index; out->pitch_in_pixels = rtex->surface.u.legacy.fmask.pitch_in_pixels; out->bank_height = rtex->surface.u.legacy.fmask.bankh; - out->tile_swizzle = rtex->surface.u.legacy.fmask.tile_swizzle; - out->alignment = rtex->surface.u.legacy.fmask.alignment; - out->size = rtex->surface.u.legacy.fmask.size; + out->tile_swizzle = rtex->surface.fmask_tile_swizzle; + out->alignment = rtex->surface.fmask_alignment; + out->size = rtex->surface.fmask_size; } static void si_texture_allocate_fmask(struct si_screen *sscreen, struct r600_texture *rtex) { si_texture_get_fmask_info(sscreen, rtex, rtex->buffer.b.b.nr_samples, &rtex->fmask); rtex->fmask.offset = align64(rtex->size, rtex->fmask.alignment); rtex->size = rtex->fmask.offset + rtex->fmask.size; @@ -1046,22 +1046,22 @@ void si_print_texture_info(struct si_screen *sscreen, rtex->surface.u.gfx9.surf_slice_size, rtex->surface.surf_alignment, rtex->surface.u.gfx9.surf.swizzle_mode, rtex->surface.u.gfx9.surf.epitch, rtex->surface.u.gfx9.surf_pitch); if (rtex->fmask.size) { u_log_printf(log, " FMASK: offset=%"PRIu64", size=%"PRIu64", " "alignment=%u, swmode=%u, epitch=%u\n", rtex->fmask.offset, - rtex->surface.u.gfx9.fmask_size, - rtex->surface.u.gfx9.fmask_alignment, + rtex->surface.fmask_size, + rtex->surface.fmask_alignment, rtex->surface.u.gfx9.fmask.swizzle_mode, rtex->surface.u.gfx9.fmask.epitch); } if (rtex->cmask.size) { u_log_printf(log, " CMask: offset=%"PRIu64", size=%"PRIu64", " "alignment=%u, rb_aligned=%u, pipe_aligned=%u\n", rtex->cmask.offset, rtex->surface.u.gfx9.cmask_size, rtex->surface.u.gfx9.cmask_alignment, diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_surface.c b/src/gallium/winsys/radeon/drm/radeon_drm_surface.c index 58114888966..61220ed7fe3 100644 --- a/src/gallium/winsys/radeon/drm/radeon_drm_surface.c +++ b/src/gallium/winsys/radeon/drm/radeon_drm_surface.c @@ -270,23 +270,23 @@ static int radeon_winsys_surface_init(struct radeon_winsys *rws, } if (radeon_winsys_surface_init(rws, &templ, fmask_flags, bpe, RADEON_SURF_MODE_2D, &fmask)) { fprintf(stderr, "Got error in surface_init while allocating FMASK.\n"); return -1; } assert(fmask.u.legacy.level[0].mode == RADEON_SURF_MODE_2D); - surf_ws->u.legacy.fmask.size = fmask.surf_size; - surf_ws->u.legacy.fmask.alignment = MAX2(256, fmask.surf_alignment); - surf_ws->u.legacy.fmask.tile_swizzle = fmask.tile_swizzle; + surf_ws->fmask_size = fmask.surf_size; + surf_ws->fmask_alignment = MAX2(256, fmask.surf_alignment); + surf_ws->fmask_tile_swizzle = fmask.tile_swizzle; surf_ws->u.legacy.fmask.slice_tile_max = (fmask.u.legacy.level[0].nblk_x * fmask.u.legacy.level[0].nblk_y) / 64; if (surf_ws->u.legacy.fmask.slice_tile_max) surf_ws->u.legacy.fmask.slice_tile_max -= 1; surf_ws->u.legacy.fmask.tiling_index = fmask.u.legacy.tiling_index[0]; surf_ws->u.legacy.fmask.bankh = fmask.u.legacy.bankh; surf_ws->u.legacy.fmask.pitch_in_pixels = fmask.u.legacy.level[0].nblk_x; } -- 2.17.0 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev