util_shaders.h 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. // Copyright 2020 yuzu Emulator Project
  2. // Licensed under GPLv2 or any later version
  3. // Refer to the license.txt file included.
  4. #pragma once
  5. #include <span>
  6. #include <glad/glad.h>
  7. #include "common/common_types.h"
  8. #include "video_core/renderer_opengl/gl_resource_manager.h"
  9. #include "video_core/texture_cache/types.h"
  10. namespace OpenGL {
  11. class Image;
  12. class ProgramManager;
  13. struct ImageBufferMap;
  14. class UtilShaders {
  15. public:
  16. explicit UtilShaders(ProgramManager& program_manager);
  17. ~UtilShaders();
  18. void ASTCDecode(Image& image, const ImageBufferMap& map,
  19. std::span<const VideoCommon::SwizzleParameters> swizzles);
  20. void BlockLinearUpload2D(Image& image, const ImageBufferMap& map,
  21. std::span<const VideoCommon::SwizzleParameters> swizzles);
  22. void BlockLinearUpload3D(Image& image, const ImageBufferMap& map,
  23. std::span<const VideoCommon::SwizzleParameters> swizzles);
  24. void PitchUpload(Image& image, const ImageBufferMap& map,
  25. std::span<const VideoCommon::SwizzleParameters> swizzles);
  26. void CopyBC4(Image& dst_image, Image& src_image,
  27. std::span<const VideoCommon::ImageCopy> copies);
  28. void ConvertS8D24(Image& dst_image, std::span<const VideoCommon::ImageCopy> copies);
  29. private:
  30. ProgramManager& program_manager;
  31. OGLBuffer swizzle_table_buffer;
  32. OGLProgram astc_decoder_program;
  33. OGLProgram block_linear_unswizzle_2d_program;
  34. OGLProgram block_linear_unswizzle_3d_program;
  35. OGLProgram pitch_unswizzle_program;
  36. OGLProgram copy_bc4_program;
  37. OGLProgram convert_s8d24_program;
  38. };
  39. GLenum StoreFormat(u32 bytes_per_block);
  40. } // namespace OpenGL