actually adapt to latest changes
This commit is contained in:
parent
875d455bbf
commit
a5791273d4
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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];
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue