2020-12-30 06:25:23 +01:00
|
|
|
// Copyright 2020 yuzu Emulator Project
|
|
|
|
// Licensed under GPLv2 or any later version
|
|
|
|
// Refer to the license.txt file included.
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <span>
|
|
|
|
|
|
|
|
#include <glad/glad.h>
|
|
|
|
|
|
|
|
#include "common/common_types.h"
|
|
|
|
#include "video_core/renderer_opengl/gl_resource_manager.h"
|
|
|
|
#include "video_core/texture_cache/types.h"
|
|
|
|
|
|
|
|
namespace OpenGL {
|
|
|
|
|
|
|
|
class Image;
|
|
|
|
class ProgramManager;
|
|
|
|
|
2021-01-17 00:48:58 +01:00
|
|
|
struct ImageBufferMap;
|
|
|
|
|
2021-03-04 20:14:19 +01:00
|
|
|
class Bgr565CopyPass {
|
|
|
|
public:
|
|
|
|
Bgr565CopyPass() = default;
|
|
|
|
~Bgr565CopyPass() = default;
|
|
|
|
|
|
|
|
void Execute(const Image& dst_image, const Image& src_image,
|
|
|
|
const VideoCommon::ImageCopy& copy);
|
|
|
|
|
|
|
|
private:
|
|
|
|
[[nodiscard]] bool CopyBufferCreationNeeded(const VideoCommon::ImageCopy& copy);
|
|
|
|
void CreateNewCopyBuffer(const VideoCommon::ImageCopy& copy, GLenum target, GLuint format);
|
|
|
|
|
|
|
|
OGLBuffer bgr16_pbo;
|
|
|
|
size_t bgr16_pbo_size{};
|
|
|
|
};
|
|
|
|
|
2020-12-30 06:25:23 +01:00
|
|
|
class UtilShaders {
|
|
|
|
public:
|
|
|
|
explicit UtilShaders(ProgramManager& program_manager);
|
|
|
|
~UtilShaders();
|
|
|
|
|
2021-02-13 21:50:12 +01:00
|
|
|
void ASTCDecode(Image& image, const ImageBufferMap& map,
|
|
|
|
std::span<const VideoCommon::SwizzleParameters> swizzles);
|
|
|
|
|
2021-01-16 20:20:18 +01:00
|
|
|
void BlockLinearUpload2D(Image& image, const ImageBufferMap& map,
|
2020-12-30 06:25:23 +01:00
|
|
|
std::span<const VideoCommon::SwizzleParameters> swizzles);
|
|
|
|
|
2021-01-16 20:20:18 +01:00
|
|
|
void BlockLinearUpload3D(Image& image, const ImageBufferMap& map,
|
2020-12-30 06:25:23 +01:00
|
|
|
std::span<const VideoCommon::SwizzleParameters> swizzles);
|
|
|
|
|
2021-01-16 20:20:18 +01:00
|
|
|
void PitchUpload(Image& image, const ImageBufferMap& map,
|
2020-12-30 06:25:23 +01:00
|
|
|
std::span<const VideoCommon::SwizzleParameters> swizzles);
|
|
|
|
|
|
|
|
void CopyBC4(Image& dst_image, Image& src_image,
|
|
|
|
std::span<const VideoCommon::ImageCopy> copies);
|
|
|
|
|
2021-03-04 20:14:19 +01:00
|
|
|
void CopyBGR(Image& dst_image, Image& src_image,
|
|
|
|
std::span<const VideoCommon::ImageCopy> copies);
|
|
|
|
|
2020-12-30 06:25:23 +01:00
|
|
|
private:
|
|
|
|
ProgramManager& program_manager;
|
|
|
|
|
|
|
|
OGLBuffer swizzle_table_buffer;
|
2021-03-25 21:53:51 +01:00
|
|
|
OGLBuffer astc_buffer;
|
2020-12-30 06:25:23 +01:00
|
|
|
|
2021-02-13 21:50:12 +01:00
|
|
|
OGLProgram astc_decoder_program;
|
2020-12-30 06:25:23 +01:00
|
|
|
OGLProgram block_linear_unswizzle_2d_program;
|
|
|
|
OGLProgram block_linear_unswizzle_3d_program;
|
|
|
|
OGLProgram pitch_unswizzle_program;
|
2021-03-04 20:14:19 +01:00
|
|
|
OGLProgram copy_bgra_program;
|
2020-12-30 06:25:23 +01:00
|
|
|
OGLProgram copy_bc4_program;
|
2021-03-04 20:14:19 +01:00
|
|
|
|
|
|
|
Bgr565CopyPass bgr_copy_pass;
|
2020-12-30 06:25:23 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
GLenum StoreFormat(u32 bytes_per_block);
|
|
|
|
|
|
|
|
} // namespace OpenGL
|