Merge pull request #1725 from FernandoS27/gl43
Update OpenGL's backend version from 3.3 to 4.3
This commit is contained in:
commit
d01bf170c4
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -98,14 +98,9 @@ RasterizerOpenGL::RasterizerOpenGL(Core::Frontend::EmuWindow& window, ScreenInfo
|
||||||
has_ARB_direct_state_access = true;
|
has_ARB_direct_state_access = true;
|
||||||
} else if (extension == "GL_ARB_multi_bind") {
|
} else if (extension == "GL_ARB_multi_bind") {
|
||||||
has_ARB_multi_bind = true;
|
has_ARB_multi_bind = true;
|
||||||
} else if (extension == "GL_ARB_separate_shader_objects") {
|
|
||||||
has_ARB_separate_shader_objects = true;
|
|
||||||
} else if (extension == "GL_ARB_vertex_attrib_binding") {
|
|
||||||
has_ARB_vertex_attrib_binding = true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ASSERT_MSG(has_ARB_separate_shader_objects, "has_ARB_separate_shader_objects is unsupported");
|
|
||||||
OpenGLState::ApplyDefaultState();
|
OpenGLState::ApplyDefaultState();
|
||||||
|
|
||||||
// Create render framebuffer
|
// Create render framebuffer
|
||||||
|
|
|
@ -188,8 +188,6 @@ private:
|
||||||
|
|
||||||
bool has_ARB_direct_state_access = false;
|
bool has_ARB_direct_state_access = false;
|
||||||
bool has_ARB_multi_bind = false;
|
bool has_ARB_multi_bind = false;
|
||||||
bool has_ARB_separate_shader_objects = false;
|
|
||||||
bool has_ARB_vertex_attrib_binding = false;
|
|
||||||
|
|
||||||
OpenGLState state;
|
OpenGLState state;
|
||||||
|
|
||||||
|
|
|
@ -265,11 +265,11 @@ static constexpr std::array<FormatTuple, VideoCore::Surface::MaxPixelFormat> tex
|
||||||
{GL_COMPRESSED_RG_RGTC2, GL_RG, GL_UNSIGNED_INT_8_8_8_8, ComponentType::UNorm,
|
{GL_COMPRESSED_RG_RGTC2, GL_RG, GL_UNSIGNED_INT_8_8_8_8, ComponentType::UNorm,
|
||||||
true}, // DXN2UNORM
|
true}, // DXN2UNORM
|
||||||
{GL_COMPRESSED_SIGNED_RG_RGTC2, GL_RG, GL_INT, ComponentType::SNorm, true}, // DXN2SNORM
|
{GL_COMPRESSED_SIGNED_RG_RGTC2, GL_RG, GL_INT, ComponentType::SNorm, true}, // DXN2SNORM
|
||||||
{GL_COMPRESSED_RGBA_BPTC_UNORM_ARB, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, ComponentType::UNorm,
|
{GL_COMPRESSED_RGBA_BPTC_UNORM, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, ComponentType::UNorm,
|
||||||
true}, // BC7U
|
true}, // BC7U
|
||||||
{GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB, GL_RGB, GL_UNSIGNED_INT_8_8_8_8,
|
{GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT, GL_RGB, GL_UNSIGNED_INT_8_8_8_8, ComponentType::Float,
|
||||||
ComponentType::Float, true}, // BC6H_UF16
|
true}, // BC6H_UF16
|
||||||
{GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB, GL_RGB, GL_UNSIGNED_INT_8_8_8_8, ComponentType::Float,
|
{GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT, GL_RGB, GL_UNSIGNED_INT_8_8_8_8, ComponentType::Float,
|
||||||
true}, // BC6H_SF16
|
true}, // BC6H_SF16
|
||||||
{GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE, ComponentType::UNorm, false}, // ASTC_2D_4X4
|
{GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE, ComponentType::UNorm, false}, // ASTC_2D_4X4
|
||||||
{GL_RG8, GL_RG, GL_UNSIGNED_BYTE, ComponentType::UNorm, false}, // G8R8U
|
{GL_RG8, GL_RG, GL_UNSIGNED_BYTE, ComponentType::UNorm, false}, // G8R8U
|
||||||
|
@ -306,8 +306,8 @@ static constexpr std::array<FormatTuple, VideoCore::Surface::MaxPixelFormat> tex
|
||||||
true}, // DXT23_SRGB
|
true}, // DXT23_SRGB
|
||||||
{GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, ComponentType::UNorm,
|
{GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, ComponentType::UNorm,
|
||||||
true}, // DXT45_SRGB
|
true}, // DXT45_SRGB
|
||||||
{GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8,
|
{GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, ComponentType::UNorm,
|
||||||
ComponentType::UNorm, true}, // BC7U_SRGB
|
true}, // BC7U_SRGB
|
||||||
{GL_SRGB8_ALPHA8, GL_RGBA, GL_UNSIGNED_BYTE, ComponentType::UNorm, false}, // ASTC_2D_4X4_SRGB
|
{GL_SRGB8_ALPHA8, GL_RGBA, GL_UNSIGNED_BYTE, ComponentType::UNorm, false}, // ASTC_2D_4X4_SRGB
|
||||||
{GL_SRGB8_ALPHA8, GL_RGBA, GL_UNSIGNED_BYTE, ComponentType::UNorm, false}, // ASTC_2D_8X8_SRGB
|
{GL_SRGB8_ALPHA8, GL_RGBA, GL_UNSIGNED_BYTE, ComponentType::UNorm, false}, // ASTC_2D_8X8_SRGB
|
||||||
{GL_SRGB8_ALPHA8, GL_RGBA, GL_UNSIGNED_BYTE, ComponentType::UNorm, false}, // ASTC_2D_8X5_SRGB
|
{GL_SRGB8_ALPHA8, GL_RGBA, GL_UNSIGNED_BYTE, ComponentType::UNorm, false}, // ASTC_2D_8X5_SRGB
|
||||||
|
@ -346,7 +346,7 @@ static GLenum SurfaceTargetToGL(SurfaceTarget target) {
|
||||||
case SurfaceTarget::TextureCubemap:
|
case SurfaceTarget::TextureCubemap:
|
||||||
return GL_TEXTURE_CUBE_MAP;
|
return GL_TEXTURE_CUBE_MAP;
|
||||||
case SurfaceTarget::TextureCubeArray:
|
case SurfaceTarget::TextureCubeArray:
|
||||||
return GL_TEXTURE_CUBE_MAP_ARRAY_ARB;
|
return GL_TEXTURE_CUBE_MAP_ARRAY;
|
||||||
}
|
}
|
||||||
LOG_CRITICAL(Render_OpenGL, "Unimplemented texture target={}", static_cast<u32>(target));
|
LOG_CRITICAL(Render_OpenGL, "Unimplemented texture target={}", static_cast<u32>(target));
|
||||||
UNREACHABLE();
|
UNREACHABLE();
|
||||||
|
@ -726,7 +726,7 @@ static void CopySurface(const Surface& src_surface, const Surface& dst_surface,
|
||||||
const std::size_t buffer_size = std::max(src_params.size_in_bytes, dst_params.size_in_bytes);
|
const std::size_t buffer_size = std::max(src_params.size_in_bytes, dst_params.size_in_bytes);
|
||||||
|
|
||||||
glBindBuffer(GL_PIXEL_PACK_BUFFER, copy_pbo_handle);
|
glBindBuffer(GL_PIXEL_PACK_BUFFER, copy_pbo_handle);
|
||||||
glBufferData(GL_PIXEL_PACK_BUFFER, buffer_size, nullptr, GL_STREAM_DRAW_ARB);
|
glBufferData(GL_PIXEL_PACK_BUFFER, buffer_size, nullptr, GL_STREAM_DRAW);
|
||||||
if (source_format.compressed) {
|
if (source_format.compressed) {
|
||||||
glGetCompressedTextureImage(src_surface->Texture().handle, src_attachment,
|
glGetCompressedTextureImage(src_surface->Texture().handle, src_attachment,
|
||||||
static_cast<GLsizei>(src_params.size_in_bytes), nullptr);
|
static_cast<GLsizei>(src_params.size_in_bytes), nullptr);
|
||||||
|
|
|
@ -362,13 +362,13 @@ void OpenGLState::ApplyTargetBlending(std::size_t target, bool force) const {
|
||||||
if (blend_changed || updated.src_rgb_func != current.src_rgb_func ||
|
if (blend_changed || updated.src_rgb_func != current.src_rgb_func ||
|
||||||
updated.dst_rgb_func != current.dst_rgb_func || updated.src_a_func != current.src_a_func ||
|
updated.dst_rgb_func != current.dst_rgb_func || updated.src_a_func != current.src_a_func ||
|
||||||
updated.dst_a_func != current.dst_a_func) {
|
updated.dst_a_func != current.dst_a_func) {
|
||||||
glBlendFuncSeparateiARB(static_cast<GLuint>(target), updated.src_rgb_func,
|
glBlendFuncSeparatei(static_cast<GLuint>(target), updated.src_rgb_func,
|
||||||
updated.dst_rgb_func, updated.src_a_func, updated.dst_a_func);
|
updated.dst_rgb_func, updated.src_a_func, updated.dst_a_func);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (blend_changed || updated.rgb_equation != current.rgb_equation ||
|
if (blend_changed || updated.rgb_equation != current.rgb_equation ||
|
||||||
updated.a_equation != current.a_equation) {
|
updated.a_equation != current.a_equation) {
|
||||||
glBlendEquationSeparateiARB(static_cast<GLuint>(target), updated.rgb_equation,
|
glBlendEquationSeparatei(static_cast<GLuint>(target), updated.rgb_equation,
|
||||||
updated.a_equation);
|
updated.a_equation);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -490,7 +490,7 @@ bool RendererOpenGL::Init() {
|
||||||
Core::Telemetry().AddField(Telemetry::FieldType::UserSystem, "GPU_Model", gpu_model);
|
Core::Telemetry().AddField(Telemetry::FieldType::UserSystem, "GPU_Model", gpu_model);
|
||||||
Core::Telemetry().AddField(Telemetry::FieldType::UserSystem, "GPU_OpenGL_Version", gl_version);
|
Core::Telemetry().AddField(Telemetry::FieldType::UserSystem, "GPU_OpenGL_Version", gl_version);
|
||||||
|
|
||||||
if (!GLAD_GL_VERSION_3_3) {
|
if (!GLAD_GL_VERSION_4_3) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -310,7 +310,7 @@ void GRenderWindow::InitRenderTarget() {
|
||||||
// TODO: One of these flags might be interesting: WA_OpaquePaintEvent, WA_NoBackground,
|
// TODO: One of these flags might be interesting: WA_OpaquePaintEvent, WA_NoBackground,
|
||||||
// WA_DontShowOnScreen, WA_DeleteOnClose
|
// WA_DontShowOnScreen, WA_DeleteOnClose
|
||||||
QGLFormat fmt;
|
QGLFormat fmt;
|
||||||
fmt.setVersion(3, 3);
|
fmt.setVersion(4, 3);
|
||||||
fmt.setProfile(QGLFormat::CoreProfile);
|
fmt.setProfile(QGLFormat::CoreProfile);
|
||||||
fmt.setSwapInterval(false);
|
fmt.setSwapInterval(false);
|
||||||
|
|
||||||
|
|
|
@ -518,32 +518,18 @@ void GMainWindow::OnDisplayTitleBars(bool show) {
|
||||||
QStringList GMainWindow::GetUnsupportedGLExtensions() {
|
QStringList GMainWindow::GetUnsupportedGLExtensions() {
|
||||||
QStringList unsupported_ext;
|
QStringList unsupported_ext;
|
||||||
|
|
||||||
if (!GLAD_GL_ARB_program_interface_query)
|
|
||||||
unsupported_ext.append("ARB_program_interface_query");
|
|
||||||
if (!GLAD_GL_ARB_separate_shader_objects)
|
|
||||||
unsupported_ext.append("ARB_separate_shader_objects");
|
|
||||||
if (!GLAD_GL_ARB_vertex_attrib_binding)
|
|
||||||
unsupported_ext.append("ARB_vertex_attrib_binding");
|
|
||||||
if (!GLAD_GL_ARB_vertex_type_10f_11f_11f_rev)
|
if (!GLAD_GL_ARB_vertex_type_10f_11f_11f_rev)
|
||||||
unsupported_ext.append("ARB_vertex_type_10f_11f_11f_rev");
|
unsupported_ext.append("ARB_vertex_type_10f_11f_11f_rev");
|
||||||
if (!GLAD_GL_ARB_texture_mirror_clamp_to_edge)
|
if (!GLAD_GL_ARB_texture_mirror_clamp_to_edge)
|
||||||
unsupported_ext.append("ARB_texture_mirror_clamp_to_edge");
|
unsupported_ext.append("ARB_texture_mirror_clamp_to_edge");
|
||||||
if (!GLAD_GL_ARB_base_instance)
|
|
||||||
unsupported_ext.append("ARB_base_instance");
|
|
||||||
if (!GLAD_GL_ARB_texture_storage)
|
|
||||||
unsupported_ext.append("ARB_texture_storage");
|
|
||||||
if (!GLAD_GL_ARB_multi_bind)
|
if (!GLAD_GL_ARB_multi_bind)
|
||||||
unsupported_ext.append("ARB_multi_bind");
|
unsupported_ext.append("ARB_multi_bind");
|
||||||
if (!GLAD_GL_ARB_copy_image)
|
|
||||||
unsupported_ext.append("ARB_copy_image");
|
|
||||||
|
|
||||||
// Extensions required to support some texture formats.
|
// Extensions required to support some texture formats.
|
||||||
if (!GLAD_GL_EXT_texture_compression_s3tc)
|
if (!GLAD_GL_EXT_texture_compression_s3tc)
|
||||||
unsupported_ext.append("EXT_texture_compression_s3tc");
|
unsupported_ext.append("EXT_texture_compression_s3tc");
|
||||||
if (!GLAD_GL_ARB_texture_compression_rgtc)
|
if (!GLAD_GL_ARB_texture_compression_rgtc)
|
||||||
unsupported_ext.append("ARB_texture_compression_rgtc");
|
unsupported_ext.append("ARB_texture_compression_rgtc");
|
||||||
if (!GLAD_GL_ARB_texture_compression_bptc)
|
|
||||||
unsupported_ext.append("ARB_texture_compression_bptc");
|
|
||||||
if (!GLAD_GL_ARB_depth_buffer_float)
|
if (!GLAD_GL_ARB_depth_buffer_float)
|
||||||
unsupported_ext.append("ARB_depth_buffer_float");
|
unsupported_ext.append("ARB_depth_buffer_float");
|
||||||
|
|
||||||
|
@ -562,8 +548,8 @@ bool GMainWindow::LoadROM(const QString& filename) {
|
||||||
render_window->MakeCurrent();
|
render_window->MakeCurrent();
|
||||||
|
|
||||||
if (!gladLoadGL()) {
|
if (!gladLoadGL()) {
|
||||||
QMessageBox::critical(this, tr("Error while initializing OpenGL 3.3 Core!"),
|
QMessageBox::critical(this, tr("Error while initializing OpenGL 4.3 Core!"),
|
||||||
tr("Your GPU may not support OpenGL 3.3, or you do not "
|
tr("Your GPU may not support OpenGL 4.3, or you do not "
|
||||||
"have the latest graphics driver."));
|
"have the latest graphics driver."));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -111,32 +111,18 @@ void EmuWindow_SDL2::Fullscreen() {
|
||||||
bool EmuWindow_SDL2::SupportsRequiredGLExtensions() {
|
bool EmuWindow_SDL2::SupportsRequiredGLExtensions() {
|
||||||
std::vector<std::string> unsupported_ext;
|
std::vector<std::string> unsupported_ext;
|
||||||
|
|
||||||
if (!GLAD_GL_ARB_program_interface_query)
|
|
||||||
unsupported_ext.push_back("ARB_program_interface_query");
|
|
||||||
if (!GLAD_GL_ARB_separate_shader_objects)
|
|
||||||
unsupported_ext.push_back("ARB_separate_shader_objects");
|
|
||||||
if (!GLAD_GL_ARB_vertex_attrib_binding)
|
|
||||||
unsupported_ext.push_back("ARB_vertex_attrib_binding");
|
|
||||||
if (!GLAD_GL_ARB_vertex_type_10f_11f_11f_rev)
|
if (!GLAD_GL_ARB_vertex_type_10f_11f_11f_rev)
|
||||||
unsupported_ext.push_back("ARB_vertex_type_10f_11f_11f_rev");
|
unsupported_ext.push_back("ARB_vertex_type_10f_11f_11f_rev");
|
||||||
if (!GLAD_GL_ARB_texture_mirror_clamp_to_edge)
|
if (!GLAD_GL_ARB_texture_mirror_clamp_to_edge)
|
||||||
unsupported_ext.push_back("ARB_texture_mirror_clamp_to_edge");
|
unsupported_ext.push_back("ARB_texture_mirror_clamp_to_edge");
|
||||||
if (!GLAD_GL_ARB_base_instance)
|
|
||||||
unsupported_ext.push_back("ARB_base_instance");
|
|
||||||
if (!GLAD_GL_ARB_texture_storage)
|
|
||||||
unsupported_ext.push_back("ARB_texture_storage");
|
|
||||||
if (!GLAD_GL_ARB_multi_bind)
|
if (!GLAD_GL_ARB_multi_bind)
|
||||||
unsupported_ext.push_back("ARB_multi_bind");
|
unsupported_ext.push_back("ARB_multi_bind");
|
||||||
if (!GLAD_GL_ARB_copy_image)
|
|
||||||
unsupported_ext.push_back("ARB_copy_image");
|
|
||||||
|
|
||||||
// Extensions required to support some texture formats.
|
// Extensions required to support some texture formats.
|
||||||
if (!GLAD_GL_EXT_texture_compression_s3tc)
|
if (!GLAD_GL_EXT_texture_compression_s3tc)
|
||||||
unsupported_ext.push_back("EXT_texture_compression_s3tc");
|
unsupported_ext.push_back("EXT_texture_compression_s3tc");
|
||||||
if (!GLAD_GL_ARB_texture_compression_rgtc)
|
if (!GLAD_GL_ARB_texture_compression_rgtc)
|
||||||
unsupported_ext.push_back("ARB_texture_compression_rgtc");
|
unsupported_ext.push_back("ARB_texture_compression_rgtc");
|
||||||
if (!GLAD_GL_ARB_texture_compression_bptc)
|
|
||||||
unsupported_ext.push_back("ARB_texture_compression_bptc");
|
|
||||||
if (!GLAD_GL_ARB_depth_buffer_float)
|
if (!GLAD_GL_ARB_depth_buffer_float)
|
||||||
unsupported_ext.push_back("ARB_depth_buffer_float");
|
unsupported_ext.push_back("ARB_depth_buffer_float");
|
||||||
|
|
||||||
|
@ -157,7 +143,7 @@ EmuWindow_SDL2::EmuWindow_SDL2(bool fullscreen) {
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
|
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 4);
|
||||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3);
|
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3);
|
||||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
|
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
|
||||||
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
|
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
|
||||||
|
|
Reference in New Issue