diff options
author | ReinUsesLisp <reinuseslisp@airmail.cc> | 2021-05-21 23:17:53 +0200 |
---|---|---|
committer | ameerj <52414509+ameerj@users.noreply.github.com> | 2021-07-23 03:51:33 +0200 |
commit | 6bc54e12a0d274beee0cb7584f73429112ec98b2 (patch) | |
tree | 76d875eebeb3de8380a6071366e92995d1b1df80 /src/video_core/renderer_opengl/gl_graphics_program.h | |
parent | video_core: Abstract transform feedback translation utility (diff) | |
download | yuzu-6bc54e12a0d274beee0cb7584f73429112ec98b2.tar yuzu-6bc54e12a0d274beee0cb7584f73429112ec98b2.tar.gz yuzu-6bc54e12a0d274beee0cb7584f73429112ec98b2.tar.bz2 yuzu-6bc54e12a0d274beee0cb7584f73429112ec98b2.tar.lz yuzu-6bc54e12a0d274beee0cb7584f73429112ec98b2.tar.xz yuzu-6bc54e12a0d274beee0cb7584f73429112ec98b2.tar.zst yuzu-6bc54e12a0d274beee0cb7584f73429112ec98b2.zip |
Diffstat (limited to 'src/video_core/renderer_opengl/gl_graphics_program.h')
-rw-r--r-- | src/video_core/renderer_opengl/gl_graphics_program.h | 32 |
1 files changed, 20 insertions, 12 deletions
diff --git a/src/video_core/renderer_opengl/gl_graphics_program.h b/src/video_core/renderer_opengl/gl_graphics_program.h index 18292bb16..53a57ede5 100644 --- a/src/video_core/renderer_opengl/gl_graphics_program.h +++ b/src/video_core/renderer_opengl/gl_graphics_program.h @@ -16,6 +16,7 @@ #include "video_core/renderer_opengl/gl_buffer_cache.h" #include "video_core/renderer_opengl/gl_resource_manager.h" #include "video_core/renderer_opengl/gl_texture_cache.h" +#include "video_core/transform_feedback.h" namespace OpenGL { @@ -24,16 +25,6 @@ class ProgramManager; using Maxwell = Tegra::Engines::Maxwell3D::Regs; struct GraphicsProgramKey { - struct TransformFeedbackState { - struct Layout { - u32 stream; - u32 varying_count; - u32 stride; - }; - std::array<Layout, Maxwell::NumTransformFeedbackBuffers> layouts; - std::array<std::array<u8, 128>, Maxwell::NumTransformFeedbackBuffers> varyings; - }; - std::array<u64, 6> unique_hashes; union { u32 raw; @@ -45,7 +36,7 @@ struct GraphicsProgramKey { BitField<10, 1, u32> tessellation_clockwise; }; std::array<u32, 3> padding; - TransformFeedbackState xfb_state; + VideoCommon::TransformFeedbackState xfb_state; size_t Hash() const noexcept; @@ -75,11 +66,22 @@ public: ProgramManager& program_manager_, StateTracker& state_tracker_, OGLProgram program_, std::array<OGLAssemblyProgram, 5> assembly_programs_, - const std::array<const Shader::Info*, 5>& infos); + const std::array<const Shader::Info*, 5>& infos, + const VideoCommon::TransformFeedbackState* xfb_state); void Configure(bool is_indexed); + void ConfigureTransformFeedback() const { + if (num_xfb_attribs != 0) { + ConfigureTransformFeedbackImpl(); + } + } + private: + void GenerateTransformFeedbackState(const VideoCommon::TransformFeedbackState& xfb_state); + + void ConfigureTransformFeedbackImpl() const; + TextureCache& texture_cache; BufferCache& buffer_cache; Tegra::MemoryManager& gpu_memory; @@ -96,6 +98,12 @@ private: std::array<u32, 5> base_storage_bindings{}; std::array<u32, 5> num_texture_buffers{}; std::array<u32, 5> num_image_buffers{}; + + static constexpr std::size_t XFB_ENTRY_STRIDE = 3; + GLsizei num_xfb_attribs{}; + GLsizei num_xfb_strides{}; + std::array<GLint, 128 * XFB_ENTRY_STRIDE * Maxwell::NumTransformFeedbackBuffers> xfb_attribs{}; + std::array<GLint, Maxwell::NumTransformFeedbackBuffers> xfb_streams{}; }; } // namespace OpenGL |