renderer_opengl: Use VideoCore pixel format
This commit is contained in:
parent
9a76e94b3d
commit
8ad7268c75
|
@ -17,18 +17,6 @@
|
||||||
|
|
||||||
namespace Tegra {
|
namespace Tegra {
|
||||||
|
|
||||||
u32 FramebufferConfig::BytesPerPixel(PixelFormat format) {
|
|
||||||
switch (format) {
|
|
||||||
case PixelFormat::ABGR8:
|
|
||||||
case PixelFormat::BGRA8:
|
|
||||||
return 4;
|
|
||||||
default:
|
|
||||||
return 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
UNREACHABLE();
|
|
||||||
}
|
|
||||||
|
|
||||||
GPU::GPU(Core::System& system, VideoCore::RendererBase& renderer, bool is_async)
|
GPU::GPU(Core::System& system, VideoCore::RendererBase& renderer, bool is_async)
|
||||||
: system{system}, renderer{renderer}, is_async{is_async} {
|
: system{system}, renderer{renderer}, is_async{is_async} {
|
||||||
auto& rasterizer{renderer.Rasterizer()};
|
auto& rasterizer{renderer.Rasterizer()};
|
||||||
|
|
|
@ -94,11 +94,6 @@ struct FramebufferConfig {
|
||||||
BGRA8 = 5,
|
BGRA8 = 5,
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the number of bytes per pixel.
|
|
||||||
*/
|
|
||||||
static u32 BytesPerPixel(PixelFormat format);
|
|
||||||
|
|
||||||
VAddr address;
|
VAddr address;
|
||||||
u32 offset;
|
u32 offset;
|
||||||
u32 width;
|
u32 width;
|
||||||
|
|
|
@ -147,7 +147,9 @@ void RendererOpenGL::SwapBuffers(const Tegra::FramebufferConfig* framebuffer) {
|
||||||
* Loads framebuffer from emulated memory into the active OpenGL texture.
|
* Loads framebuffer from emulated memory into the active OpenGL texture.
|
||||||
*/
|
*/
|
||||||
void RendererOpenGL::LoadFBToScreenInfo(const Tegra::FramebufferConfig& framebuffer) {
|
void RendererOpenGL::LoadFBToScreenInfo(const Tegra::FramebufferConfig& framebuffer) {
|
||||||
const u32 bytes_per_pixel{Tegra::FramebufferConfig::BytesPerPixel(framebuffer.pixel_format)};
|
const auto pixel_format{
|
||||||
|
VideoCore::Surface::PixelFormatFromGPUPixelFormat(framebuffer.pixel_format)};
|
||||||
|
const u32 bytes_per_pixel{VideoCore::Surface::GetBytesPerPixel(pixel_format)};
|
||||||
const u64 size_in_bytes{framebuffer.stride * framebuffer.height * bytes_per_pixel};
|
const u64 size_in_bytes{framebuffer.stride * framebuffer.height * bytes_per_pixel};
|
||||||
const VAddr framebuffer_addr{framebuffer.address + framebuffer.offset};
|
const VAddr framebuffer_addr{framebuffer.address + framebuffer.offset};
|
||||||
|
|
||||||
|
@ -274,22 +276,25 @@ void RendererOpenGL::ConfigureFramebufferTexture(TextureInfo& texture,
|
||||||
texture.height = framebuffer.height;
|
texture.height = framebuffer.height;
|
||||||
texture.pixel_format = framebuffer.pixel_format;
|
texture.pixel_format = framebuffer.pixel_format;
|
||||||
|
|
||||||
|
const auto pixel_format{
|
||||||
|
VideoCore::Surface::PixelFormatFromGPUPixelFormat(framebuffer.pixel_format)};
|
||||||
|
const u32 bytes_per_pixel{VideoCore::Surface::GetBytesPerPixel(pixel_format)};
|
||||||
|
gl_framebuffer_data.resize(texture.width * texture.height * bytes_per_pixel);
|
||||||
|
|
||||||
GLint internal_format;
|
GLint internal_format;
|
||||||
switch (framebuffer.pixel_format) {
|
switch (framebuffer.pixel_format) {
|
||||||
case Tegra::FramebufferConfig::PixelFormat::ABGR8:
|
case Tegra::FramebufferConfig::PixelFormat::ABGR8:
|
||||||
internal_format = GL_RGBA8;
|
internal_format = GL_RGBA8;
|
||||||
texture.gl_format = GL_RGBA;
|
texture.gl_format = GL_RGBA;
|
||||||
texture.gl_type = GL_UNSIGNED_INT_8_8_8_8_REV;
|
texture.gl_type = GL_UNSIGNED_INT_8_8_8_8_REV;
|
||||||
gl_framebuffer_data.resize(texture.width * texture.height * 4);
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
internal_format = GL_RGBA8;
|
internal_format = GL_RGBA8;
|
||||||
texture.gl_format = GL_RGBA;
|
texture.gl_format = GL_RGBA;
|
||||||
texture.gl_type = GL_UNSIGNED_INT_8_8_8_8_REV;
|
texture.gl_type = GL_UNSIGNED_INT_8_8_8_8_REV;
|
||||||
gl_framebuffer_data.resize(texture.width * texture.height * 4);
|
UNIMPLEMENTED_MSG("Unknown framebuffer pixel format: {}",
|
||||||
LOG_CRITICAL(Render_OpenGL, "Unknown framebuffer pixel format: {}",
|
static_cast<u32>(framebuffer.pixel_format));
|
||||||
static_cast<u32>(framebuffer.pixel_format));
|
|
||||||
UNREACHABLE();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
texture.resource.Release();
|
texture.resource.Release();
|
||||||
|
|
Reference in New Issue