util_shaders.h 1.7 KB

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