Merge OSX fixes

This commit is contained in:
Flyinghead 2018-05-15 11:41:44 +02:00
commit 833a616122
10 changed files with 39 additions and 27 deletions

View File

@ -55,12 +55,13 @@ struct tad_context
u8* thd_data;
u8* thd_root;
u8* thd_old_data;
vector<u8*> render_passes;
u8 *render_passes[10];
u32 render_pass_count;
void Clear()
{
thd_old_data = thd_data = thd_root;
render_passes.clear();
render_pass_count = 0;
}
void ClearPartial()
@ -71,7 +72,7 @@ struct tad_context
void Continue()
{
render_passes.push_back(thd_data);
render_passes[render_pass_count++] = thd_data;
}
u8* End()
@ -82,7 +83,7 @@ struct tad_context
void Reset(u8* ptr)
{
thd_data = thd_root = thd_old_data = ptr;
render_passes.clear();
render_pass_count = 0;
}
};
@ -169,10 +170,10 @@ struct TA_context
void MarkRend(u32 render_pass)
{
verify(render_pass <= tad.render_passes.size());
verify(render_pass <= tad.render_pass_count);
rend.proc_start = render_pass == 0 ? tad.thd_root : tad.render_passes[render_pass - 1];
rend.proc_end = render_pass == tad.render_passes.size() ? tad.End() : tad.render_passes[render_pass];
rend.proc_end = render_pass == tad.render_pass_count ? tad.End() : tad.render_passes[render_pass];
}
void Alloc()

View File

@ -1448,7 +1448,7 @@ bool ta_parse_vdrc(TA_context* ctx)
{
TAFifo0.vdec_init();
for (int pass = 0; pass <= ctx->tad.render_passes.size(); pass++)
for (int pass = 0; pass <= ctx->tad.render_pass_count; pass++)
{
ctx->MarkRend(pass);
vd_rc.proc_start = ctx->rend.proc_start;

View File

@ -61,7 +61,11 @@ void context_segfault(rei_host_context_t* reictx, void* segfault_ctx, bool to_se
#error HOST_OS
#endif
#elif HOST_CPU == CPU_X64
bicopy(reictx->pc, MCTX(.gregs[REG_RIP]), to_segfault);
#if HOST_OS == OS_LINUX
bicopy(reictx->pc, MCTX(.gregs[REG_RIP]), to_segfault);
#elif HOST_OS == OS_DARWIN
bicopy(reictx->pc, MCTX(->__ss.__rip), to_segfault);
#endif
#elif HOST_CPU == CPU_MIPS
bicopy(reictx->pc, MCTX(.pc), to_segfault);
#elif HOST_CPU == CPU_GENERIC

View File

@ -177,7 +177,7 @@ CSYM(no_update): @ next_pc _MUST_ be on r4 *R4 NOT R0 anymore*
@ below is inefficient. If anyone is familiar
@ with asm please consider optimising!
ldr r3, =ngen_required @ load r3 with the address of c variable ngen_required
ldr r3, =CSYM(ngen_required) @ load r3 with the address of c variable ngen_required
ldr r0,[r3] @ dereference and store in r0
cmp r0,#0 @ compare r0 with numerical value 0
beq CSYM(cleanup) @ if compare is true jump to cleanup label and exit thread

View File

@ -980,7 +980,7 @@ void SetupModvolVBO()
}
void DrawModVols(int first, int count)
{
if (count == 0 /*|| GetAsyncKeyState(VK_F4)*/)
if (count == 0 /*|| GetAsyncKeyState(VK_F4)*/)
return;
SetupModvolVBO();
@ -1133,8 +1133,8 @@ void DrawStrips()
glActiveTexture(GL_TEXTURE0);
RenderPass previous_pass = {0};
for (int render_pass = 0; render_pass < pvrrc.render_passes.used(); render_pass++) {
const RenderPass& current_pass = pvrrc.render_passes.head()[render_pass];
for (int render_pass = 0; render_pass < pvrrc.render_passes.used(); render_pass++) {
const RenderPass& current_pass = pvrrc.render_passes.head()[render_pass];
//initial state
glDisable(GL_BLEND);

View File

@ -896,7 +896,8 @@ bool gl_create_resources()
glGenBuffers(1, &gl.vbo.modvols);
glGenBuffers(1, &gl.vbo.idxs);
glGenBuffers(1, &gl.vbo.idxs2);
glCheck();
memset(gl.pogram_table,0,sizeof(gl.pogram_table));
PipelineShader* dshader=0;
@ -1008,12 +1009,12 @@ bool gles_init()
#endif
//clean up all buffers ...
for (int i=0;i<10;i++)
{
glClearColor(0.f, 0.f, 0.f, 0.f);
glClear(GL_COLOR_BUFFER_BIT);
gl_swap();
}
// for (int i=0;i<10;i++)
// {
// glClearColor(0.f, 0.f, 0.f, 0.f); glCheck();
// glClear(GL_COLOR_BUFFER_BIT); glCheck();
// gl_swap(); glCheck();
// }
return true;
}
@ -1692,7 +1693,7 @@ bool RenderFrame()
tryfit(xvals,yvals);
}
glUseProgram(gl.modvol_shader.program);
glUseProgram(gl.modvol_shader.program); glCheck();
glUniform4fv( gl.modvol_shader.scale, 1, ShaderUniforms.scale_coefs);
glUniform4fv( gl.modvol_shader.depth_scale, 1, ShaderUniforms.depth_coefs);
@ -1700,7 +1701,7 @@ bool RenderFrame()
GLfloat td[4]={0.5,0,0,0};
glUseProgram(gl.OSD_SHADER.program);
glUseProgram(gl.OSD_SHADER.program); glCheck();
glUniform4fv( gl.OSD_SHADER.scale, 1, ShaderUniforms.scale_coefs);
glUniform4fv( gl.OSD_SHADER.depth_scale, 1, td);
@ -1760,9 +1761,10 @@ bool RenderFrame()
{
#if HOST_OS != OS_DARWIN
//Fix this in a proper way
glBindFramebuffer(GL_FRAMEBUFFER,0);
glBindFramebuffer(GL_FRAMEBUFFER,0); glCheck();
#endif
glViewport(0, 0, screen_width, screen_height);
glViewport(0, 0, screen_width, screen_height); glCheck();
}
bool wide_screen_on = !is_rtt && settings.rend.WideScreen
@ -1776,8 +1778,9 @@ bool RenderFrame()
glClearColor(pvrrc.verts.head()->col[2]/255.0f,pvrrc.verts.head()->col[1]/255.0f,pvrrc.verts.head()->col[0]/255.0f,1.0f);
else
glClearColor(0,0,0,1.0f);
glCheck();
glDisable(GL_SCISSOR_TEST);
glDisable(GL_SCISSOR_TEST); glCheck();
glClear(GL_COLOR_BUFFER_BIT); glCheck();
//move vertex to gpu

View File

@ -32,7 +32,7 @@
#endif
#define glCheck() do { if (unlikely(settings.validate.OpenGlChecks)) { verify(glGetError()==GL_NO_ERROR); } } while(0)
#define glCheck() do { /*if (unlikely(settings.validate.OpenGlChecks))*/ { GLenum err = glGetError(); if (err != GL_NO_ERROR) {printf("OpenGL error %d\n", err); die("OpenGL error"); }} } while(0)
#define eglCheck() false
#define VERTEX_POS_ARRAY 0

View File

@ -41,6 +41,7 @@ class EmuGLView: NSOpenGLView {
[
UInt32(NSOpenGLPFADoubleBuffer),
UInt32(NSOpenGLPFADepthSize), UInt32(24),
UInt32(NSOpenGLPFAStencilSize), UInt32(8),
// Must specify the 3.2 Core Profile to use OpenGL 3.2
UInt32(NSOpenGLPFAOpenGLProfile),
UInt32(NSOpenGLProfileVersion3_2Core),

View File

@ -88,6 +88,7 @@ void gl_swap() {
}
void common_linux_setup();
int dc_init(int argc,wchar* argv[]);
void dc_run();
@ -107,6 +108,7 @@ void* emuthread(void*) {
set_user_config_dir(".");
set_user_data_dir(".");
}
common_linux_setup();
char* argv[] = { "reicast" };
dc_init(1,argv);
@ -132,6 +134,9 @@ extern "C" int emu_single_frame(int w, int h) {
return true;
screen_width = w;
screen_height = h;
glViewport(0, 0, screen_width, screen_height);
GLenum err = glGetError();
if (err != GL_NO_ERROR) {printf("OpenGL error %d\n", err); die("OpenGL error"); }
return rend_single_frame();
}

View File

@ -1659,7 +1659,6 @@
GCC_DYNAMIC_NO_PIC = NO;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
TARGET_NO_EXCEPTIONS,
TARGET_NO_WEBUI,
TARGET_NO_NIXPROF,
TARGET_NO_COREIO_HTTP,
@ -1705,7 +1704,6 @@
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_PREPROCESSOR_DEFINITIONS = (
TARGET_NO_EXCEPTIONS,
TARGET_NO_WEBUI,
TARGET_NO_NIXPROF,
TARGET_NO_COREIO_HTTP,