From 071236e38dc2bc22ac1c83947700a81e231cfffa Mon Sep 17 00:00:00 2001 From: rw-r-r-0644 Date: Sat, 27 Oct 2018 17:48:35 +0200 Subject: [PATCH] wiiu/render: Fix GX2ContextState alignment --- src/render/wiiu/SDL_rdraw_wiiu.c | 10 +++++----- src/render/wiiu/SDL_render_wiiu.c | 9 +++++++-- src/render/wiiu/SDL_render_wiiu.h | 2 +- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/render/wiiu/SDL_rdraw_wiiu.c b/src/render/wiiu/SDL_rdraw_wiiu.c index e7be84650..c5b37343e 100644 --- a/src/render/wiiu/SDL_rdraw_wiiu.c +++ b/src/render/wiiu/SDL_rdraw_wiiu.c @@ -78,7 +78,7 @@ int WIIU_SDL_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture, GX2Invalidate(GX2_INVALIDATE_MODE_CPU_ATTRIBUTE_BUFFER, a_texCoord, sizeof(float) * 8); /* Render */ - GX2SetContextState(&data->ctx); + GX2SetContextState(data->ctx); wiiuSetTextureShader(); GX2SetPixelTexture(&tdata->texture, 0); GX2SetPixelSampler(&tdata->sampler, 0); @@ -130,7 +130,7 @@ int WIIU_SDL_RenderCopyEx(SDL_Renderer * renderer, SDL_Texture * texture, GX2Invalidate(GX2_INVALIDATE_MODE_CPU_ATTRIBUTE_BUFFER, a_texCoord, sizeof(float) * 8); /* Render */ - GX2SetContextState(&data->ctx); + GX2SetContextState(data->ctx); wiiuSetTextureShader(); GX2SetPixelTexture(&tdata->texture, 0); GX2SetPixelSampler(&tdata->sampler, 0); @@ -164,7 +164,7 @@ int WIIU_SDL_RenderDrawPoints(SDL_Renderer * renderer, const SDL_FPoint * points (float)renderer->b / 255.0f, (float)renderer->a / 255.0f}; - GX2SetContextState(&data->ctx); + GX2SetContextState(data->ctx); wiiuSetColorShader(); GX2SetAttribBuffer(0, sizeof(float) * 2 * count, sizeof(float) * 2, a_position); GX2SetPixelUniformReg(wiiuColorShader.pixelShader->uniformVars[0].offset, 4, (uint32_t*)u_color); @@ -197,7 +197,7 @@ int WIIU_SDL_RenderDrawLines(SDL_Renderer * renderer, const SDL_FPoint * points, (float)renderer->b / 255.0f, (float)renderer->a / 255.0f}; - GX2SetContextState(&data->ctx); + GX2SetContextState(data->ctx); wiiuSetColorShader(); GX2SetAttribBuffer(0, sizeof(float) * 2 * count, sizeof(float) * 2, a_position); GX2SetPixelUniformReg(wiiuColorShader.pixelShader->uniformVars[0].offset, 4, (uint32_t*)u_color); @@ -238,7 +238,7 @@ int WIIU_SDL_RenderFillRects(SDL_Renderer * renderer, const SDL_FRect * rects, i (float)renderer->b / 255.0f, (float)renderer->a / 255.0f}; - GX2SetContextState(&data->ctx); + GX2SetContextState(data->ctx); wiiuSetColorShader(); GX2SetAttribBuffer(0, sizeof(float) * 2 * 4 * count, sizeof(float) * 2, a_position); GX2SetPixelUniformReg(wiiuColorShader.pixelShader->uniformVars[0].offset, 4, (uint32_t*)u_color); diff --git a/src/render/wiiu/SDL_render_wiiu.c b/src/render/wiiu/SDL_render_wiiu.c index f85614ab5..53c1f3ea4 100644 --- a/src/render/wiiu/SDL_render_wiiu.c +++ b/src/render/wiiu/SDL_render_wiiu.c @@ -31,6 +31,7 @@ #include +#include #include #include #include @@ -103,7 +104,9 @@ SDL_Renderer *WIIU_SDL_CreateRenderer(SDL_Window * window, Uint32 flags) GX2SetPointSize(1.0f, 1.0f); // Create a fresh context state - GX2SetupContextStateEx(&data->ctx, TRUE); + data->ctx = (GX2ContextState *) memalign(GX2_CONTEXT_STATE_ALIGNMENT, sizeof(GX2ContextState)); + memset(data->ctx, 0, sizeof(GX2ContextState)); + GX2SetupContextStateEx(data->ctx, TRUE); // Setup colour buffer, rendering to the window WIIU_SDL_SetRenderTarget(renderer, NULL); @@ -135,7 +138,7 @@ int WIIU_SDL_SetRenderTarget(SDL_Renderer * renderer, SDL_Texture * texture) GX2InitColorBufferRegs(&data->cbuf); // Update context state - GX2SetContextState(&data->ctx); + GX2SetContextState(data->ctx); GX2SetColorBuffer(&data->cbuf, GX2_RENDER_TARGET_0); // These may be unnecessary - see SDL_render.c: SDL_SetRenderTarget's calls // to UpdateViewport and UpdateClipRect. TODO for once the render is @@ -156,6 +159,8 @@ void WIIU_SDL_DestroyRenderer(SDL_Renderer * renderer) SDL_free(ptr); } + free(data->ctx); + wiiuFreeColorShader(); wiiuFreeTextureShader(); diff --git a/src/render/wiiu/SDL_render_wiiu.h b/src/render/wiiu/SDL_render_wiiu.h index b98fa6ea1..cb745fd9f 100644 --- a/src/render/wiiu/SDL_render_wiiu.h +++ b/src/render/wiiu/SDL_render_wiiu.h @@ -39,7 +39,7 @@ typedef struct typedef struct { GX2ColorBuffer cbuf; - GX2ContextState ctx; + GX2ContextState *ctx; WIIU_RenderAllocData *listfree; } WIIU_RenderData;