|
|
|
@ -5,6 +5,7 @@
|
|
|
|
|
#include <algorithm>
|
|
|
|
|
#include <memory>
|
|
|
|
|
#include <string>
|
|
|
|
|
#include <string_view>
|
|
|
|
|
#include <tuple>
|
|
|
|
|
#include <utility>
|
|
|
|
|
#include <glad/glad.h>
|
|
|
|
@ -37,11 +38,6 @@ MICROPROFILE_DEFINE(OpenGL_Blits, "OpenGL", "Blits", MP_RGB(100, 100, 255));
|
|
|
|
|
MICROPROFILE_DEFINE(OpenGL_CacheManagement, "OpenGL", "Cache Mgmt", MP_RGB(100, 255, 100));
|
|
|
|
|
|
|
|
|
|
RasterizerOpenGL::RasterizerOpenGL() {
|
|
|
|
|
has_ARB_buffer_storage = false;
|
|
|
|
|
has_ARB_direct_state_access = false;
|
|
|
|
|
has_ARB_separate_shader_objects = false;
|
|
|
|
|
has_ARB_vertex_attrib_binding = false;
|
|
|
|
|
|
|
|
|
|
// Create sampler objects
|
|
|
|
|
for (size_t i = 0; i < texture_samplers.size(); ++i) {
|
|
|
|
|
texture_samplers[i].Create();
|
|
|
|
@ -59,7 +55,8 @@ RasterizerOpenGL::RasterizerOpenGL() {
|
|
|
|
|
GLint ext_num;
|
|
|
|
|
glGetIntegerv(GL_NUM_EXTENSIONS, &ext_num);
|
|
|
|
|
for (GLint i = 0; i < ext_num; i++) {
|
|
|
|
|
std::string extension{reinterpret_cast<const char*>(glGetStringi(GL_EXTENSIONS, i))};
|
|
|
|
|
const std::string_view extension{
|
|
|
|
|
reinterpret_cast<const char*>(glGetStringi(GL_EXTENSIONS, i))};
|
|
|
|
|
|
|
|
|
|
if (extension == "GL_ARB_buffer_storage") {
|
|
|
|
|
has_ARB_buffer_storage = true;
|
|
|
|
@ -110,8 +107,6 @@ RasterizerOpenGL::RasterizerOpenGL() {
|
|
|
|
|
glBindBufferBase(GL_UNIFORM_BUFFER, index, buffer.handle);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
accelerate_draw = AccelDraw::Disabled;
|
|
|
|
|
|
|
|
|
|
glEnable(GL_BLEND);
|
|
|
|
|
|
|
|
|
|
LOG_CRITICAL(Render_OpenGL, "Sync fixed function OpenGL state here!");
|
|
|
|
@ -694,10 +689,12 @@ u32 RasterizerOpenGL::SetupConstBuffers(Maxwell::ShaderStage stage, GLuint progr
|
|
|
|
|
glBindBuffer(GL_UNIFORM_BUFFER, 0);
|
|
|
|
|
|
|
|
|
|
// Now configure the bindpoint of the buffer inside the shader
|
|
|
|
|
std::string buffer_name = used_buffer.GetName();
|
|
|
|
|
GLuint index = glGetProgramResourceIndex(program, GL_UNIFORM_BLOCK, buffer_name.c_str());
|
|
|
|
|
if (index != -1)
|
|
|
|
|
const std::string buffer_name = used_buffer.GetName();
|
|
|
|
|
const GLuint index =
|
|
|
|
|
glGetProgramResourceIndex(program, GL_UNIFORM_BLOCK, buffer_name.c_str());
|
|
|
|
|
if (index != GL_INVALID_INDEX) {
|
|
|
|
|
glUniformBlockBinding(program, index, buffer_draw_state.bindpoint);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
state.Apply();
|
|
|
|
|