diff options
| m--------- | externals/dynarmic | 0 | ||||
| -rw-r--r-- | src/video_core/engines/maxwell_3d.cpp | 8 | ||||
| -rw-r--r-- | src/video_core/gpu.h | 1 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer.cpp | 19 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer.h | 10 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer_cache.h | 7 | 
6 files changed, 21 insertions, 24 deletions
| diff --git a/externals/dynarmic b/externals/dynarmic -Subproject fc6b73bd855d0b87b6d78ba859732a4616e5a85 +Subproject 98e23801297167db1fd266696484a49096e734c diff --git a/src/video_core/engines/maxwell_3d.cpp b/src/video_core/engines/maxwell_3d.cpp index d7328ff39..0e205ed72 100644 --- a/src/video_core/engines/maxwell_3d.cpp +++ b/src/video_core/engines/maxwell_3d.cpp @@ -75,14 +75,6 @@ void Maxwell3D::WriteReg(u32 method, u32 value, u32 remaining_params) {          ProcessMacroUpload(value);          break;      } -    case MAXWELL3D_REG_INDEX(code_address.code_address_high): -    case MAXWELL3D_REG_INDEX(code_address.code_address_low): { -        // Note: For some reason games (like Puyo Puyo Tetris) seem to write 0 to the CODE_ADDRESS -        // register, we do not currently know if that's intended or a bug, so we assert it lest -        // stuff breaks in other places (like the shader address calculation). -        ASSERT_MSG(regs.code_address.CodeAddress() == 0, "Unexpected CODE_ADDRESS register value."); -        break; -    }      case MAXWELL3D_REG_INDEX(const_buffer.cb_data[0]):      case MAXWELL3D_REG_INDEX(const_buffer.cb_data[1]):      case MAXWELL3D_REG_INDEX(const_buffer.cb_data[2]): diff --git a/src/video_core/gpu.h b/src/video_core/gpu.h index a0e5e3365..e9d87efb4 100644 --- a/src/video_core/gpu.h +++ b/src/video_core/gpu.h @@ -24,6 +24,7 @@ enum class RenderTargetFormat : u32 {      RGBA8_UNORM = 0xD5,      RGBA8_SRGB = 0xD6,      R11G11B10_FLOAT = 0xE0, +    R8_UNORM = 0xF3,  };  enum class DepthFormat : u32 { diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp index 5d5ad84b7..a1c47bae9 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp @@ -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(); diff --git a/src/video_core/renderer_opengl/gl_rasterizer.h b/src/video_core/renderer_opengl/gl_rasterizer.h index ab06e2d95..e150be58f 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.h +++ b/src/video_core/renderer_opengl/gl_rasterizer.h @@ -135,10 +135,10 @@ private:      /// Syncs the blend state to match the guest state      void SyncBlendState(); -    bool has_ARB_buffer_storage; -    bool has_ARB_direct_state_access; -    bool has_ARB_separate_shader_objects; -    bool has_ARB_vertex_attrib_binding; +    bool has_ARB_buffer_storage = false; +    bool has_ARB_direct_state_access = false; +    bool has_ARB_separate_shader_objects = false; +    bool has_ARB_vertex_attrib_binding = false;      OpenGLState state; @@ -167,5 +167,5 @@ private:      void SetupShaders(u8* buffer_ptr, GLintptr buffer_offset);      enum class AccelDraw { Disabled, Arrays, Indexed }; -    AccelDraw accelerate_draw; +    AccelDraw accelerate_draw = AccelDraw::Disabled;  }; diff --git a/src/video_core/renderer_opengl/gl_rasterizer_cache.h b/src/video_core/renderer_opengl/gl_rasterizer_cache.h index 7785b7df4..0267dbac6 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer_cache.h +++ b/src/video_core/renderer_opengl/gl_rasterizer_cache.h @@ -199,6 +199,8 @@ struct SurfaceParams {              return PixelFormat::R11FG11FB10F;          case Tegra::RenderTargetFormat::RGBA32_UINT:              return PixelFormat::RGBA32UI; +        case Tegra::RenderTargetFormat::R8_UNORM: +            return PixelFormat::R8;          default:              LOG_CRITICAL(HW_GPU, "Unimplemented format={}", static_cast<u32>(format));              UNREACHABLE(); @@ -249,6 +251,8 @@ struct SurfaceParams {              UNREACHABLE();          case Tegra::Texture::TextureFormat::R32:              return PixelFormat::R32F; +        case Tegra::Texture::TextureFormat::ZF32: +            return PixelFormat::Z32F;          case Tegra::Texture::TextureFormat::DXT1:              return PixelFormat::DXT1;          case Tegra::Texture::TextureFormat::DXT23: @@ -314,6 +318,8 @@ struct SurfaceParams {          case PixelFormat::R16F:          case PixelFormat::R16UNORM:              return Tegra::Texture::TextureFormat::R16; +        case PixelFormat::Z32F: +            return Tegra::Texture::TextureFormat::ZF32;          default:              LOG_CRITICAL(HW_GPU, "Unimplemented format={}", static_cast<u32>(format));              UNREACHABLE(); @@ -358,6 +364,7 @@ struct SurfaceParams {          case Tegra::RenderTargetFormat::RGBA8_SRGB:          case Tegra::RenderTargetFormat::BGRA8_UNORM:          case Tegra::RenderTargetFormat::RGB10_A2_UNORM: +        case Tegra::RenderTargetFormat::R8_UNORM:              return ComponentType::UNorm;          case Tegra::RenderTargetFormat::RGBA16_FLOAT:          case Tegra::RenderTargetFormat::R11G11B10_FLOAT: | 
