surface_params: Make use of designated initializers where applicable
Provides a convenient way to avoid unnecessary zero initializing.
This commit is contained in:
parent
bd9545a3a8
commit
82b7e5c8ee
@ -166,27 +166,30 @@ SurfaceParams SurfaceParams::CreateForImage(const FormatLookupTable& lookup_tabl
|
||||
|
||||
SurfaceParams SurfaceParams::CreateForDepthBuffer(Core::System& system) {
|
||||
const auto& regs = system.GPU().Maxwell3D().regs;
|
||||
SurfaceParams params;
|
||||
params.is_tiled = regs.zeta.memory_layout.type ==
|
||||
Tegra::Engines::Maxwell3D::Regs::InvMemoryLayout::BlockLinear;
|
||||
params.srgb_conversion = false;
|
||||
params.block_width = std::min(regs.zeta.memory_layout.block_width.Value(), 5U);
|
||||
params.block_height = std::min(regs.zeta.memory_layout.block_height.Value(), 5U);
|
||||
params.block_depth = std::min(regs.zeta.memory_layout.block_depth.Value(), 5U);
|
||||
params.tile_width_spacing = 1;
|
||||
params.pixel_format = PixelFormatFromDepthFormat(regs.zeta.format);
|
||||
params.type = GetFormatType(params.pixel_format);
|
||||
params.width = regs.zeta_width;
|
||||
params.height = regs.zeta_height;
|
||||
params.pitch = 0;
|
||||
params.num_levels = 1;
|
||||
params.emulated_levels = 1;
|
||||
|
||||
const bool is_layered = regs.zeta_layers > 1 && params.block_depth == 0;
|
||||
params.is_layered = is_layered;
|
||||
params.target = is_layered ? SurfaceTarget::Texture2DArray : SurfaceTarget::Texture2D;
|
||||
params.depth = is_layered ? regs.zeta_layers.Value() : 1U;
|
||||
return params;
|
||||
const auto block_depth = std::min(regs.zeta.memory_layout.block_depth.Value(), 5U);
|
||||
const bool is_layered = regs.zeta_layers > 1 && block_depth == 0;
|
||||
const auto pixel_format = PixelFormatFromDepthFormat(regs.zeta.format);
|
||||
|
||||
return {
|
||||
.is_tiled = regs.zeta.memory_layout.type ==
|
||||
Tegra::Engines::Maxwell3D::Regs::InvMemoryLayout::BlockLinear,
|
||||
.srgb_conversion = false,
|
||||
.is_layered = is_layered,
|
||||
.block_width = std::min(regs.zeta.memory_layout.block_width.Value(), 5U),
|
||||
.block_height = std::min(regs.zeta.memory_layout.block_height.Value(), 5U),
|
||||
.block_depth = block_depth,
|
||||
.tile_width_spacing = 1,
|
||||
.width = regs.zeta_width,
|
||||
.height = regs.zeta_height,
|
||||
.depth = is_layered ? regs.zeta_layers.Value() : 1U,
|
||||
.pitch = 0,
|
||||
.num_levels = 1,
|
||||
.emulated_levels = 1,
|
||||
.pixel_format = pixel_format,
|
||||
.type = GetFormatType(pixel_format),
|
||||
.target = is_layered ? SurfaceTarget::Texture2DArray : SurfaceTarget::Texture2D,
|
||||
};
|
||||
}
|
||||
|
||||
SurfaceParams SurfaceParams::CreateForFramebuffer(Core::System& system, std::size_t index) {
|
||||
@ -232,24 +235,29 @@ SurfaceParams SurfaceParams::CreateForFramebuffer(Core::System& system, std::siz
|
||||
|
||||
SurfaceParams SurfaceParams::CreateForFermiCopySurface(
|
||||
const Tegra::Engines::Fermi2D::Regs::Surface& config) {
|
||||
SurfaceParams params{};
|
||||
params.is_tiled = !config.linear;
|
||||
params.srgb_conversion = config.format == Tegra::RenderTargetFormat::B8G8R8A8_SRGB ||
|
||||
config.format == Tegra::RenderTargetFormat::A8B8G8R8_SRGB;
|
||||
params.block_width = params.is_tiled ? std::min(config.BlockWidth(), 5U) : 0;
|
||||
params.block_height = params.is_tiled ? std::min(config.BlockHeight(), 5U) : 0;
|
||||
params.block_depth = params.is_tiled ? std::min(config.BlockDepth(), 5U) : 0;
|
||||
params.tile_width_spacing = 1;
|
||||
params.pixel_format = PixelFormatFromRenderTargetFormat(config.format);
|
||||
params.type = GetFormatType(params.pixel_format);
|
||||
params.width = config.width;
|
||||
params.height = config.height;
|
||||
params.pitch = config.pitch;
|
||||
// TODO(Rodrigo): Try to guess texture arrays from parameters
|
||||
params.target = SurfaceTarget::Texture2D;
|
||||
params.depth = 1;
|
||||
params.num_levels = 1;
|
||||
params.emulated_levels = 1;
|
||||
const bool is_tiled = !config.linear;
|
||||
const auto pixel_format = PixelFormatFromRenderTargetFormat(config.format);
|
||||
|
||||
SurfaceParams params{
|
||||
.is_tiled = is_tiled,
|
||||
.srgb_conversion = config.format == Tegra::RenderTargetFormat::B8G8R8A8_SRGB ||
|
||||
config.format == Tegra::RenderTargetFormat::A8B8G8R8_SRGB,
|
||||
.block_width = is_tiled ? std::min(config.BlockWidth(), 5U) : 0U,
|
||||
.block_height = is_tiled ? std::min(config.BlockHeight(), 5U) : 0U,
|
||||
.block_depth = is_tiled ? std::min(config.BlockDepth(), 5U) : 0U,
|
||||
.tile_width_spacing = 1,
|
||||
.width = config.width,
|
||||
.height = config.height,
|
||||
.depth = 1,
|
||||
.pitch = config.pitch,
|
||||
.num_levels = 1,
|
||||
.emulated_levels = 1,
|
||||
.pixel_format = pixel_format,
|
||||
.type = GetFormatType(pixel_format),
|
||||
// TODO(Rodrigo): Try to guess texture arrays from parameters
|
||||
.target = SurfaceTarget::Texture2D,
|
||||
};
|
||||
|
||||
params.is_layered = params.IsLayered();
|
||||
return params;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user