actually adapt to latest changes

This commit is contained in:
RSDuck 2023-09-27 00:12:35 +02:00
parent 875d455bbf
commit a5791273d4
6 changed files with 56 additions and 58 deletions

View File

@ -406,7 +406,10 @@ void InitRenderer(int renderer)
renderer = 0;
GPU3D::CurrentRenderer = std::make_unique<GPU3D::SoftRenderer>();
}
GPU3D::CurrentRenderer = GPU3D::GLRenderer::New();
if (renderer == renderer3D_OpenGL)
GPU3D::CurrentRenderer = GPU3D::GLRenderer::New();
else if (renderer == renderer3D_OpenGLCompute)
GPU3D::CurrentRenderer = GPU3D::ComputeRenderer::New();
if (!GPU3D::CurrentRenderer)
{
// Fallback on software renderer

View File

@ -158,10 +158,10 @@ public:
virtual u32* GetLine(int line) = 0;
virtual void SetupAccelFrame() {}
virtual void PrepareCaptureFrame() {}
protected:
Renderer3D(bool Accelerated);
virtual void PrepareCaptureFrame() {}
};
extern int Renderer;

View File

@ -31,11 +31,6 @@ ComputeRenderer::ComputeRenderer()
: Renderer3D(true), Texcache(TexcacheOpenGLLoader())
{}
ComputeRenderer::~ComputeRenderer()
{}
bool ComputeRenderer::CompileShader(GLuint& shader, const std::string& source, const std::initializer_list<const char*>& defines)
{
std::string shaderName;
@ -67,55 +62,57 @@ void blah(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,con
printf("%s\n", message);
}
bool ComputeRenderer::Init()
std::unique_ptr<ComputeRenderer> ComputeRenderer::New()
{
std::unique_ptr<ComputeRenderer> result = std::unique_ptr<ComputeRenderer>(new ComputeRenderer());
//glDebugMessageCallback(blah, NULL);
//glEnable(GL_DEBUG_OUTPUT);
glGenBuffers(1, &YSpanSetupMemory);
glBindBuffer(GL_SHADER_STORAGE_BUFFER, YSpanSetupMemory);
glGenBuffers(1, &result->YSpanSetupMemory);
glBindBuffer(GL_SHADER_STORAGE_BUFFER, result->YSpanSetupMemory);
glBufferData(GL_SHADER_STORAGE_BUFFER, sizeof(SpanSetupY)*MaxYSpanSetups, nullptr, GL_DYNAMIC_DRAW);
glGenBuffers(1, &RenderPolygonMemory);
glBindBuffer(GL_SHADER_STORAGE_BUFFER, RenderPolygonMemory);
glGenBuffers(1, &result->RenderPolygonMemory);
glBindBuffer(GL_SHADER_STORAGE_BUFFER, result->RenderPolygonMemory);
glBufferData(GL_SHADER_STORAGE_BUFFER, sizeof(RenderPolygon)*2048, nullptr, GL_DYNAMIC_DRAW);
glGenBuffers(1, &XSpanSetupMemory);
glGenBuffers(1, &BinResultMemory);
glGenBuffers(1, &FinalTileMemory);
glGenBuffers(1, &YSpanIndicesTextureMemory);
glGenBuffers(tilememoryLayer_Num, TileMemory);
glGenBuffers(1, &WorkDescMemory);
glGenBuffers(1, &result->XSpanSetupMemory);
glGenBuffers(1, &result->BinResultMemory);
glGenBuffers(1, &result->FinalTileMemory);
glGenBuffers(1, &result->YSpanIndicesTextureMemory);
glGenBuffers(tilememoryLayer_Num, result->TileMemory);
glGenBuffers(1, &result->WorkDescMemory);
glGenTextures(1, &YSpanIndicesTexture);
glGenTextures(1, &LowResFramebuffer);
glBindTexture(GL_TEXTURE_2D, LowResFramebuffer);
glGenTextures(1, &result->YSpanIndicesTexture);
glGenTextures(1, &result->LowResFramebuffer);
glBindTexture(GL_TEXTURE_2D, result->LowResFramebuffer);
glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8UI, 256, 192);
glGenBuffers(1, &MetaUniformMemory);
glBindBuffer(GL_UNIFORM_BUFFER, MetaUniformMemory);
glGenBuffers(1, &result->MetaUniformMemory);
glBindBuffer(GL_UNIFORM_BUFFER, result->MetaUniformMemory);
glBufferData(GL_UNIFORM_BUFFER, sizeof(MetaUniform), nullptr, GL_DYNAMIC_DRAW);
glGenSamplers(9, Samplers);
glGenSamplers(9, result->Samplers);
for (u32 j = 0; j < 3; j++)
{
for (u32 i = 0; i < 3; i++)
{
const GLenum translateWrapMode[3] = {GL_CLAMP_TO_EDGE, GL_REPEAT, GL_MIRRORED_REPEAT};
glSamplerParameteri(Samplers[i+j*3], GL_TEXTURE_WRAP_S, translateWrapMode[i]);
glSamplerParameteri(Samplers[i+j*3], GL_TEXTURE_WRAP_T, translateWrapMode[j]);
glSamplerParameteri(Samplers[i+j*3], GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glSamplerParameterf(Samplers[i+j*3], GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glSamplerParameteri(result->Samplers[i+j*3], GL_TEXTURE_WRAP_S, translateWrapMode[i]);
glSamplerParameteri(result->Samplers[i+j*3], GL_TEXTURE_WRAP_T, translateWrapMode[j]);
glSamplerParameteri(result->Samplers[i+j*3], GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glSamplerParameterf(result->Samplers[i+j*3], GL_TEXTURE_MAG_FILTER, GL_NEAREST);
}
}
glGenBuffers(1, &PixelBuffer);
glBindBuffer(GL_PIXEL_PACK_BUFFER, PixelBuffer);
glGenBuffers(1, &result->PixelBuffer);
glBindBuffer(GL_PIXEL_PACK_BUFFER, result->PixelBuffer);
glBufferData(GL_PIXEL_PACK_BUFFER, 256*192*4, NULL, GL_DYNAMIC_READ);
return true;
return result;
}
void ComputeRenderer::DeInit()
ComputeRenderer::~ComputeRenderer()
{
Texcache.Reset();

View File

@ -19,6 +19,8 @@
#ifndef GPU3D_COMPUTE
#define GPU3D_COMPUTE
#include <memory>
#include "GPU3D.h"
#include "OpenGLSupport.h"
@ -33,11 +35,9 @@ namespace GPU3D
class ComputeRenderer : public Renderer3D
{
public:
ComputeRenderer();
static std::unique_ptr<ComputeRenderer> New();
~ComputeRenderer() override;
bool Init() override;
void DeInit() override;
void Reset() override;
void SetRenderSettings(GPU::RenderSettings& settings) override;
@ -51,6 +51,8 @@ public:
void SetupAccelFrame() override;
void PrepareCaptureFrame() override;
private:
ComputeRenderer();
GLuint ShaderInterpXSpans[2];
GLuint ShaderBinCombined;
GLuint ShaderDepthBlend[2];

View File

@ -38,8 +38,6 @@ public:
virtual u32* GetLine(int line) override;
void SetupAccelFrame() override;
void PrepareCaptureFrame();
void PrepareCaptureFrame() override;
static std::unique_ptr<GLRenderer> New() noexcept;

View File

@ -73,7 +73,7 @@ void LoadShaderCache()
{
// for now the shader cache only contains only compute shaders
// because they take the longest to compile
FILE* file = Platform::OpenLocalFile("shadercache", "rb");
Platform::FileHandle* file = Platform::OpenLocalFile("shadercache", Platform::FileMode::Read);
if (file == nullptr)
{
Log(LogLevel::Error, "Could not find shader cache\n");
@ -81,19 +81,19 @@ void LoadShaderCache()
}
u32 magic, version, numPrograms;
if (fread(&magic, 4, 1, file) != 1 || magic != ShaderCacheMagic)
if (Platform::FileRead(&magic, 4, 1, file) != 1 || magic != ShaderCacheMagic)
{
Log(LogLevel::Error, "Shader cache file has invalid magic\n");
goto fileInvalid;
}
if (fread(&version, 4, 1, file) != 1 || version != ShaderCacheVersion)
if (Platform::FileRead(&version, 4, 1, file) != 1 || version != ShaderCacheVersion)
{
Log(LogLevel::Error, "Shader cache file has bad version\n");
goto fileInvalid;
}
if (fread(&numPrograms, 4, 1, file) != 1)
if (Platform::FileRead(&numPrograms, 4, 1, file) != 1)
{
Log(LogLevel::Error, "Shader cache file invalid program count\n");
goto fileInvalid;
@ -107,9 +107,9 @@ void LoadShaderCache()
u32 length, binaryFormat;
u64 sourceHash;
error -= fread(&sourceHash, 8, 1, file);
error -= fread(&length, 4, 1, file);
error -= fread(&binaryFormat, 4, 1, file);
error -= Platform::FileRead(&sourceHash, 8, 1, file);
error -= Platform::FileRead(&length, 4, 1, file);
error -= Platform::FileRead(&binaryFormat, 4, 1, file);
if (error != 0)
{
@ -118,7 +118,7 @@ void LoadShaderCache()
}
u8* data = new u8[length];
if (fread(data, length, 1, file) != 1)
if (Platform::FileRead(data, length, 1, file) != 1)
{
Log(LogLevel::Error, "Could not read shader cache entry data\n");
delete[] data;
@ -130,14 +130,12 @@ void LoadShaderCache()
}
fileInvalid:
fclose(file);
Platform::CloseFile(file);
}
void SaveShaderCache()
{
FILE* file = Platform::OpenLocalFile("shadercache", "rb+");
if (file == nullptr)
file = Platform::OpenLocalFile("shadercache", "wb");
Platform::FileHandle* file = Platform::OpenLocalFile("shadercache", Platform::FileMode::ReadWrite);
if (file == nullptr)
{
@ -147,9 +145,9 @@ void SaveShaderCache()
int written = 3;
u32 magic = ShaderCacheMagic, version = ShaderCacheVersion, numPrograms = ShaderCache.size();
written -= fwrite(&magic, 4, 1, file);
written -= fwrite(&version, 4, 1, file);
written -= fwrite(&numPrograms, 4, 1, file);
written -= Platform::FileWrite(&magic, 4, 1, file);
written -= Platform::FileWrite(&version, 4, 1, file);
written -= Platform::FileWrite(&numPrograms, 4, 1, file);
if (written != 0)
{
@ -157,7 +155,7 @@ void SaveShaderCache()
goto writeError;
}
fseek(file, 0, SEEK_END);
Platform::FileSeek(file, 0, Platform::FileSeekOrigin::End);
printf("new shaders %d\n", NewShaders.size());
@ -166,10 +164,10 @@ void SaveShaderCache()
int error = 4;
auto it = ShaderCache.find(newShader);
error -= fwrite(&it->first, 8, 1, file);
error -= fwrite(&it->second.Length, 4, 1, file);
error -= fwrite(&it->second.BinaryFormat, 4, 1, file);
error -= fwrite(it->second.Data, it->second.Length, 1, file);
error -= Platform::FileWrite(&it->first, 8, 1, file);
error -= Platform::FileWrite(&it->second.Length, 4, 1, file);
error -= Platform::FileWrite(&it->second.BinaryFormat, 4, 1, file);
error -= Platform::FileWrite(it->second.Data, it->second.Length, 1, file);
if (error != 0)
{
@ -179,7 +177,7 @@ void SaveShaderCache()
}
writeError:
fclose(file);
Platform::CloseFile(file);
NewShaders.clear();
}