render/wiiu: Reduce GX2SetContextState calls

The function takes a fairly long time to complete
This commit is contained in:
rw-r-r-0644
2019-03-10 00:46:05 +01:00
committed by Ash Logan
parent e8a1980928
commit 2aa1d1449c
3 changed files with 12 additions and 10 deletions

View File

@@ -112,7 +112,6 @@ int WIIU_SDL_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture,
GX2RUnlockBufferEx(a_texCoord, 0);
/* Render */
GX2SetContextState(data->ctx);
wiiuSetTextureShader();
GX2SetPixelTexture(&tdata->texture, 0);
GX2SetPixelSampler(&tdata->sampler, 0);
@@ -215,7 +214,6 @@ int WIIU_SDL_RenderCopyEx(SDL_Renderer * renderer, SDL_Texture * texture,
GX2RUnlockBufferEx(a_texCoord, 0);
/* Render */
GX2SetContextState(data->ctx);
wiiuSetTextureShader();
GX2SetPixelTexture(&tdata->texture, 0);
GX2SetPixelSampler(&tdata->sampler, 0);
@@ -265,7 +263,6 @@ int WIIU_SDL_RenderDrawPoints(SDL_Renderer * renderer, const SDL_FPoint * points
GX2RUnlockBufferEx(a_position, 0);
/* Render points */
GX2SetContextState(data->ctx);
wiiuSetColorShader();
GX2RSetAttributeBuffer(a_position, 0, a_position->elemSize, 0);
GX2SetVertexUniformReg(wiiuColorShader.vertexShader->uniformVars[0].offset, 4, (uint32_t *)&data->u_viewSize);
@@ -312,7 +309,6 @@ int WIIU_SDL_RenderDrawLines(SDL_Renderer * renderer, const SDL_FPoint * points,
GX2RUnlockBufferEx(a_position, 0);
/* Render lines */
GX2SetContextState(data->ctx);
wiiuSetColorShader();
GX2RSetAttributeBuffer(a_position, 0, a_position->elemSize, 0);
GX2SetVertexUniformReg(wiiuColorShader.vertexShader->uniformVars[0].offset, 4, (uint32_t *)&data->u_viewSize);
@@ -373,7 +369,6 @@ int WIIU_SDL_RenderFillRects(SDL_Renderer * renderer, const SDL_FRect * rects, i
GX2RUnlockBufferEx(a_position, 0);
/* Render rects */
GX2SetContextState(data->ctx);
wiiuSetColorShader();
GX2RSetAttributeBuffer(a_position, 0, a_position->elemSize, 0);
GX2SetVertexUniformReg(wiiuColorShader.vertexShader->uniformVars[0].offset, 4, (uint32_t *)&data->u_viewSize);
@@ -411,7 +406,10 @@ int WIIU_SDL_RenderClear(SDL_Renderer * renderer)
(float)renderer->g / 255.0f,
(float)renderer->b / 255.0f,
(float)renderer->a / 255.0f);
/* Restore SDL context state */
GX2SetContextState(data->ctx);
return 0;
}

View File

@@ -101,6 +101,12 @@ SDL_Renderer *WIIU_SDL_CreateRenderer(SDL_Window * window, Uint32 flags)
data->ctx = (GX2ContextState *) memalign(GX2_CONTEXT_STATE_ALIGNMENT, sizeof(GX2ContextState));
memset(data->ctx, 0, sizeof(GX2ContextState));
GX2SetupContextStateEx(data->ctx, TRUE);
GX2SetContextState(data->ctx);
// Setup some context state options
GX2SetAlphaTest(TRUE, GX2_COMPARE_FUNC_GREATER, 0.0f);
GX2SetDepthOnlyControl(FALSE, FALSE, GX2_COMPARE_FUNC_NEVER);
GX2SetCullOnlyControl(GX2_FRONT_FACE_CCW, FALSE, FALSE);
// Make a texture for the window
WIIU_SDL_CreateWindowTex(renderer, window);
@@ -151,7 +157,6 @@ int WIIU_SDL_SetRenderTarget(SDL_Renderer * renderer, SDL_Texture * texture)
};
// Update context state
GX2SetContextState(data->ctx);
GX2SetColorBuffer(target, 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
@@ -159,10 +164,6 @@ int WIIU_SDL_SetRenderTarget(SDL_Renderer * renderer, SDL_Texture * texture)
GX2SetViewport(0, 0, (float)target->surface.width, (float)target->surface.height, 0.0f, 1.0f);
GX2SetScissor(0, 0, (float)target->surface.width, (float)target->surface.height);
GX2SetAlphaTest(TRUE, GX2_COMPARE_FUNC_GREATER, 0.0f);
GX2SetDepthOnlyControl(FALSE, FALSE, GX2_COMPARE_FUNC_NEVER);
GX2SetCullOnlyControl(GX2_FRONT_FACE_CCW, FALSE, FALSE);
return 0;
}

View File

@@ -122,6 +122,9 @@ void WIIU_SDL_RenderPresent(SDL_Renderer * renderer)
WHBGfxFinishRender();
WIIU_FreeRenderData(data);
/* Restore SDL context state */
GX2SetContextState(data->ctx);
}
#endif //SDL_VIDEO_RENDER_WIIU