actually adapt to latest changes
This commit is contained in:
parent
875d455bbf
commit
a5791273d4
|
@ -406,7 +406,10 @@ void InitRenderer(int renderer)
|
||||||
renderer = 0;
|
renderer = 0;
|
||||||
GPU3D::CurrentRenderer = std::make_unique<GPU3D::SoftRenderer>();
|
GPU3D::CurrentRenderer = std::make_unique<GPU3D::SoftRenderer>();
|
||||||
}
|
}
|
||||||
|
if (renderer == renderer3D_OpenGL)
|
||||||
GPU3D::CurrentRenderer = GPU3D::GLRenderer::New();
|
GPU3D::CurrentRenderer = GPU3D::GLRenderer::New();
|
||||||
|
else if (renderer == renderer3D_OpenGLCompute)
|
||||||
|
GPU3D::CurrentRenderer = GPU3D::ComputeRenderer::New();
|
||||||
if (!GPU3D::CurrentRenderer)
|
if (!GPU3D::CurrentRenderer)
|
||||||
{
|
{
|
||||||
// Fallback on software renderer
|
// Fallback on software renderer
|
||||||
|
|
|
@ -158,10 +158,10 @@ public:
|
||||||
virtual u32* GetLine(int line) = 0;
|
virtual u32* GetLine(int line) = 0;
|
||||||
|
|
||||||
virtual void SetupAccelFrame() {}
|
virtual void SetupAccelFrame() {}
|
||||||
|
virtual void PrepareCaptureFrame() {}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Renderer3D(bool Accelerated);
|
Renderer3D(bool Accelerated);
|
||||||
virtual void PrepareCaptureFrame() {}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
extern int Renderer;
|
extern int Renderer;
|
||||||
|
|
|
@ -31,11 +31,6 @@ ComputeRenderer::ComputeRenderer()
|
||||||
: Renderer3D(true), Texcache(TexcacheOpenGLLoader())
|
: Renderer3D(true), Texcache(TexcacheOpenGLLoader())
|
||||||
{}
|
{}
|
||||||
|
|
||||||
ComputeRenderer::~ComputeRenderer()
|
|
||||||
{}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool ComputeRenderer::CompileShader(GLuint& shader, const std::string& source, const std::initializer_list<const char*>& defines)
|
bool ComputeRenderer::CompileShader(GLuint& shader, const std::string& source, const std::initializer_list<const char*>& defines)
|
||||||
{
|
{
|
||||||
std::string shaderName;
|
std::string shaderName;
|
||||||
|
@ -67,55 +62,57 @@ void blah(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,con
|
||||||
printf("%s\n", message);
|
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);
|
//glDebugMessageCallback(blah, NULL);
|
||||||
//glEnable(GL_DEBUG_OUTPUT);
|
//glEnable(GL_DEBUG_OUTPUT);
|
||||||
glGenBuffers(1, &YSpanSetupMemory);
|
glGenBuffers(1, &result->YSpanSetupMemory);
|
||||||
glBindBuffer(GL_SHADER_STORAGE_BUFFER, YSpanSetupMemory);
|
glBindBuffer(GL_SHADER_STORAGE_BUFFER, result->YSpanSetupMemory);
|
||||||
glBufferData(GL_SHADER_STORAGE_BUFFER, sizeof(SpanSetupY)*MaxYSpanSetups, nullptr, GL_DYNAMIC_DRAW);
|
glBufferData(GL_SHADER_STORAGE_BUFFER, sizeof(SpanSetupY)*MaxYSpanSetups, nullptr, GL_DYNAMIC_DRAW);
|
||||||
|
|
||||||
glGenBuffers(1, &RenderPolygonMemory);
|
glGenBuffers(1, &result->RenderPolygonMemory);
|
||||||
glBindBuffer(GL_SHADER_STORAGE_BUFFER, RenderPolygonMemory);
|
glBindBuffer(GL_SHADER_STORAGE_BUFFER, result->RenderPolygonMemory);
|
||||||
glBufferData(GL_SHADER_STORAGE_BUFFER, sizeof(RenderPolygon)*2048, nullptr, GL_DYNAMIC_DRAW);
|
glBufferData(GL_SHADER_STORAGE_BUFFER, sizeof(RenderPolygon)*2048, nullptr, GL_DYNAMIC_DRAW);
|
||||||
|
|
||||||
glGenBuffers(1, &XSpanSetupMemory);
|
glGenBuffers(1, &result->XSpanSetupMemory);
|
||||||
glGenBuffers(1, &BinResultMemory);
|
glGenBuffers(1, &result->BinResultMemory);
|
||||||
glGenBuffers(1, &FinalTileMemory);
|
glGenBuffers(1, &result->FinalTileMemory);
|
||||||
glGenBuffers(1, &YSpanIndicesTextureMemory);
|
glGenBuffers(1, &result->YSpanIndicesTextureMemory);
|
||||||
glGenBuffers(tilememoryLayer_Num, TileMemory);
|
glGenBuffers(tilememoryLayer_Num, result->TileMemory);
|
||||||
glGenBuffers(1, &WorkDescMemory);
|
glGenBuffers(1, &result->WorkDescMemory);
|
||||||
|
|
||||||
glGenTextures(1, &YSpanIndicesTexture);
|
glGenTextures(1, &result->YSpanIndicesTexture);
|
||||||
glGenTextures(1, &LowResFramebuffer);
|
glGenTextures(1, &result->LowResFramebuffer);
|
||||||
glBindTexture(GL_TEXTURE_2D, LowResFramebuffer);
|
glBindTexture(GL_TEXTURE_2D, result->LowResFramebuffer);
|
||||||
glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8UI, 256, 192);
|
glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8UI, 256, 192);
|
||||||
|
|
||||||
glGenBuffers(1, &MetaUniformMemory);
|
glGenBuffers(1, &result->MetaUniformMemory);
|
||||||
glBindBuffer(GL_UNIFORM_BUFFER, MetaUniformMemory);
|
glBindBuffer(GL_UNIFORM_BUFFER, result->MetaUniformMemory);
|
||||||
glBufferData(GL_UNIFORM_BUFFER, sizeof(MetaUniform), nullptr, GL_DYNAMIC_DRAW);
|
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 j = 0; j < 3; j++)
|
||||||
{
|
{
|
||||||
for (u32 i = 0; i < 3; i++)
|
for (u32 i = 0; i < 3; i++)
|
||||||
{
|
{
|
||||||
const GLenum translateWrapMode[3] = {GL_CLAMP_TO_EDGE, GL_REPEAT, GL_MIRRORED_REPEAT};
|
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(result->Samplers[i+j*3], GL_TEXTURE_WRAP_S, translateWrapMode[i]);
|
||||||
glSamplerParameteri(Samplers[i+j*3], GL_TEXTURE_WRAP_T, translateWrapMode[j]);
|
glSamplerParameteri(result->Samplers[i+j*3], GL_TEXTURE_WRAP_T, translateWrapMode[j]);
|
||||||
glSamplerParameteri(Samplers[i+j*3], GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
glSamplerParameteri(result->Samplers[i+j*3], GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||||
glSamplerParameterf(Samplers[i+j*3], GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
glSamplerParameterf(result->Samplers[i+j*3], GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
glGenBuffers(1, &PixelBuffer);
|
glGenBuffers(1, &result->PixelBuffer);
|
||||||
glBindBuffer(GL_PIXEL_PACK_BUFFER, PixelBuffer);
|
glBindBuffer(GL_PIXEL_PACK_BUFFER, result->PixelBuffer);
|
||||||
glBufferData(GL_PIXEL_PACK_BUFFER, 256*192*4, NULL, GL_DYNAMIC_READ);
|
glBufferData(GL_PIXEL_PACK_BUFFER, 256*192*4, NULL, GL_DYNAMIC_READ);
|
||||||
|
|
||||||
return true;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ComputeRenderer::DeInit()
|
ComputeRenderer::~ComputeRenderer()
|
||||||
{
|
{
|
||||||
Texcache.Reset();
|
Texcache.Reset();
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,8 @@
|
||||||
#ifndef GPU3D_COMPUTE
|
#ifndef GPU3D_COMPUTE
|
||||||
#define GPU3D_COMPUTE
|
#define GPU3D_COMPUTE
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
#include "GPU3D.h"
|
#include "GPU3D.h"
|
||||||
|
|
||||||
#include "OpenGLSupport.h"
|
#include "OpenGLSupport.h"
|
||||||
|
@ -33,11 +35,9 @@ namespace GPU3D
|
||||||
class ComputeRenderer : public Renderer3D
|
class ComputeRenderer : public Renderer3D
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ComputeRenderer();
|
static std::unique_ptr<ComputeRenderer> New();
|
||||||
~ComputeRenderer() override;
|
~ComputeRenderer() override;
|
||||||
|
|
||||||
bool Init() override;
|
|
||||||
void DeInit() override;
|
|
||||||
void Reset() override;
|
void Reset() override;
|
||||||
|
|
||||||
void SetRenderSettings(GPU::RenderSettings& settings) override;
|
void SetRenderSettings(GPU::RenderSettings& settings) override;
|
||||||
|
@ -51,6 +51,8 @@ public:
|
||||||
void SetupAccelFrame() override;
|
void SetupAccelFrame() override;
|
||||||
void PrepareCaptureFrame() override;
|
void PrepareCaptureFrame() override;
|
||||||
private:
|
private:
|
||||||
|
ComputeRenderer();
|
||||||
|
|
||||||
GLuint ShaderInterpXSpans[2];
|
GLuint ShaderInterpXSpans[2];
|
||||||
GLuint ShaderBinCombined;
|
GLuint ShaderBinCombined;
|
||||||
GLuint ShaderDepthBlend[2];
|
GLuint ShaderDepthBlend[2];
|
||||||
|
|
|
@ -38,8 +38,6 @@ public:
|
||||||
virtual u32* GetLine(int line) override;
|
virtual u32* GetLine(int line) override;
|
||||||
|
|
||||||
void SetupAccelFrame() override;
|
void SetupAccelFrame() override;
|
||||||
void PrepareCaptureFrame();
|
|
||||||
|
|
||||||
void PrepareCaptureFrame() override;
|
void PrepareCaptureFrame() override;
|
||||||
|
|
||||||
static std::unique_ptr<GLRenderer> New() noexcept;
|
static std::unique_ptr<GLRenderer> New() noexcept;
|
||||||
|
|
|
@ -73,7 +73,7 @@ void LoadShaderCache()
|
||||||
{
|
{
|
||||||
// for now the shader cache only contains only compute shaders
|
// for now the shader cache only contains only compute shaders
|
||||||
// because they take the longest to compile
|
// 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)
|
if (file == nullptr)
|
||||||
{
|
{
|
||||||
Log(LogLevel::Error, "Could not find shader cache\n");
|
Log(LogLevel::Error, "Could not find shader cache\n");
|
||||||
|
@ -81,19 +81,19 @@ void LoadShaderCache()
|
||||||
}
|
}
|
||||||
|
|
||||||
u32 magic, version, numPrograms;
|
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");
|
Log(LogLevel::Error, "Shader cache file has invalid magic\n");
|
||||||
goto fileInvalid;
|
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");
|
Log(LogLevel::Error, "Shader cache file has bad version\n");
|
||||||
goto fileInvalid;
|
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");
|
Log(LogLevel::Error, "Shader cache file invalid program count\n");
|
||||||
goto fileInvalid;
|
goto fileInvalid;
|
||||||
|
@ -107,9 +107,9 @@ void LoadShaderCache()
|
||||||
|
|
||||||
u32 length, binaryFormat;
|
u32 length, binaryFormat;
|
||||||
u64 sourceHash;
|
u64 sourceHash;
|
||||||
error -= fread(&sourceHash, 8, 1, file);
|
error -= Platform::FileRead(&sourceHash, 8, 1, file);
|
||||||
error -= fread(&length, 4, 1, file);
|
error -= Platform::FileRead(&length, 4, 1, file);
|
||||||
error -= fread(&binaryFormat, 4, 1, file);
|
error -= Platform::FileRead(&binaryFormat, 4, 1, file);
|
||||||
|
|
||||||
if (error != 0)
|
if (error != 0)
|
||||||
{
|
{
|
||||||
|
@ -118,7 +118,7 @@ void LoadShaderCache()
|
||||||
}
|
}
|
||||||
|
|
||||||
u8* data = new u8[length];
|
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");
|
Log(LogLevel::Error, "Could not read shader cache entry data\n");
|
||||||
delete[] data;
|
delete[] data;
|
||||||
|
@ -130,14 +130,12 @@ void LoadShaderCache()
|
||||||
}
|
}
|
||||||
|
|
||||||
fileInvalid:
|
fileInvalid:
|
||||||
fclose(file);
|
Platform::CloseFile(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SaveShaderCache()
|
void SaveShaderCache()
|
||||||
{
|
{
|
||||||
FILE* file = Platform::OpenLocalFile("shadercache", "rb+");
|
Platform::FileHandle* file = Platform::OpenLocalFile("shadercache", Platform::FileMode::ReadWrite);
|
||||||
if (file == nullptr)
|
|
||||||
file = Platform::OpenLocalFile("shadercache", "wb");
|
|
||||||
|
|
||||||
if (file == nullptr)
|
if (file == nullptr)
|
||||||
{
|
{
|
||||||
|
@ -147,9 +145,9 @@ void SaveShaderCache()
|
||||||
|
|
||||||
int written = 3;
|
int written = 3;
|
||||||
u32 magic = ShaderCacheMagic, version = ShaderCacheVersion, numPrograms = ShaderCache.size();
|
u32 magic = ShaderCacheMagic, version = ShaderCacheVersion, numPrograms = ShaderCache.size();
|
||||||
written -= fwrite(&magic, 4, 1, file);
|
written -= Platform::FileWrite(&magic, 4, 1, file);
|
||||||
written -= fwrite(&version, 4, 1, file);
|
written -= Platform::FileWrite(&version, 4, 1, file);
|
||||||
written -= fwrite(&numPrograms, 4, 1, file);
|
written -= Platform::FileWrite(&numPrograms, 4, 1, file);
|
||||||
|
|
||||||
if (written != 0)
|
if (written != 0)
|
||||||
{
|
{
|
||||||
|
@ -157,7 +155,7 @@ void SaveShaderCache()
|
||||||
goto writeError;
|
goto writeError;
|
||||||
}
|
}
|
||||||
|
|
||||||
fseek(file, 0, SEEK_END);
|
Platform::FileSeek(file, 0, Platform::FileSeekOrigin::End);
|
||||||
|
|
||||||
printf("new shaders %d\n", NewShaders.size());
|
printf("new shaders %d\n", NewShaders.size());
|
||||||
|
|
||||||
|
@ -166,10 +164,10 @@ void SaveShaderCache()
|
||||||
int error = 4;
|
int error = 4;
|
||||||
auto it = ShaderCache.find(newShader);
|
auto it = ShaderCache.find(newShader);
|
||||||
|
|
||||||
error -= fwrite(&it->first, 8, 1, file);
|
error -= Platform::FileWrite(&it->first, 8, 1, file);
|
||||||
error -= fwrite(&it->second.Length, 4, 1, file);
|
error -= Platform::FileWrite(&it->second.Length, 4, 1, file);
|
||||||
error -= fwrite(&it->second.BinaryFormat, 4, 1, file);
|
error -= Platform::FileWrite(&it->second.BinaryFormat, 4, 1, file);
|
||||||
error -= fwrite(it->second.Data, it->second.Length, 1, file);
|
error -= Platform::FileWrite(it->second.Data, it->second.Length, 1, file);
|
||||||
|
|
||||||
if (error != 0)
|
if (error != 0)
|
||||||
{
|
{
|
||||||
|
@ -179,7 +177,7 @@ void SaveShaderCache()
|
||||||
}
|
}
|
||||||
|
|
||||||
writeError:
|
writeError:
|
||||||
fclose(file);
|
Platform::CloseFile(file);
|
||||||
|
|
||||||
NewShaders.clear();
|
NewShaders.clear();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue