mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-07-26 03:55:37 +00:00
suggestions
This commit is contained in:
parent
21dea2abbc
commit
872cc1747c
@ -263,10 +263,14 @@ std::pair<vk::Buffer, u32> TileManager::TryDetile(vk::Buffer in_buffer, u32 in_o
|
|||||||
cmdbuf.pushDescriptorSetKHR(vk::PipelineBindPoint::eCompute, *detiler->pl_layout, 0,
|
cmdbuf.pushDescriptorSetKHR(vk::PipelineBindPoint::eCompute, *detiler->pl_layout, 0,
|
||||||
set_writes);
|
set_writes);
|
||||||
|
|
||||||
DetilerParams params;
|
DetilerParams params{};
|
||||||
params.num_levels = info.resources.levels;
|
std::memset(¶ms, 0, sizeof(params));
|
||||||
|
|
||||||
|
params.num_levels = std::min(15u, info.resources.levels);
|
||||||
params.pitch0 = info.pitch >> (info.props.is_block ? 2u : 0u);
|
params.pitch0 = info.pitch >> (info.props.is_block ? 2u : 0u);
|
||||||
params.height = info.size.height;
|
params.height = info.size.height;
|
||||||
|
if (info.tiling_mode == AmdGpu::TilingMode::Texture_Volume ||
|
||||||
|
info.tiling_mode == AmdGpu::TilingMode::Display_MicroTiled) {
|
||||||
|
|
||||||
const bool is_volume = info.tiling_mode == AmdGpu::TilingMode::Texture_Volume;
|
const bool is_volume = info.tiling_mode == AmdGpu::TilingMode::Texture_Volume;
|
||||||
const bool is_display = info.tiling_mode == AmdGpu::TilingMode::Display_MicroTiled;
|
const bool is_display = info.tiling_mode == AmdGpu::TilingMode::Display_MicroTiled;
|
||||||
@ -276,15 +280,14 @@ std::pair<vk::Buffer, u32> TileManager::TryDetile(vk::Buffer in_buffer, u32 in_o
|
|||||||
LOG_ERROR(Lib_Videodec, "Display tiling with multiple mip levels is not supported.");
|
LOG_ERROR(Lib_Videodec, "Display tiling with multiple mip levels is not supported.");
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
} else if (is_display_tiled) {
|
||||||
ASSERT(in_buffer != out_buffer.first);
|
ASSERT(info.resources.levels == 1);
|
||||||
|
params.num_levels = 1;
|
||||||
const auto tiles_per_row = info.pitch / 8u;
|
const uint32_t tiles_per_row = info.pitch / 8u;
|
||||||
const auto tiles_per_slice = tiles_per_row * (Common::AlignUp(info.size.height, 8u) / 8u);
|
const uint32_t tiles_per_slice = (info.size.height + 7u) / 8u;
|
||||||
|
|
||||||
params.sizes[0] = tiles_per_row;
|
params.sizes[0] = tiles_per_row;
|
||||||
params.sizes[1] = tiles_per_slice;
|
params.sizes[1] = tiles_per_slice;
|
||||||
for (size_t i = 2; i < params.sizes.size(); ++i)
|
for (size_t i = 2; i < std::size(params.sizes); ++i)
|
||||||
params.sizes[i] = 0;
|
params.sizes[i] = 0;
|
||||||
} else {
|
} else {
|
||||||
if (info.resources.levels > params.sizes.size()) {
|
if (info.resources.levels > params.sizes.size()) {
|
||||||
@ -312,7 +315,8 @@ std::pair<vk::Buffer, u32> TileManager::TryDetile(vk::Buffer in_buffer, u32 in_o
|
|||||||
LOG_DEBUG(Lib_Videodec, "Dispatch: image_size={}, aligned={}, info.num_bits={}, num_tiles={}",
|
LOG_DEBUG(Lib_Videodec, "Dispatch: image_size={}, aligned={}, info.num_bits={}, num_tiles={}",
|
||||||
image_size, aligned_image_size, info.num_bits, num_tiles);
|
image_size, aligned_image_size, info.num_bits, num_tiles);
|
||||||
cmdbuf.dispatch(num_tiles, 1, 1);
|
cmdbuf.dispatch(num_tiles, 1, 1);
|
||||||
return std::make_pair(out_buffer.first, 0u);
|
|
||||||
|
return {out_buffer.first, 0};
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace VideoCore
|
} // namespace VideoCore
|
Loading…
Reference in New Issue
Block a user