// Copyright 2018 yuzu Emulator Project // Licensed under GPLv2 or any later version // Refer to the license.txt file included. #include "common/assert.h" #include "video_core/engines/fermi_2d.h" #include "video_core/engines/maxwell_3d.h" #include "video_core/engines/maxwell_compute.h" #include "video_core/engines/maxwell_dma.h" #include "video_core/gpu.h" #include "video_core/rasterizer_interface.h" namespace Tegra { u32 FramebufferConfig::BytesPerPixel(PixelFormat format) { switch (format) { case PixelFormat::ABGR8: return 4; } UNREACHABLE(); } GPU::GPU(VideoCore::RasterizerInterface& rasterizer) { memory_manager = std::make_unique(); maxwell_3d = std::make_unique(rasterizer, *memory_manager); fermi_2d = std::make_unique(*memory_manager); maxwell_compute = std::make_unique(); maxwell_dma = std::make_unique(*memory_manager); } GPU::~GPU() = default; const Engines::Maxwell3D& GPU::Maxwell3D() const { return *maxwell_3d; } Engines::Maxwell3D& GPU::Maxwell3D() { return *maxwell_3d; } u32 RenderTargetBytesPerPixel(RenderTargetFormat format) { ASSERT(format != RenderTargetFormat::NONE); switch (format) { case RenderTargetFormat::RGBA32_FLOAT: case RenderTargetFormat::RGBA32_UINT: return 16; case RenderTargetFormat::RGBA16_FLOAT: case RenderTargetFormat::RG32_FLOAT: return 8; case RenderTargetFormat::RGBA8_UNORM: case RenderTargetFormat::RGBA8_SNORM: case RenderTargetFormat::RGBA8_SRGB: case RenderTargetFormat::RGB10_A2_UNORM: case RenderTargetFormat::BGRA8_UNORM: case RenderTargetFormat::RG16_UNORM: case RenderTargetFormat::RG16_SNORM: case RenderTargetFormat::RG16_UINT: case RenderTargetFormat::RG16_SINT: case RenderTargetFormat::RG16_FLOAT: case RenderTargetFormat::R32_FLOAT: case RenderTargetFormat::R11G11B10_FLOAT: return 4; case RenderTargetFormat::R16_UNORM: case RenderTargetFormat::R16_SNORM: case RenderTargetFormat::R16_UINT: case RenderTargetFormat::R16_SINT: case RenderTargetFormat::R16_FLOAT: case RenderTargetFormat::RG8_UNORM: case RenderTargetFormat::RG8_SNORM: return 2; case RenderTargetFormat::R8_UNORM: case RenderTargetFormat::R8_UINT: return 1; default: UNIMPLEMENTED_MSG("Unimplemented render target format {}", static_cast(format)); } } u32 DepthFormatBytesPerPixel(DepthFormat format) { switch (format) { case DepthFormat::Z32_S8_X24_FLOAT: return 8; case DepthFormat::Z32_FLOAT: case DepthFormat::S8_Z24_UNORM: case DepthFormat::Z24_X8_UNORM: case DepthFormat::Z24_S8_UNORM: case DepthFormat::Z24_C8_UNORM: return 4; case DepthFormat::Z16_UNORM: return 2; default: UNIMPLEMENTED_MSG("Unimplemented Depth format {}", static_cast(format)); } } } // namespace Tegra