diff --git a/Makefile.common b/Makefile.common
index 2428402d2d..5afd751391 100644
--- a/Makefile.common
+++ b/Makefile.common
@@ -374,8 +374,8 @@ ifeq ($(HAVE_DINPUT), 1)
JOYCONFIG_LIBS += -ldinput8 -ldxguid -lole32
endif
-ifeq ($(HAVE_WINXINPUT), 1)
- DEFINES += -DHAVE_WINXINPUT -DHAVE_BUILTIN_AUTOCONFIG
+ifeq ($(HAVE_XINPUT), 1)
+ DEFINES += -DHAVE_XINPUT -DHAVE_BUILTIN_AUTOCONFIG
OBJ += input/drivers_joypad/xinput_joypad.o \
input/autoconf/builtin_win.o
endif
diff --git a/Makefile.win b/Makefile.win
index 5f41ec11e3..50edf7f35a 100644
--- a/Makefile.win
+++ b/Makefile.win
@@ -20,7 +20,7 @@ HAVE_ZLIB_DEFLATE = 1
HAVE_PYTHON = 0
DYNAMIC = 1
-HAVE_WINXINPUT = 1
+HAVE_XINPUT = 1
HAVE_SDL := 0
HAVE_SDL2 := 0
diff --git a/config.def.h b/config.def.h
index 3c71525c64..ea38f25e55 100644
--- a/config.def.h
+++ b/config.def.h
@@ -94,7 +94,7 @@ enum
INPUT_NULL,
JOYPAD_PS3,
- JOYPAD_WINXINPUT,
+ JOYPAD_XINPUT,
JOYPAD_GX,
JOYPAD_XDK,
JOYPAD_PSP,
@@ -251,8 +251,8 @@ enum
#if defined(__CELLOS_LV2__)
#define JOYPAD_DEFAULT_DRIVER JOYPAD_PS3
-#elif defined(HAVE_WINXINPUT)
-#define JOYPAD_DEFAULT_DRIVER JOYPAD_WINXINPUT
+#elif defined(HAVE_XINPUT)
+#define JOYPAD_DEFAULT_DRIVER JOYPAD_XINPUT
#elif defined(GEKKO)
#define JOYPAD_DEFAULT_DRIVER JOYPAD_GX
#elif defined(_XBOX)
diff --git a/configuration.c b/configuration.c
index 7eb490611c..6eee97756a 100644
--- a/configuration.c
+++ b/configuration.c
@@ -264,8 +264,8 @@ const char *config_get_default_joypad(void)
{
case JOYPAD_PS3:
return "ps3";
- case JOYPAD_WINXINPUT:
- return "winxinput";
+ case JOYPAD_XINPUT:
+ return "xinput";
case JOYPAD_GX:
return "gx";
case JOYPAD_XDK:
diff --git a/frontend/drivers/platform_android.c b/frontend/drivers/platform_android.c
index a20a50ab7d..e3f03ce91b 100644
--- a/frontend/drivers/platform_android.c
+++ b/frontend/drivers/platform_android.c
@@ -394,20 +394,20 @@ void ANativeActivity_onCreate(ANativeActivity* activity,
}
memset(android_app, 0, sizeof(struct android_app));
+
android_app->activity = activity;
-
- android_app->mutex = slock_new();
- android_app->cond = scond_new();
+ android_app->mutex = slock_new();
+ android_app->cond = scond_new();
if (pipe(msgpipe))
{
RARCH_ERR("could not create pipe: %s.\n", strerror(errno));
activity->instance = NULL;
}
- android_app->msgread = msgpipe[0];
+ android_app->msgread = msgpipe[0];
android_app->msgwrite = msgpipe[1];
- android_app->thread = sthread_create(android_app_entry, android_app);
+ android_app->thread = sthread_create(android_app_entry, android_app);
/* Wait for thread to start. */
slock_lock(android_app->mutex);
diff --git a/frontend/drivers/platform_ctr.c b/frontend/drivers/platform_ctr.c
index c7fcb3545c..2048c351bc 100644
--- a/frontend/drivers/platform_ctr.c
+++ b/frontend/drivers/platform_ctr.c
@@ -120,6 +120,8 @@ static void frontend_ctr_deinit(void *data)
global->log_file = NULL;
#endif
+ wait_for_input();
+
gfxExit();
// sdmcExit();
// fsExit();
@@ -134,13 +136,6 @@ static void frontend_ctr_shutdown(bool unused)
(void)unused;
}
-static int exit_callback(int arg1, int arg2, void *common)
-{
- frontend_ctr_deinit(NULL);
- frontend_ctr_shutdown(false);
- return 0;
-}
-
#define PRINTFPOS(X,Y) "\x1b["#X";"#Y"H"
#define PRINTFPOS_STR(X,Y) "\x1b["X";"Y"H"
static void frontend_ctr_init(void *data)
@@ -150,23 +145,10 @@ static void frontend_ctr_init(void *data)
global_t *global = global_get_ptr();
global->verbosity = true;
- gfxInitDefault();
+// gfxInitDefault();
+ gfxInit(GSP_BGR8_OES,GSP_RGB565_OES,false);
gfxSet3D(false);
consoleInit(GFX_BOTTOM, NULL);
-
-// consoleInit(GFX_BOTTOM, NULL);
-
-// gfxInitDefault();
-// gfxInit(GSP_RGBA8_OES,GSP_RGBA8_OES,false);
-
-// gfxSet3D(false);
-
-// consoleInit(GFX_BOTTOM, NULL);
-// printf(PRINTFPOS(0,0)"3ds_test");
-// printf(PRINTFPOS(0,1)"Press Start to exit.");
-
-// gfxFlushBuffers();
-// gfxSwapBuffers();
#endif
}
@@ -174,12 +156,12 @@ static void frontend_ctr_init(void *data)
static int frontend_ctr_get_rating(void)
{
- return 4;
+ return 3;
}
bool select_pressed = false;
void wait_for_input()
{
- printf("Press Start.\n\n\n\n");fflush(stdout);
+ printf("\n\nPress Start.\n\n");fflush(stdout);
while(aptMainLoop())
{
hidScanInput();
diff --git a/gfx/d3d/render_chain.cpp b/gfx/d3d/render_chain.cpp
index a788fa7b39..9deabe982f 100644
--- a/gfx/d3d/render_chain.cpp
+++ b/gfx/d3d/render_chain.cpp
@@ -297,7 +297,7 @@ static void renderchain_set_shader_mvp(void *data, void *shader_data, void *matr
cgD3D9SetUniform(cgp, &val); \
} while(0)
-void renderchain_set_shader_params(void *data, void *pass_data,
+static void renderchain_set_shader_params(void *data, void *pass_data,
unsigned video_w, unsigned video_h,
unsigned tex_w, unsigned tex_h,
unsigned viewport_w, unsigned viewport_h)
diff --git a/gfx/d3d/render_chain.h b/gfx/d3d/render_chain.h
index c9db6acabe..dc4e04fec3 100644
--- a/gfx/d3d/render_chain.h
+++ b/gfx/d3d/render_chain.h
@@ -98,11 +98,6 @@ void renderchain_set_shaders(void *data, void *fragment_data, void *vertex_data)
void renderchain_destroy_shader(void *data, int i);
-void renderchain_set_shader_params(void *data, void *pass_data,
- unsigned video_w, unsigned video_h,
- unsigned tex_w, unsigned tex_h,
- unsigned viewport_w, unsigned viewport_h);
-
bool renderchain_init_shader_fvf(void *data, void *pass_data);
#endif
diff --git a/gfx/d3d/render_chain_xdk.h b/gfx/d3d/render_chain_xdk.h
index 1a5a5a2de5..6a8a7951f3 100644
--- a/gfx/d3d/render_chain_xdk.h
+++ b/gfx/d3d/render_chain_xdk.h
@@ -20,7 +20,7 @@ static void renderchain_set_mvp(void *data, unsigned vp_width,
#endif
}
-static void renderchain_clear(void *data)
+void renderchain_clear(void *data)
{
d3d_video_t *d3d = (d3d_video_t*)data;
@@ -28,7 +28,7 @@ static void renderchain_clear(void *data)
d3d_vertex_buffer_free(d3d->vertex_buf, d3d->vertex_decl);
}
-static void renderchain_free(void *data)
+void renderchain_free(void *data)
{
d3d_video_t *chain = (d3d_video_t*)data;
@@ -100,11 +100,11 @@ static bool renderchain_create_first_pass(void *data,
return true;
}
-static void renderchain_deinit_shader(void)
+void renderchain_deinit_shader(void)
{
}
-static bool renderchain_init_shader(void *data)
+bool renderchain_init_shader(void *data)
{
const char *shader_path = NULL;
d3d_video_t *d3d = (d3d_video_t*)data;
@@ -239,7 +239,7 @@ static void renderchain_set_vertices(void *data, unsigned pass,
#endif
}
-static void renderchain_blit_to_texture(void *data, const void *frame,
+void renderchain_blit_to_texture(void *data, const void *frame,
unsigned width, unsigned height, unsigned pitch)
{
D3DLOCKED_RECT d3dlr;
diff --git a/gfx/drivers/ctr_blit.shader b/gfx/drivers/ctr_blit.shader
index f4f161e822..cfba558434 100644
--- a/gfx/drivers/ctr_blit.shader
+++ b/gfx/drivers/ctr_blit.shader
@@ -1,39 +1,33 @@
-; setup constants
- .const c20, 0.0, 1.0, 0.0, 1.0
+ .const c20, 0.0, 1.0, 0.0, 1.0
+
+; .in v0, vertex
+; .in v1, texCoord
-; setup outmap
.out o0, result.position, 0xF
.out o1, result.color, 0xF
.out o2, result.texcoord0, 0x3
-; setup uniform map (not required)
- .uniform c0, c3, projection
+; .uniform c0, c0, vertexScale
+; .uniform c1, c1, textureScale
- .vsh vmain, end_vmain
+ .vsh vmain, end_vmain
;code
vmain:
- mov r0, v0 (0x4)
- mov r0, c20 (0x3)
- dp4 o0, c0, r0 (0x0)
- dp4 o0, c1, r0 (0x1)
- dp4 o0, c2, r0 (0x2)
- mov o0, c20 (0x3)
- mov o1, c20 (0x5)
- ;mov o2, v1 (0x6)
- mul r0, c3, v1 (0x6)
- add o2, c20, r0 (0x7)
- flush
+ mul r0, c0, v0 (0x0)
+ add o0, c20, r0 (0x1)
+ mov o0, c20 (0x2)
+ mov o1, c20 (0x3)
+ mul r0, c1, v1 (0x4)
+ add o2, c20, r0 (0x5)
nop
end
end_vmain:
;operand descriptors
- .opdesc x___, xyzw, xyzw ; 0x0
- .opdesc _y__, xyzw, xyzw ; 0x1
- .opdesc __z_, xyzw, xyzw ; 0x2
- .opdesc ___w, xyzw, xyzw ; 0x3
- .opdesc xyz_, xyzw, xyzw ; 0x4
- .opdesc xyzw, wwww, wwww ; 0x5
- .opdesc xyzw, xyzw, xyzw ; 0x6
- .opdesc xyzw, xyzz, xyzw ; 0x7
+ .opdesc xyz_, xyzw, yxzw ; 0x0
+ .opdesc xyz_, yyzw, xyzw ; 0x1
+ .opdesc ___w, xyzw, xyzw ; 0x2
+ .opdesc xyzw, wwww, wwww ; 0x3
+ .opdesc xyzw, xyzw, xyzw ; 0x4
+ .opdesc xyzw, xyzw, xyzw ; 0x5
diff --git a/gfx/drivers/ctr_gfx.c b/gfx/drivers/ctr_gfx.c
index 3f8f1eea7b..0d7817caa0 100644
--- a/gfx/drivers/ctr_gfx.c
+++ b/gfx/drivers/ctr_gfx.c
@@ -13,15 +13,13 @@
* If not, see .
*/
-/* using code the from GPU example in crtulib */
-
#include <3ds.h>
#include
#include
#include
+#include "ctr_gu.h"
#include "ctr_blit_shader_shbin.h"
-
#include "../../general.h"
#include "../../driver.h"
#include "../video_viewport.h"
@@ -29,8 +27,45 @@
#include "retroarch.h"
+#define CTR_TOP_FRAMEBUFFER_WIDTH 400
+#define CTR_TOP_FRAMEBUFFER_HEIGHT 240
+#define CTR_GPU_FRAMEBUFFER ((void*)0x1F119400)
+#define CTR_GPU_DEPTHBUFFER ((void*)0x1F370800)
+
+typedef struct
+{
+ s16 x, y, z;
+ s16 u, v;
+} ctr_vertex_t;
+
typedef struct ctr_video
{
+ struct
+ {
+ uint32_t* display_list;
+ int display_list_size;
+ void* texture_linear;
+ void* texture_swizzled;
+ int texture_width;
+ int texture_height;
+ float texture_scale[4];
+ ctr_vertex_t* frame_coords;
+ }menu;
+
+ uint32_t* display_list;
+ int display_list_size;
+ void* texture_linear;
+ void* texture_swizzled;
+ int texture_width;
+ int texture_height;
+
+ float vertex_scale[4];
+ float texture_scale[4];
+ ctr_vertex_t* frame_coords;
+
+ DVLB_s* dvlb;
+ shaderProgram_s shader;
+
bool rgb32;
bool vsync;
bool smooth;
@@ -38,206 +73,117 @@ typedef struct ctr_video
unsigned rotation;
} ctr_video_t;
-DVLB_s* dvlb;
-shaderProgram_s shader;
-u32* texData;
-u32* texData2;
-
-//GPU framebuffer address
-u32* gpuOut = (u32*)0x1F119400;
-//GPU depth buffer address
-u32* gpuDOut = (u32*)0x1F370800;
-
-typedef struct
-{
- struct
- {
- float x, y, z;
- } position;
- float texcoord[2];
-} vertex_s;
-
-
-u32 gpuCmdSize;
-u32* gpuCmd;
-u32* gpuCmdRight;
-
-
-u32* texture_bin;
-
-#define tex_w 512
-#define tex_h 512
-#define gpu_tex_w 512
-#define gpu_tex_h 512
-
-#define TEX_MAKE_SIZE(W,H) (((u32)(W))|((u32)(H)<<16))
-#define tex_size TEX_MAKE_SIZE(tex_w, tex_h)
-#define gpu_tex_size TEX_MAKE_SIZE(gpu_tex_w, gpu_tex_h)
-
-#define texture_bin_size (tex_w * tex_h * sizeof(*texture_bin))
-#define gpu_texture_bin_size (gpu_tex_w * gpu_tex_h * 4)
-
-#define fbwidth 400
-#define fbheight 240
-
-#define CTR_MATRIX(X0,Y0,Z0,W0,X1,Y1,Z1,W1,X2,Y2,Z2,W2,X3,Y3,Z3,W3) {W0,Z0,Y0,X0,W1,Z1,Y1,X1,W2,Z2,Y2,X2,W3,Z3,Y3,X3}
-
-float proj_m[16] = CTR_MATRIX
- (
- 0.0, -2.0 / fbheight, 0.0, 1.0,
- -2.0 / fbwidth, 0.0, 0.0, 1.0,
- 0.0, 0.0, 1.0, 0.0,
- 1.0 / gpu_tex_w, -1.0 / gpu_tex_h, 1.0, 1.0
- );
-
-
-
-
-const vertex_s modelVboData[] =
-{
- {{ 40 + 0.0f, 0.0f, -1.0f}, {0.0f, 0.0f}},
- {{ 40 + 320, 0.0f, -1.0f}, {320, 0.0f}},
- {{ 40 + 320, tex_h, -1.0f}, {320, tex_h}},
-
- {{ 40 + 0.0f, 0.0f, -1.0f}, {0.0f, 0.0f}},
- {{ 40 + 320, tex_h, -1.0f}, {320, tex_h}},
- {{ 40 + 0.0f, tex_h, -1.0f}, {0.0f, tex_h}}
-};
-
-void* vbo_buffer;
-
-//stolen from staplebutt
-void GPU_SetDummyTexEnv(u8 num)
-{
- GPU_SetTexEnv(num,
- GPU_TEVSOURCES(GPU_PREVIOUS, 0, 0),
- GPU_TEVSOURCES(GPU_PREVIOUS, 0, 0),
- GPU_TEVOPERANDS(0, 0, 0),
- GPU_TEVOPERANDS(0, 0, 0),
- GPU_REPLACE,
- GPU_REPLACE,
- 0xFFFFFFFF);
-}
-
-// topscreen
-void renderFrame(ctr_video_t* ctr)
-{
- GPU_SetViewport((u32*)osConvertVirtToPhys((u32)gpuDOut),
- (u32*)osConvertVirtToPhys((u32)gpuOut), 0, 0, fbheight * 2, fbwidth);
-
- GPU_DepthMap(-1.0f, 0.0f);
- GPU_SetFaceCulling(GPU_CULL_NONE);
- GPU_SetStencilTest(false, GPU_ALWAYS, 0x00, 0xFF, 0x00);
- GPU_SetStencilOp(GPU_KEEP, GPU_KEEP, GPU_KEEP);
- GPU_SetBlendingColor(0, 0, 0, 0);
- // GPU_SetDepthTestAndWriteMask(true, GPU_GREATER, GPU_WRITE_ALL);
- GPU_SetDepthTestAndWriteMask(false, GPU_ALWAYS, GPU_WRITE_ALL);
- // GPU_SetDepthTestAndWriteMask(true, GPU_ALWAYS, GPU_WRITE_ALL);
-
- GPUCMD_AddMaskedWrite(GPUREG_0062, 0x1, 0);
- GPUCMD_AddWrite(GPUREG_0118, 0);
-
- GPU_SetAlphaBlending(GPU_BLEND_ADD, GPU_BLEND_ADD, GPU_SRC_ALPHA,
- GPU_ONE_MINUS_SRC_ALPHA, GPU_SRC_ALPHA, GPU_ONE_MINUS_SRC_ALPHA);
- GPU_SetAlphaTest(false, GPU_ALWAYS, 0x00);
-
- GPU_SetTextureEnable(GPU_TEXUNIT0);
-
- GPU_SetTexEnv(0,
- GPU_TEVSOURCES(GPU_TEXTURE0, GPU_PRIMARY_COLOR, GPU_PRIMARY_COLOR),
- GPU_TEVSOURCES(GPU_TEXTURE0, GPU_PRIMARY_COLOR, GPU_PRIMARY_COLOR),
- GPU_TEVOPERANDS(0, 0, 0),
- GPU_TEVOPERANDS(0, 0, 0),
- GPU_MODULATE, GPU_MODULATE,
- 0xFFFFFFFF);
- GPU_SetDummyTexEnv(1);
- GPU_SetDummyTexEnv(2);
- GPU_SetDummyTexEnv(3);
- GPU_SetDummyTexEnv(4);
- GPU_SetDummyTexEnv(5);
-
- //texturing stuff
- GPU_SetTexture(GPU_TEXUNIT0, (u32*)osConvertVirtToPhys((u32)texData), gpu_tex_w, gpu_tex_h,
- GPU_TEXTURE_MAG_FILTER(GPU_LINEAR) | GPU_TEXTURE_MIN_FILTER(GPU_LINEAR),
- ctr->menu_texture_enable?GPU_RGBA4:GPU_RGB565);
-
- u32 bufferoffset = 0x00000000;
- u64 bufferpermutations = 0x210;
- u8 numattributes = 2;
- GPU_SetAttributeBuffers(3, (u32*)osConvertVirtToPhys((u32)vbo_buffer),
- GPU_ATTRIBFMT(0, 3, GPU_FLOAT) | GPU_ATTRIBFMT(1, 2, GPU_FLOAT),
- 0xFFC, 0x210, 1, &bufferoffset, &bufferpermutations, &numattributes);
-
- GPU_DrawArray(GPU_TRIANGLES, sizeof(modelVboData) / sizeof(vertex_s));
-
- GPU_FinishDrawing();
-}
-
-void gpu_init_calls(void)
-{
- GPU_Init(NULL);
- gpuCmdSize = 0x40000;
- gpuCmd = (u32*)linearAlloc(gpuCmdSize * 4);
- gpuCmdRight = (u32*)linearAlloc(gpuCmdSize * 4);
- GPU_Reset(NULL, gpuCmd, gpuCmdSize);
- dvlb = DVLB_ParseFile((u32*)ctr_blit_shader_shbin, ctr_blit_shader_shbin_size);
- shaderProgramInit(&shader);
- shaderProgramSetVsh(&shader, &dvlb->DVLE[0]);
- shaderProgramUse(&shader);
-
- // Flush the command buffer so that the shader upload gets executed
- GPUCMD_Finalize();
- GPUCMD_FlushAndRun(NULL);
- gspWaitForP3D();
-
- //create texture
- texData = (u32*)linearMemAlign(gpu_texture_bin_size,
- 0x80); //textures need to be 0x80-byte aligned
-
- texData2 = (u32*)linearMemAlign(texture_bin_size,
- 0x80); //textures need to be 0x80-byte aligned
-
- memcpy(texData2, texture_bin, texture_bin_size);
- vbo_buffer = linearAlloc(sizeof(modelVboData));
- memcpy(vbo_buffer, (void*)modelVboData, sizeof(modelVboData));
-}
#define PRINTFPOS(X,Y) "\x1b["#X";"#Y"H"
#define PRINTFPOS_STR(X,Y) "\x1b["X";"Y"H"
+static void ctr_set_frame_coords(ctr_vertex_t* v, int x, int y, int w, int h)
+{
+ v[0].x = x;
+ v[0].y = y;
+ v[0].z = -1;
+ v[0].u = 0;
+ v[0].v = 0;
+
+ v[1].x = x + w;
+ v[1].y = y;
+ v[1].z = -1;
+ v[1].u = w;
+ v[1].v = 0;
+
+ v[2].x = x + w;
+ v[2].y = y + h;
+ v[2].z = -1;
+ v[2].u = w;
+ v[2].v = h;
+
+ v[3].x = x;
+ v[3].y = y;
+ v[3].z = -1;
+ v[3].u = 0;
+ v[3].v = 0;
+
+ v[4].x = x + w;
+ v[4].y = y + h;
+ v[4].z = -1;
+ v[4].u = w;
+ v[4].v = h;
+
+ v[5].x = x;
+ v[5].y = y + h;
+ v[5].z = -1;
+ v[5].u = 0;
+ v[5].v = h;
+
+
+}
+
static void* ctr_init(const video_info_t* video,
const input_driver_t** input, void** input_data)
{
void* ctrinput = NULL;
- global_t* global = global_get_ptr();
- ctr_video_t* ctr = (ctr_video_t*)calloc(1, sizeof(ctr_video_t));
+ ctr_video_t* ctr = (ctr_video_t*)linearAlloc(sizeof(ctr_video_t));
if (!ctr)
return NULL;
- printf("%s@%s:%d.\n",__FUNCTION__, __FILE__, __LINE__);fflush(stdout);
-
// gfxInitDefault();
// gfxSet3D(false);
- texture_bin = (typeof(texture_bin))malloc(texture_bin_size);
- int i, j;
- for (j = 0; j < tex_h; j++)
- {
- for (i = 0; i < tex_w; i++)
- {
- if ((i & 0x8) || (j & 0x8))
- texture_bin[i + j * tex_w] = 0x0000FFFF;
- else
- texture_bin[i + j * tex_w] = 0xFFFFFFFF;
- if (i > 64)
- texture_bin[i + j * tex_w] = 0xFF0000FF;
+ memset(ctr, 0, sizeof(ctr_video_t));
- }
+ ctr->display_list_size = 0x40000;
+ ctr->display_list = linearAlloc(ctr->display_list_size * sizeof(uint32_t));
+ GPU_Reset(NULL, ctr->display_list, ctr->display_list_size);
- }
+ ctr->texture_width = 512;
+ ctr->texture_height = 512;
+ ctr->texture_linear =
+ linearMemAlign(ctr->texture_width * ctr->texture_height * sizeof(uint32_t), 128);
+ ctr->texture_swizzled =
+ linearMemAlign(ctr->texture_width * ctr->texture_height * sizeof(uint32_t), 128);
+
+ ctr->frame_coords = linearAlloc(6 * sizeof(ctr_vertex_t));
+ ctr_set_frame_coords(ctr->frame_coords, 0, 0, CTR_TOP_FRAMEBUFFER_WIDTH, CTR_TOP_FRAMEBUFFER_HEIGHT);
+
+ ctr->menu.texture_width = 512;
+ ctr->menu.texture_height = 512;
+ ctr->menu.texture_linear =
+ linearMemAlign(ctr->texture_width * ctr->texture_height * sizeof(uint16_t), 128);
+ ctr->menu.texture_swizzled =
+ linearMemAlign(ctr->texture_width * ctr->texture_height * sizeof(uint16_t), 128);
+
+ ctr->menu.frame_coords = linearAlloc(6 * sizeof(ctr_vertex_t));
+ ctr_set_frame_coords(ctr->menu.frame_coords, 40, 0, CTR_TOP_FRAMEBUFFER_WIDTH, CTR_TOP_FRAMEBUFFER_HEIGHT);
+
+
+
+ ctr->vertex_scale[0] = 1.0;
+ ctr->vertex_scale[1] = 1.0;
+ ctr->vertex_scale[2] = -2.0 / CTR_TOP_FRAMEBUFFER_WIDTH;
+ ctr->vertex_scale[3] = -2.0 / CTR_TOP_FRAMEBUFFER_HEIGHT;
+
+ ctr->texture_scale[0] = 1.0;
+ ctr->texture_scale[1] = 1.0;
+ ctr->texture_scale[2] = -1.0 / ctr->texture_height;
+ ctr->texture_scale[3] = 1.0 / ctr->texture_width;
+
+ ctr->menu.texture_scale[0] = 1.0;
+ ctr->menu.texture_scale[1] = 1.0;
+ ctr->menu.texture_scale[2] = -1.0 / ctr->texture_height;
+ ctr->menu.texture_scale[3] = 1.0 / ctr->texture_width;
+
+
+ ctr->dvlb = DVLB_ParseFile((u32*)ctr_blit_shader_shbin, ctr_blit_shader_shbin_size);
+ shaderProgramInit(&ctr->shader);
+ shaderProgramSetVsh(&ctr->shader, &ctr->dvlb->DVLE[0]);
+ shaderProgramUse(&ctr->shader);
+
+
+ GPUCMD_Finalize();
+ GPUCMD_FlushAndRun(NULL);
+ gspWaitForEvent(GSPEVENT_P3D, false);
- gpu_init_calls();
if (input && input_data)
{
@@ -246,7 +192,6 @@ static void* ctr_init(const video_info_t* video,
*input_data = ctrinput;
}
- printf("%s@%s:%d.\n",__FUNCTION__, __FILE__, __LINE__);fflush(stdout);
return ctr;
}
@@ -256,9 +201,8 @@ static bool ctr_frame(void* data, const void* frame,
ctr_video_t* ctr = (ctr_video_t*)data;
settings_t* settings = config_get_ptr();
-// int i;
static uint64_t currentTick,lastTick;
- static float fps=0.0;
+ static float fps = 0.0;
static int total_frames = 0;
static int frames = 0;
@@ -291,72 +235,157 @@ static bool ctr_frame(void* data, const void* frame,
frames = 0;
}
- printf("fps: %8.4f frames: %i current tick: %llu\r", fps, total_frames++, currentTick);
+ printf("fps: %8.4f frames: %i\r", fps, total_frames++);
fflush(stdout);
-// gfxFlushBuffers();
-// gspWaitForEvent(GSPEVENT_VBlank0, true);
-
- u32 backgroundColor = 0x00000000;
-
GPUCMD_SetBufferOffset(0);
- GPU_SetFloatUniform(GPU_VERTEX_SHADER,
- shaderInstanceGetUniformLocation(shader.vertexShader, "projection"),
- (u32*)proj_m, 4);
+ ctrGuSetVertexShaderFloatUniform(0, ctr->vertex_scale, 1);
- if(!ctr->menu_texture_enable && frame)
+ GPU_SetViewport(VIRT_TO_PHYS(CTR_GPU_DEPTHBUFFER),
+ VIRT_TO_PHYS(CTR_GPU_FRAMEBUFFER),
+ 0, 0, CTR_TOP_FRAMEBUFFER_HEIGHT, CTR_TOP_FRAMEBUFFER_WIDTH);
+
+// GPU_SetViewport(NULL,
+// VIRT_TO_PHYS(CTR_GPU_FRAMEBUFFER),
+// 0, 0, CTR_TOP_FRAMEBUFFER_HEIGHT, CTR_TOP_FRAMEBUFFER_WIDTH);
+
+ GPU_DepthMap(-1.0f, 0.0f);
+ GPU_SetFaceCulling(GPU_CULL_NONE);
+ GPU_SetStencilTest(false, GPU_ALWAYS, 0x00, 0xFF, 0x00);
+ GPU_SetStencilOp(GPU_KEEP, GPU_KEEP, GPU_KEEP);
+ GPU_SetBlendingColor(0, 0, 0, 0);
+// GPU_SetDepthTestAndWriteMask(true, GPU_GREATER, GPU_WRITE_ALL);
+ GPU_SetDepthTestAndWriteMask(false, GPU_ALWAYS, GPU_WRITE_ALL);
+ // GPU_SetDepthTestAndWriteMask(true, GPU_ALWAYS, GPU_WRITE_ALL);
+
+ GPUCMD_AddMaskedWrite(GPUREG_0062, 0x1, 0);
+ GPUCMD_AddWrite(GPUREG_0118, 0);
+
+ GPU_SetAlphaBlending(GPU_BLEND_ADD, GPU_BLEND_ADD,
+ GPU_SRC_ALPHA, GPU_ONE_MINUS_SRC_ALPHA,
+ GPU_SRC_ALPHA, GPU_ONE_MINUS_SRC_ALPHA);
+ GPU_SetAlphaTest(false, GPU_ALWAYS, 0x00);
+
+ GPU_SetTextureEnable(GPU_TEXUNIT0);
+
+ GPU_SetTexEnv(0,
+ GPU_TEVSOURCES(GPU_TEXTURE0, GPU_PRIMARY_COLOR, 0),
+ GPU_TEVSOURCES(GPU_TEXTURE0, GPU_PRIMARY_COLOR, 0),
+ GPU_TEVOPERANDS(0, 0, 0),
+ GPU_TEVOPERANDS(0, 0, 0),
+ GPU_MODULATE, GPU_MODULATE,
+ 0xFFFFFFFF);
+
+ GPU_SetTexEnv(1, GPU_PREVIOUS,GPU_PREVIOUS, 0, 0, 0, 0, 0);
+ GPU_SetTexEnv(2, GPU_PREVIOUS,GPU_PREVIOUS, 0, 0, 0, 0, 0);
+ GPU_SetTexEnv(3, GPU_PREVIOUS,GPU_PREVIOUS, 0, 0, 0, 0, 0);
+ GPU_SetTexEnv(4, GPU_PREVIOUS,GPU_PREVIOUS, 0, 0, 0, 0, 0);
+ GPU_SetTexEnv(5, GPU_PREVIOUS,GPU_PREVIOUS, 0, 0, 0, 0, 0);
+
+
+ if(frame)
{
int i;
- uint8_t* dst = (uint8_t*)texData2;
+ uint16_t* dst = (uint16_t*)ctr->texture_linear;
const uint8_t* src = frame;
- if (width > tex_w)
- width = tex_w;
- if (height > tex_h)
- height = tex_h;
+ if (width > ctr->texture_width)
+ width = ctr->texture_width;
+ if (height > ctr->texture_height)
+ height = ctr->texture_height;
for (i = 0; i < height; i++)
{
- memcpy(dst, src, width*2);
- dst += tex_w*2;
+ memcpy(dst, src, width * sizeof(uint16_t));
+ dst += ctr->texture_width;
src += pitch;
}
+ GSPGPU_FlushDataCache(NULL, ctr->texture_linear,
+ ctr->texture_width * ctr->texture_height * sizeof(uint16_t));
+
+ ctrGuCopyImage(ctr->texture_linear, ctr->texture_width, ctr->menu.texture_height, CTRGU_RGB565, false,
+ ctr->texture_swizzled, ctr->texture_width, CTRGU_RGB565, true);
+
+ gspWaitForEvent(GSPEVENT_PPF, false);
+
+
+ ctrGuSetTexture(GPU_TEXUNIT0, VIRT_TO_PHYS(ctr->texture_swizzled), ctr->texture_width, ctr->texture_height,
+ GPU_TEXTURE_MAG_FILTER(GPU_LINEAR) | GPU_TEXTURE_MIN_FILTER(GPU_LINEAR) |
+ GPU_TEXTURE_WRAP_S(GPU_CLAMP_TO_EDGE) | GPU_TEXTURE_WRAP_T(GPU_CLAMP_TO_EDGE),
+ GPU_RGB565);
+
+
+ GSPGPU_FlushDataCache(NULL, (u8*)ctr->frame_coords,
+ 6 * sizeof(ctr_vertex_t));
+ ctrGuSetAttributeBuffers(2,
+ VIRT_TO_PHYS(ctr->frame_coords),
+ CTRGU_ATTRIBFMT(GPU_SHORT, 3) << 0 |
+ CTRGU_ATTRIBFMT(GPU_SHORT, 2) << 4,
+ sizeof(ctr_vertex_t));
+
+ ctrGuSetVertexShaderFloatUniform(1, ctr->texture_scale, 1);
+
+ GPU_DrawArray(GPU_TRIANGLES, 6);
+
}
- GSPGPU_FlushDataCache(NULL, (u8*)texData2, texture_bin_size);
- GX_SetDisplayTransfer(NULL, (u32*)texData2, tex_size, (u32*)texData, gpu_tex_size,
- 0x3302); // rgb32=0x0 rgb32=0x0 ??=0x0 linear2swizzeled=0x2
- gspWaitForPPF();
+ if (ctr->menu_texture_enable)
+ {
+
+ GSPGPU_FlushDataCache(NULL, ctr->menu.texture_linear,
+ ctr->menu.texture_width * ctr->menu.texture_height * sizeof(uint16_t));
+
+ ctrGuCopyImage(ctr->menu.texture_linear, ctr->menu.texture_width, ctr->menu.texture_height, CTRGU_RGBA4444,false,
+ ctr->menu.texture_swizzled, ctr->menu.texture_width, CTRGU_RGBA4444, true);
+
+ gspWaitForEvent(GSPEVENT_PPF, false);
+
+
+ ctrGuSetTexture(GPU_TEXUNIT0, VIRT_TO_PHYS(ctr->menu.texture_swizzled), ctr->menu.texture_width, ctr->menu.texture_height,
+ GPU_TEXTURE_MAG_FILTER(GPU_LINEAR) | GPU_TEXTURE_MIN_FILTER(GPU_LINEAR) |
+ GPU_TEXTURE_WRAP_S(GPU_CLAMP_TO_EDGE) | GPU_TEXTURE_WRAP_T(GPU_CLAMP_TO_EDGE),
+ GPU_RGBA4);
+
+
+ GSPGPU_FlushDataCache(NULL, (u8*)ctr->menu.frame_coords,
+ 6 * sizeof(ctr_vertex_t));
+ ctrGuSetAttributeBuffers(2,
+ VIRT_TO_PHYS(ctr->menu.frame_coords),
+ CTRGU_ATTRIBFMT(GPU_SHORT, 3) << 0 |
+ CTRGU_ATTRIBFMT(GPU_SHORT, 2) << 4,
+ sizeof(ctr_vertex_t));
+
+ ctrGuSetVertexShaderFloatUniform(1, ctr->menu.texture_scale, 1);
+
+ GPU_DrawArray(GPU_TRIANGLES, 6);
+
+
+ }
+
+ GPU_FinishDrawing();
+
- renderFrame(ctr);
GPUCMD_Finalize();
-
-// for (i = 0; i < 16; i++)
-// printf(PRINTFPOS_STR("%i", "%i")"%f", i >> 2, 10 * (i & 0x3), proj_m[i]);
-
-// printf(PRINTFPOS(20, 10)"frames: %i", frames++);
-
- //draw the frame
GPUCMD_FlushAndRun(NULL);
- gspWaitForP3D();
+ gspWaitForEvent(GSPEVENT_P3D, false);
- //clear the screen
- GX_SetDisplayTransfer(NULL, (u32*)gpuOut, 0x019001E0,
- (u32*)gfxGetFramebuffer(GFX_TOP, GFX_LEFT, NULL, NULL), 0x019001E0, 0x01001000);
- gspWaitForPPF();
+ ctrGuDisplayTransfer(CTR_GPU_FRAMEBUFFER, 240,400, CTRGU_RGBA8,
+ gfxGetFramebuffer(GFX_TOP, GFX_LEFT, NULL, NULL), 240,400,CTRGU_RGB8, CTRGU_MULTISAMPLE_NONE);
- //clear the screen
- GX_SetMemoryFill(NULL, (u32*)gpuOut, backgroundColor, (u32*)&gpuOut[0x2EE00],
- 0x201, (u32*)gpuDOut, 0x00000000, (u32*)&gpuDOut[0x2EE00], 0x201);
- gspWaitForPSC0();
+ gspWaitForEvent(GSPEVENT_PPF, false);
+
+ GX_SetMemoryFill(NULL, (u32*)CTR_GPU_FRAMEBUFFER, 0x00000000,
+ (u32*)(CTR_GPU_FRAMEBUFFER + CTR_TOP_FRAMEBUFFER_WIDTH * CTR_TOP_FRAMEBUFFER_HEIGHT * sizeof(uint32_t)),
+ 0x201, (u32*)CTR_GPU_DEPTHBUFFER, 0x00000000,
+ (u32*)(CTR_GPU_DEPTHBUFFER + CTR_TOP_FRAMEBUFFER_WIDTH * CTR_TOP_FRAMEBUFFER_HEIGHT * sizeof(uint32_t)),
+ 0x201);
+
+ gspWaitForEvent(GSPEVENT_PSC0, false);
gfxSwapBuffersGpu();
-// gspWaitForEvent(GSPEVENT_VBlank0, true);
-
-
- // gfxFlushBuffers();
- // gfxSwapBuffers();
+// if (ctr->vsync)
+// gspWaitForEvent(GSPEVENT_VBlank0, true);
return true;
}
@@ -401,37 +430,43 @@ static void ctr_free(void* data)
if (!ctr)
return;
- printf("%s@%s:%d.\n",__FUNCTION__, __FILE__, __LINE__);fflush(stdout);
- shaderProgramFree(&shader);
- DVLB_Free(dvlb);
- linearFree(gpuCmd);
- linearFree(gpuCmdRight);
- linearFree(texData);
- linearFree(texData2);
- linearFree(vbo_buffer);
- free(texture_bin);
-// gfxExit();
-
- free(ctr);
+ shaderProgramFree(&ctr->shader);
+ DVLB_Free(ctr->dvlb);
+ linearFree(ctr->display_list);
+ linearFree(ctr->texture_linear);
+ linearFree(ctr->texture_swizzled);
+ linearFree(ctr->frame_coords);
+ linearFree(ctr->menu.texture_linear);
+ linearFree(ctr->menu.texture_swizzled);
+ linearFree(ctr->menu.frame_coords);
+ linearFree(ctr);
+ // gfxExit();
}
static void ctr_set_texture_frame(void* data, const void* frame, bool rgb32,
unsigned width, unsigned height, float alpha)
{
- ctr_video_t* ctr = (ctr_video_t*)data;
-
int i;
- uint8_t* dst = (uint8_t*)texData2;
- const uint8_t* src = frame;
+ ctr_video_t* ctr = (ctr_video_t*)data;
+ uint16_t* dst = (uint16_t*)ctr->menu.texture_linear;
+ const uint16_t* src = frame;
+ int line_width = width;
+
+ (void)rgb32;
+ (void)alpha;
+
+ if (line_width > ctr->menu.texture_width)
+ line_width = ctr->menu.texture_width;
+
+ if (height > (unsigned)ctr->menu.texture_height)
+ height = (unsigned)ctr->menu.texture_height;
+
for (i = 0; i < height; i++)
{
- memcpy(dst, src, width*2);
- dst += tex_w*2;
- src += width*2;
+ memcpy(dst, src, line_width * sizeof(uint16_t));
+ dst += ctr->menu.texture_width;
+ src += width;
}
-
-
-
}
static void ctr_set_texture_enable(void* data, bool state, bool full_screen)
diff --git a/gfx/drivers/ctr_gu.h b/gfx/drivers/ctr_gu.h
new file mode 100644
index 0000000000..2a7e5f85c5
--- /dev/null
+++ b/gfx/drivers/ctr_gu.h
@@ -0,0 +1,164 @@
+#ifndef CTR_GU_H
+#define CTR_GU_H
+
+#include <3ds.h>
+#include
+
+#define VIRT_TO_PHYS(vaddr) \
+ (((u32)(vaddr)) >= 0x14000000 && ((u32)(vaddr)) < 0x1c000000)?(void*)((u32)(vaddr) + 0x0c000000):\
+ (((u32)(vaddr)) >= 0x1F000000 && ((u32)(vaddr)) < 0x1F600000)?(void*)((u32)(vaddr) - 0x07000000):\
+ (((u32)(vaddr)) >= 0x1FF00000 && ((u32)(vaddr)) < 0x1FF80000)?(void*)(vaddr):\
+ (((u32)(vaddr)) >= 0x30000000 && ((u32)(vaddr)) < 0x40000000)?(void*)((u32)(vaddr) - 0x10000000):(void*)0
+
+#define CTRGU_SIZE(W,H) (((u32)(W)&0xFFFF)|((u32)(H)<<16))
+
+/* DMA flags */
+#define CTRGU_DMA_VFLIP (1 << 0)
+#define CTRGU_DMA_L_TO_T (1 << 1)
+#define CTRGU_DMA_T_TO_L (0 << 1)
+#define CTRGU_DMA_TRUNCATE (1 << 2)
+#define CTRGU_DMA_CONVERT_NONE (1 << 3)
+
+#define CTRGU_RGBA8 (0)
+#define CTRGU_RGB8 (1)
+#define CTRGU_RGB565 (2)
+#define CTRGU_RGBA5551 (3)
+#define CTRGU_RGBA4444 (4)
+
+#define CTRGU_MULTISAMPLE_NONE (0 << 24)
+#define CTRGU_MULTISAMPLE_2x1 (1 << 24)
+#define CTRGU_MULTISAMPLE_2x2 (2 << 24)
+
+typedef struct
+{
+ uint32_t buffer[8];
+}gtrgu_gx_command_t;
+
+
+__attribute__((always_inline))
+static inline int ctrGuWriteDisplayTransferCommand(gtrgu_gx_command_t* command,
+ void* src, int src_w, int src_h,
+ void* dst, int dst_w, int dst_h,
+ uint32_t flags)
+{
+ command->buffer[0] = 0x03; //CommandID
+ command->buffer[1] = (uint32_t)src;
+ command->buffer[2] = (uint32_t)dst;
+ command->buffer[3] = CTRGU_SIZE(src_w, src_h);
+ command->buffer[4] = CTRGU_SIZE(dst_w, dst_h);
+ command->buffer[5] = flags;
+ command->buffer[6] = 0x0;
+ command->buffer[7] = 0x0;
+
+ return 0;
+}
+
+__attribute__((always_inline))
+static inline int ctrGuSubmitGxCommand(u32* gxbuf, gtrgu_gx_command_t* command)
+{
+ if(!gxbuf) gxbuf = gxCmdBuf;
+
+ return GSPGPU_SubmitGxCommand(gxbuf, (u32*)command, NULL);
+}
+
+__attribute__((always_inline))
+static inline void ctrGuSetTexture(GPU_TEXUNIT unit, u32* data, u16 width, u16 height, u32 param, GPU_TEXCOLOR colorType)
+{
+ switch (unit)
+ {
+ case GPU_TEXUNIT0:
+ GPUCMD_AddWrite(GPUREG_TEXUNIT0_TYPE, colorType);
+ GPUCMD_AddWrite(GPUREG_TEXUNIT0_LOC, ((u32)data)>>3);
+ GPUCMD_AddWrite(GPUREG_TEXUNIT0_DIM, (height)|(width<<16));
+ GPUCMD_AddWrite(GPUREG_TEXUNIT0_PARAM, param);
+ break;
+
+ case GPU_TEXUNIT1:
+ GPUCMD_AddWrite(GPUREG_TEXUNIT1_TYPE, colorType);
+ GPUCMD_AddWrite(GPUREG_TEXUNIT1_LOC, ((u32)data)>>3);
+ GPUCMD_AddWrite(GPUREG_TEXUNIT1_DIM, (height)|(width<<16));
+ GPUCMD_AddWrite(GPUREG_TEXUNIT1_PARAM, param);
+ break;
+
+ case GPU_TEXUNIT2:
+ GPUCMD_AddWrite(GPUREG_TEXUNIT2_TYPE, colorType);
+ GPUCMD_AddWrite(GPUREG_TEXUNIT2_LOC, ((u32)data)>>3);
+ GPUCMD_AddWrite(GPUREG_TEXUNIT2_DIM, (height)|(width<<16));
+ GPUCMD_AddWrite(GPUREG_TEXUNIT2_PARAM, param);
+ break;
+ }
+}
+
+
+__attribute__((always_inline))
+static inline Result ctrGuCopyImage
+ (void* src, int src_w, int src_h, int src_fmt, bool src_is_tiled,
+ void* dst, int dst_w, int dst_fmt, bool dst_is_tiled)
+{
+ u32 gxCommand[0x8];
+ gxCommand[0]=0x03; //CommandID
+ gxCommand[1]=(u32)src;
+ gxCommand[2]=(u32)dst;
+ gxCommand[3]=dst_w&0xFF8;
+ gxCommand[4]=CTRGU_SIZE(src_w, src_h);
+ gxCommand[5]=(src_fmt << 8)|(dst_fmt << 12)
+ | ((src_is_tiled == dst_is_tiled)? CTRGU_DMA_CONVERT_NONE
+ : src_is_tiled? CTRGU_DMA_T_TO_L
+ : CTRGU_DMA_L_TO_T)
+ | ((dst_w > src_w) ? CTRGU_DMA_TRUNCATE : 0);
+ gxCommand[6]=gxCommand[7]=0x0;
+
+ return GSPGPU_SubmitGxCommand(gxCmdBuf, gxCommand, NULL);
+
+}
+
+__attribute__((always_inline))
+static inline Result ctrGuDisplayTransfer
+ (void* src, int src_w, int src_h, int src_fmt,
+ void* dst, int dst_w, int dst_h, int dst_fmt, int multisample_lvl)
+{
+ u32 gxCommand[0x8];
+ gxCommand[0]=0x03; //CommandID
+ gxCommand[1]=(u32)src;
+ gxCommand[2]=(u32)dst;
+ gxCommand[3]=CTRGU_SIZE(dst_w, dst_h);
+ gxCommand[4]=CTRGU_SIZE(src_w, src_h);
+ gxCommand[5]=(src_fmt << 8) | (dst_fmt << 12) | multisample_lvl;
+ gxCommand[6]=gxCommand[7]=0x0;
+
+ return GSPGPU_SubmitGxCommand(gxCmdBuf, gxCommand, NULL);
+
+}
+
+__attribute__((always_inline))
+static inline void ctrGuSetVertexShaderFloatUniform(int id, float* data, int count)
+{
+ GPUCMD_AddWrite(GPUREG_VSH_FLOATUNIFORM_CONFIG, 0x80000000|(u32)id);
+ GPUCMD_AddWrites(GPUREG_VSH_FLOATUNIFORM_DATA, (u32*)data, (u32)count * 4);
+}
+
+
+#define CTRGU_ATTRIBFMT(f, n) ((((n)-1)<<2)|((f)&3))
+
+void ctrGuSetAttributeBuffers(u32 total_attributes, void* base_address, u64 attribute_formats, u32 buffer_size)
+{
+ u32 param[0x28];
+
+ memset(param, 0x00, sizeof(param));
+
+ param[0x0]=((u32)base_address)>>3;
+ param[0x1]=attribute_formats & 0xFFFFFFFF;
+ param[0x2]=((total_attributes-1)<<28)|0xFFF0000|((attribute_formats>>32)&0xFFFF);
+ param[0x4]=0x76543210;
+ param[0x5]=(total_attributes<<28)|((buffer_size&0xFFF)<<16)|0xBA98;
+
+ GPUCMD_AddIncrementalWrites(GPUREG_ATTRIBBUFFERS_LOC, param, 0x00000027);
+ GPUCMD_AddMaskedWrite(GPUREG_VSH_INPUTBUFFER_CONFIG, 0xB, 0xA0000000|(total_attributes-1));
+ GPUCMD_AddWrite(GPUREG_0242, (total_attributes-1));
+ GPUCMD_AddIncrementalWrites(GPUREG_VSH_ATTRIBUTES_PERMUTATION_LOW, ((u32[]){0x76543210, 0xBA98}), 2);
+}
+
+
+
+
+#endif // CTR_GU_H
diff --git a/griffin/griffin.c b/griffin/griffin.c
index e141711eca..9a4a090203 100644
--- a/griffin/griffin.c
+++ b/griffin/griffin.c
@@ -338,7 +338,7 @@ INPUT
#include "../input/drivers/dinput.c"
#endif
-#ifdef HAVE_WINXINPUT
+#ifdef HAVE_XINPUT
#include "../input/drivers_joypad/xinput_joypad.c"
#endif
diff --git a/input/autoconf/builtin_win.c b/input/autoconf/builtin_win.c
index 4c95055549..a9252d6201 100644
--- a/input/autoconf/builtin_win.c
+++ b/input/autoconf/builtin_win.c
@@ -45,10 +45,10 @@ DECL_AXIS(r_y_minus, +3)
const char* const input_builtin_autoconfs[] =
{
- DECL_AUTOCONF_DEVICE("XInput Controller (User 1)", "winxinput", XINPUT_DEFAULT_BINDS),
- DECL_AUTOCONF_DEVICE("XInput Controller (User 2)", "winxinput", XINPUT_DEFAULT_BINDS),
- DECL_AUTOCONF_DEVICE("XInput Controller (User 3)", "winxinput", XINPUT_DEFAULT_BINDS),
- DECL_AUTOCONF_DEVICE("XInput Controller (User 4)", "winxinput", XINPUT_DEFAULT_BINDS),
+ DECL_AUTOCONF_DEVICE("XInput Controller (User 1)", "xinput", XINPUT_DEFAULT_BINDS),
+ DECL_AUTOCONF_DEVICE("XInput Controller (User 2)", "xinput", XINPUT_DEFAULT_BINDS),
+ DECL_AUTOCONF_DEVICE("XInput Controller (User 3)", "xinput", XINPUT_DEFAULT_BINDS),
+ DECL_AUTOCONF_DEVICE("XInput Controller (User 4)", "xinput", XINPUT_DEFAULT_BINDS),
NULL
};
diff --git a/input/drivers/ctr_input.c b/input/drivers/ctr_input.c
index 11e6756914..ca60d7bf57 100644
--- a/input/drivers/ctr_input.c
+++ b/input/drivers/ctr_input.c
@@ -17,7 +17,7 @@
#include "../../general.h"
#include "../../driver.h"
-
+#include "retroarch.h"
static uint32_t kDown;
static int16_t pad_state;
@@ -53,13 +53,16 @@ static void ctr_input_poll(void *data)
*lifecycle_state &= ~((1ULL << RARCH_MENU_TOGGLE));
- if (
- (pad_state & (1ULL << RETRO_DEVICE_ID_JOYPAD_L))
- && (pad_state & (1ULL << RETRO_DEVICE_ID_JOYPAD_R))
- && (pad_state & (1ULL << RETRO_DEVICE_ID_JOYPAD_SELECT))
- && (pad_state & (1ULL << RETRO_DEVICE_ID_JOYPAD_START))
- )
- *lifecycle_state |= (1ULL << RARCH_MENU_TOGGLE);
+ if(kDown & KEY_TOUCH)
+ *lifecycle_state |= (1ULL << RARCH_MENU_TOGGLE);
+
+ /* panic button */
+ if((kDown & KEY_START) &&
+ (kDown & KEY_SELECT) &&
+ (kDown & KEY_L) &&
+ (kDown & KEY_R))
+ rarch_main_command(RARCH_CMD_QUIT);
+
}
static int16_t ctr_input_state(void *data,
diff --git a/input/drivers/dinput.c b/input/drivers/dinput.c
index 2f7067bc2f..ccfeb89c53 100644
--- a/input/drivers/dinput.c
+++ b/input/drivers/dinput.c
@@ -838,7 +838,7 @@ static BOOL CALLBACK enum_joypad_cb(const DIDEVICEINSTANCE *inst, void *p)
g_pads[g_joypad_cnt].joy_name = strdup(inst->tszProductName);
-#ifdef HAVE_WINXINPUT
+#ifdef HAVE_XINPUT
#if 0
is_xinput_pad = g_xinput_block_pads
&& name_is_xinput_pad(inst->tszProductName);
@@ -861,7 +861,7 @@ static BOOL CALLBACK enum_joypad_cb(const DIDEVICEINSTANCE *inst, void *p)
IDirectInputDevice8_EnumObjects(*pad, enum_axes_cb,
*pad, DIDFT_ABSAXIS);
-#ifdef HAVE_WINXINPUT
+#ifdef HAVE_XINPUT
if (!is_xinput_pad)
#endif
{
diff --git a/input/input_joypad_driver.c b/input/input_joypad_driver.c
index e308ce6293..314fee7b31 100644
--- a/input/input_joypad_driver.c
+++ b/input/input_joypad_driver.c
@@ -26,7 +26,7 @@ static rarch_joypad_driver_t *joypad_drivers[] = {
#ifdef __CELLOS_LV2__
&ps3_joypad,
#endif
-#ifdef HAVE_WINXINPUT
+#ifdef HAVE_XINPUT
&xinput_joypad,
#endif
#ifdef GEKKO
diff --git a/msvc/msvc-2010/RetroArch-msvc2010.vcxproj b/msvc/msvc-2010/RetroArch-msvc2010.vcxproj
index 72546860e8..50dd076579 100644
--- a/msvc/msvc-2010/RetroArch-msvc2010.vcxproj
+++ b/msvc/msvc-2010/RetroArch-msvc2010.vcxproj
@@ -100,7 +100,7 @@
Level3
Disabled
- WIN32;RARCH_INTERNAL;HAVE_D3D;HAVE_D3D9;HAVE_CG;HAVE_GLSL;HAVE_GRIFFIN;HAVE_FBO;HAVE_ZLIB;HAVE_XMB;WANT_ZLIB;HAVE_GRIFFIN;HAVE_FBO;HAVE_ZLIB;HAVE_XMB;WANT_ZLIB;_DEBUG;_WINDOWS;%(PreprocessorDefinitions);HAVE_BUILTIN_AUTOCONFIG;HAVE_DINPUT;HAVE_WINXINPUT;HAVE_XAUDIO;HAVE_DSOUND;HAVE_OPENGL;HAVE_DYLIB;HAVE_NETPLAY;HAVE_NETWORKING;HAVE_NETWORK_CMD;HAVE_COMMAND;HAVE_STDIN_CMD;HAVE_THREADS;HAVE_DYNAMIC;_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;__SSE__;__i686__;HAVE_OVERLAY;HAVE_RGUI;HAVE_GL_SYNC;HAVE_MENU;HAVE_7ZIP;HAVE_GLUI;HAVE_LIBRETRODB
+ WIN32;RARCH_INTERNAL;HAVE_D3D;HAVE_D3D9;HAVE_CG;HAVE_GLSL;HAVE_GRIFFIN;HAVE_FBO;HAVE_ZLIB;HAVE_XMB;WANT_ZLIB;HAVE_GRIFFIN;HAVE_FBO;HAVE_ZLIB;HAVE_XMB;WANT_ZLIB;_DEBUG;_WINDOWS;%(PreprocessorDefinitions);HAVE_BUILTIN_AUTOCONFIG;HAVE_DINPUT;HAVE_XINPUT;HAVE_XAUDIO;HAVE_DSOUND;HAVE_OPENGL;HAVE_DYLIB;HAVE_NETPLAY;HAVE_NETWORKING;HAVE_NETWORK_CMD;HAVE_COMMAND;HAVE_STDIN_CMD;HAVE_THREADS;HAVE_DYNAMIC;_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;__SSE__;__i686__;HAVE_OVERLAY;HAVE_RGUI;HAVE_GL_SYNC;HAVE_MENU;HAVE_7ZIP;HAVE_GLUI;HAVE_LIBRETRODB
$(MSBuildProjectDirectory);$(MSBuildProjectDirectory)\..\..\;$(CG_INC_PATH);$(MSBuildProjectDirectory)\..\..\deps\zlib;$(MSBuildProjectDirectory)\..\..\libretro-common\include;$(MSBuildProjectDirectory)\..\..\gfx\inc;%(AdditionalIncludeDirectories)
MultiThreadedDebug
CompileAsCpp
@@ -120,7 +120,7 @@
Level3
Disabled
- WIN32;RARCH_INTERNAL;HAVE_D3D;HAVE_D3D9;HAVE_CG;HAVE_GLSL;HAVE_GRIFFIN;HAVE_FBO;HAVE_ZLIB;HAVE_XMB;WANT_ZLIB;HAVE_FBO;HAVE_ZLIB;WANT_ZLIB;_DEBUG;_WINDOWS;%(PreprocessorDefinitions);HAVE_BUILTIN_AUTOCONFIG;HAVE_DINPUT;HAVE_WINXINPUT;HAVE_XAUDIO;HAVE_DSOUND;HAVE_OPENGL;HAVE_DYLIB;HAVE_NETPLAY;HAVE_NETWORKING;HAVE_NETWORK_CMD;HAVE_COMMAND;HAVE_STDIN_CMD;HAVE_THREADS;HAVE_DYNAMIC;_CRT_SECURE_NO_WARNINGS;__SSE__;__SSE2__;__x86_64__;HAVE_OVERLAY;HAVE_RGUI;HAVE_GL_SYNC;HAVE_MENU;HAVE_7ZIP;HAVE_GLUI;HAVE_LIBRETRODB
+ WIN32;RARCH_INTERNAL;HAVE_D3D;HAVE_D3D9;HAVE_CG;HAVE_GLSL;HAVE_GRIFFIN;HAVE_FBO;HAVE_ZLIB;HAVE_XMB;WANT_ZLIB;HAVE_FBO;HAVE_ZLIB;WANT_ZLIB;_DEBUG;_WINDOWS;%(PreprocessorDefinitions);HAVE_BUILTIN_AUTOCONFIG;HAVE_DINPUT;HAVE_XINPUT;HAVE_XAUDIO;HAVE_DSOUND;HAVE_OPENGL;HAVE_DYLIB;HAVE_NETPLAY;HAVE_NETWORKING;HAVE_NETWORK_CMD;HAVE_COMMAND;HAVE_STDIN_CMD;HAVE_THREADS;HAVE_DYNAMIC;_CRT_SECURE_NO_WARNINGS;__SSE__;__SSE2__;__x86_64__;HAVE_OVERLAY;HAVE_RGUI;HAVE_GL_SYNC;HAVE_MENU;HAVE_7ZIP;HAVE_GLUI;HAVE_LIBRETRODB
$(MSBuildProjectDirectory);$(MSBuildProjectDirectory)\..\..\;$(CG_INC_PATH);$(MSBuildProjectDirectory)\..\..\deps\zlib;$(MSBuildProjectDirectory)\..\..\libretro-common\include;$(MSBuildProjectDirectory)\..\..\gfx\inc;%(AdditionalIncludeDirectories)
MultiThreadedDebug
CompileAsCpp
@@ -142,7 +142,7 @@
MaxSpeed
true
true
- WIN32;RARCH_INTERNAL;HAVE_D3D;HAVE_D3D9;HAVE_CG;HAVE_GLSL;HAVE_GRIFFIN;HAVE_FBO;HAVE_ZLIB;HAVE_XMB;WANT_ZLIB;HAVE_GRIFFIN;HAVE_FBO;HAVE_ZLIB;HAVE_XMB;WANT_ZLIB;NDEBUG;_WINDOWS;%(PreprocessorDefinitions);HAVE_BUILTIN_AUTOCONFIG;HAVE_DINPUT;HAVE_WINXINPUT;HAVE_XAUDIO;HAVE_DSOUND;HAVE_OPENGL;HAVE_DYLIB;HAVE_NETPLAY;HAVE_NETWORKING;HAVE_NETWORK_CMD;HAVE_COMMAND;HAVE_STDIN_CMD;HAVE_THREADS;HAVE_DYNAMIC;_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;__SSE__;__i686__;HAVE_OVERLAY;HAVE_MENU;HAVE_RGUI;HAVE_GL_SYNC;HAVE_7ZIP;HAVE_GLUI;HAVE_LIBRETRODB
+ WIN32;RARCH_INTERNAL;HAVE_D3D;HAVE_D3D9;HAVE_CG;HAVE_GLSL;HAVE_GRIFFIN;HAVE_FBO;HAVE_ZLIB;HAVE_XMB;WANT_ZLIB;HAVE_GRIFFIN;HAVE_FBO;HAVE_ZLIB;HAVE_XMB;WANT_ZLIB;NDEBUG;_WINDOWS;%(PreprocessorDefinitions);HAVE_BUILTIN_AUTOCONFIG;HAVE_DINPUT;HAVE_XINPUT;HAVE_XAUDIO;HAVE_DSOUND;HAVE_OPENGL;HAVE_DYLIB;HAVE_NETPLAY;HAVE_NETWORKING;HAVE_NETWORK_CMD;HAVE_COMMAND;HAVE_STDIN_CMD;HAVE_THREADS;HAVE_DYNAMIC;_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;__SSE__;__i686__;HAVE_OVERLAY;HAVE_MENU;HAVE_RGUI;HAVE_GL_SYNC;HAVE_7ZIP;HAVE_GLUI;HAVE_LIBRETRODB
$(MSBuildProjectDirectory);$(MSBuildProjectDirectory)\..\..\;$(CG_INC_PATH);$(MSBuildProjectDirectory)\..\..\deps\zlib;$(MSBuildProjectDirectory)\..\..\libretro-common\include;$(MSBuildProjectDirectory)\..\..\gfx\inc;%(AdditionalIncludeDirectories)
MultiThreaded
CompileAsCpp
@@ -167,7 +167,7 @@
MaxSpeed
true
true
- WIN32;RARCH_INTERNAL;HAVE_D3D;HAVE_D3D9;HAVE_CG;HAVE_GLSL;HAVE_GRIFFIN;HAVE_FBO;HAVE_ZLIB;HAVE_XMB;WANT_ZLIB;HAVE_FBO;NDEBUG;_WINDOWS;%(PreprocessorDefinitions);HAVE_BUILTIN_AUTOCONFIG;HAVE_DINPUT;HAVE_WINXINPUT;HAVE_XAUDIO;HAVE_DSOUND;HAVE_OPENGL;HAVE_DYLIB;HAVE_NETPLAY;HAVE_NETWORKING;HAVE_NETWORK_CMD;HAVE_COMMAND;HAVE_STDIN_CMD;HAVE_THREADS;HAVE_DYNAMIC;HAVE_ZLIB;WANT_ZLIB;_CRT_SECURE_NO_WARNINGS;__SSE__;__SSE2__;__x86_64__;HAVE_OVERLAY;HAVE_RGUI;HAVE_GL_SYNC;HAVE_MENU;HAVE_7ZIP;HAVE_GLUI;HAVE_LIBRETRODB
+ WIN32;RARCH_INTERNAL;HAVE_D3D;HAVE_D3D9;HAVE_CG;HAVE_GLSL;HAVE_GRIFFIN;HAVE_FBO;HAVE_ZLIB;HAVE_XMB;WANT_ZLIB;HAVE_FBO;NDEBUG;_WINDOWS;%(PreprocessorDefinitions);HAVE_BUILTIN_AUTOCONFIG;HAVE_DINPUT;HAVE_XINPUT;HAVE_XAUDIO;HAVE_DSOUND;HAVE_OPENGL;HAVE_DYLIB;HAVE_NETPLAY;HAVE_NETWORKING;HAVE_NETWORK_CMD;HAVE_COMMAND;HAVE_STDIN_CMD;HAVE_THREADS;HAVE_DYNAMIC;HAVE_ZLIB;WANT_ZLIB;_CRT_SECURE_NO_WARNINGS;__SSE__;__SSE2__;__x86_64__;HAVE_OVERLAY;HAVE_RGUI;HAVE_GL_SYNC;HAVE_MENU;HAVE_7ZIP;HAVE_GLUI;HAVE_LIBRETRODB
$(MSBuildProjectDirectory);$(MSBuildProjectDirectory)\..\..\;$(CG_INC_PATH);$(MSBuildProjectDirectory)\..\..\deps\zlib;$(MSBuildProjectDirectory)\..\..\libretro-common\include;$(MSBuildProjectDirectory)\..\..\gfx\inc;%(AdditionalIncludeDirectories)
MultiThreaded
CompileAsCpp
diff --git a/qb/config.libs.sh b/qb/config.libs.sh
index af6fff3b28..d53076880f 100644
--- a/qb/config.libs.sh
+++ b/qb/config.libs.sh
@@ -219,7 +219,7 @@ if [ "$OS" = 'Win32' ]; then
check_lib DSOUND -ldsound
if [ "$HAVE_DINPUT" != 'no' ]; then
- HAVE_WINXINPUT=yes
+ HAVE_XINPUT=yes
fi
HAVE_XAUDIO=yes
diff --git a/runloop.c b/runloop.c
index e8b6a25401..9b3a671da0 100644
--- a/runloop.c
+++ b/runloop.c
@@ -489,6 +489,7 @@ static int do_pause_state_checks(
bool rewind_pressed)
{
runloop_t *runloop = rarch_main_get_ptr();
+ bool check_is_oneshot = frameadvance_pressed || rewind_pressed;
if (!runloop || !runloop->is_paused)
return 0;
@@ -499,7 +500,7 @@ static int do_pause_state_checks(
rarch_render_cached_frame();
}
- if (!(frameadvance_pressed | rewind_pressed))
+ if (!check_is_oneshot)
return 1;
return 0;
@@ -1052,7 +1053,7 @@ static void rarch_main_cmd_get_state(rarch_cmd_state_t *cmd,
cmd->state_slot_decrease = BIT64_GET(trigger_input, RARCH_STATE_SLOT_MINUS);
cmd->pause_pressed = BIT64_GET(trigger_input, RARCH_PAUSE_TOGGLE);
cmd->frameadvance_pressed = BIT64_GET(trigger_input, RARCH_FRAMEADVANCE);
- cmd->rewind_pressed = BIT64_GET(trigger_input, RARCH_REWIND);
+ cmd->rewind_pressed = BIT64_GET(input, RARCH_REWIND);
cmd->netplay_flip_pressed = BIT64_GET(trigger_input, RARCH_NETPLAY_FLIP);
cmd->fullscreen_toggle = BIT64_GET(trigger_input, RARCH_FULLSCREEN_TOGGLE_KEY);
cmd->cheat_index_plus_pressed = BIT64_GET(trigger_input,
diff --git a/tools/retroarch-joyconfig-griffin.c b/tools/retroarch-joyconfig-griffin.c
index a7901e92a1..c8fa9820f7 100644
--- a/tools/retroarch-joyconfig-griffin.c
+++ b/tools/retroarch-joyconfig-griffin.c
@@ -25,7 +25,7 @@
#include "../input/drivers/dinput.c"
#endif
-#if defined(HAVE_WINXINPUT)
+#if defined(HAVE_XINPUT)
#include "../input/drivers_joypad/xinput_joypad.c"
#endif