Merge pull request #2264 from aliaspider/master

(CTR/3DS) update
This commit is contained in:
Twinaphex 2015-10-20 17:32:47 +02:00
commit 257fed3228
5 changed files with 99 additions and 23 deletions

View File

@ -27,7 +27,7 @@ CTR_STACK_SIZE = 0x400000
else else
CTR_STACK_SIZE = 0x100000 CTR_STACK_SIZE = 0x100000
endif endif
CTR_LINEAR_HEAP_SIZE = 0xE00000 CTR_LINEAR_HEAP_SIZE = 0x600000
include ctr/Makefile.cores include ctr/Makefile.cores
@ -178,9 +178,7 @@ else
OBJS += menu/menu_entry.o OBJS += menu/menu_entry.o
OBJS += menu/menu_entries.o OBJS += menu/menu_entries.o
OBJS += menu/menu_setting.o OBJS += menu/menu_setting.o
OBJS += menu/menu_list.o
OBJS += menu/menu_cbs.o OBJS += menu/menu_cbs.o
OBJS += menu/menu_video.o
OBJS += menu/cbs/menu_cbs_ok.o OBJS += menu/cbs/menu_cbs_ok.o
OBJS += menu/cbs/menu_cbs_cancel.o OBJS += menu/cbs/menu_cbs_cancel.o
OBJS += menu/cbs/menu_cbs_select.o OBJS += menu/cbs/menu_cbs_select.o

View File

@ -11,6 +11,7 @@ ifeq ($(LIBRETRO), gambatte)
#APP_AUDIO = ctr/silent.wav #APP_AUDIO = ctr/silent.wav
#APP_SYSTEM_MODE = 64MB #APP_SYSTEM_MODE = 64MB
#APP_SYSTEM_MODE_EXT = Legacy #APP_SYSTEM_MODE_EXT = Legacy
#CTR_LINEAR_HEAP_SIZE = 0x600000
else ifeq ($(LIBRETRO), gpsp) else ifeq ($(LIBRETRO), gpsp)
APP_TITLE = gpSP Libretro APP_TITLE = gpSP Libretro
@ -23,6 +24,7 @@ else ifeq ($(LIBRETRO), gpsp)
#APP_AUDIO = ctr/silent.wav #APP_AUDIO = ctr/silent.wav
#APP_SYSTEM_MODE = 64MB #APP_SYSTEM_MODE = 64MB
#APP_SYSTEM_MODE_EXT = Legacy #APP_SYSTEM_MODE_EXT = Legacy
#CTR_LINEAR_HEAP_SIZE = 0x600000
else ifeq ($(LIBRETRO), fceumm) else ifeq ($(LIBRETRO), fceumm)
APP_TITLE = FCeumm Libretro APP_TITLE = FCeumm Libretro
@ -35,6 +37,7 @@ else ifeq ($(LIBRETRO), fceumm)
#APP_AUDIO = ctr/silent.wav #APP_AUDIO = ctr/silent.wav
#APP_SYSTEM_MODE = 64MB #APP_SYSTEM_MODE = 64MB
#APP_SYSTEM_MODE_EXT = Legacy #APP_SYSTEM_MODE_EXT = Legacy
#CTR_LINEAR_HEAP_SIZE = 0x600000
else ifeq ($(LIBRETRO), nestopia) else ifeq ($(LIBRETRO), nestopia)
APP_TITLE = Nestopia Libretro APP_TITLE = Nestopia Libretro
@ -47,6 +50,7 @@ else ifeq ($(LIBRETRO), nestopia)
#APP_AUDIO = ctr/silent.wav #APP_AUDIO = ctr/silent.wav
#APP_SYSTEM_MODE = 64MB #APP_SYSTEM_MODE = 64MB
#APP_SYSTEM_MODE_EXT = Legacy #APP_SYSTEM_MODE_EXT = Legacy
CTR_LINEAR_HEAP_SIZE = 0xE00000
else ifeq ($(LIBRETRO), nxengine) else ifeq ($(LIBRETRO), nxengine)
APP_TITLE = NXengine Libretro APP_TITLE = NXengine Libretro
@ -59,6 +63,7 @@ else ifeq ($(LIBRETRO), nxengine)
#APP_AUDIO = ctr/silent.wav #APP_AUDIO = ctr/silent.wav
#APP_SYSTEM_MODE = 64MB #APP_SYSTEM_MODE = 64MB
#APP_SYSTEM_MODE_EXT = Legacy #APP_SYSTEM_MODE_EXT = Legacy
#CTR_LINEAR_HEAP_SIZE = 0x600000
else ifeq ($(LIBRETRO), genesis_plus_gx) else ifeq ($(LIBRETRO), genesis_plus_gx)
APP_TITLE = Genesis Plus GX Libretro APP_TITLE = Genesis Plus GX Libretro
@ -71,6 +76,7 @@ else ifeq ($(LIBRETRO), genesis_plus_gx)
#APP_AUDIO = ctr/silent.wav #APP_AUDIO = ctr/silent.wav
#APP_SYSTEM_MODE = 64MB #APP_SYSTEM_MODE = 64MB
#APP_SYSTEM_MODE_EXT = Legacy #APP_SYSTEM_MODE_EXT = Legacy
CTR_LINEAR_HEAP_SIZE = 0xE00000
else ifeq ($(LIBRETRO), catsfc) else ifeq ($(LIBRETRO), catsfc)
APP_TITLE = CATSFC Libretro APP_TITLE = CATSFC Libretro
@ -83,6 +89,7 @@ else ifeq ($(LIBRETRO), catsfc)
#APP_AUDIO = ctr/silent.wav #APP_AUDIO = ctr/silent.wav
#APP_SYSTEM_MODE = 64MB #APP_SYSTEM_MODE = 64MB
#APP_SYSTEM_MODE_EXT = Legacy #APP_SYSTEM_MODE_EXT = Legacy
#CTR_LINEAR_HEAP_SIZE = 0x600000
else ifeq ($(LIBRETRO), mednafen_wswan) else ifeq ($(LIBRETRO), mednafen_wswan)
APP_TITLE = Mednafen wswan Libretro APP_TITLE = Mednafen wswan Libretro
@ -95,6 +102,7 @@ else ifeq ($(LIBRETRO), mednafen_wswan)
#APP_AUDIO = ctr/silent.wav #APP_AUDIO = ctr/silent.wav
#APP_SYSTEM_MODE = 64MB #APP_SYSTEM_MODE = 64MB
#APP_SYSTEM_MODE_EXT = Legacy #APP_SYSTEM_MODE_EXT = Legacy
CTR_LINEAR_HEAP_SIZE = 0xE00000
else ifeq ($(LIBRETRO), mednafen_vb) else ifeq ($(LIBRETRO), mednafen_vb)
APP_TITLE = Mednafen VB Libretro APP_TITLE = Mednafen VB Libretro
@ -107,6 +115,7 @@ else ifeq ($(LIBRETRO), mednafen_vb)
#APP_AUDIO = ctr/silent.wav #APP_AUDIO = ctr/silent.wav
#APP_SYSTEM_MODE = 64MB #APP_SYSTEM_MODE = 64MB
#APP_SYSTEM_MODE_EXT = Legacy #APP_SYSTEM_MODE_EXT = Legacy
CTR_LINEAR_HEAP_SIZE = 0xE00000
else ifeq ($(LIBRETRO), mednafen_ngp) else ifeq ($(LIBRETRO), mednafen_ngp)
APP_TITLE = Mednafen NGP Libretro APP_TITLE = Mednafen NGP Libretro
@ -119,6 +128,7 @@ else ifeq ($(LIBRETRO), mednafen_ngp)
#APP_AUDIO = ctr/silent.wav #APP_AUDIO = ctr/silent.wav
#APP_SYSTEM_MODE = 64MB #APP_SYSTEM_MODE = 64MB
#APP_SYSTEM_MODE_EXT = Legacy #APP_SYSTEM_MODE_EXT = Legacy
CTR_LINEAR_HEAP_SIZE = 0xE00000
else ifeq ($(LIBRETRO), 2048) else ifeq ($(LIBRETRO), 2048)
APP_TITLE = 2048 Libretro APP_TITLE = 2048 Libretro
@ -131,6 +141,7 @@ else ifeq ($(LIBRETRO), 2048)
#APP_AUDIO = ctr/silent.wav #APP_AUDIO = ctr/silent.wav
#APP_SYSTEM_MODE = 64MB #APP_SYSTEM_MODE = 64MB
#APP_SYSTEM_MODE_EXT = Legacy #APP_SYSTEM_MODE_EXT = Legacy
CTR_LINEAR_HEAP_SIZE = 0xE00000
else ifeq ($(LIBRETRO), picodrive) else ifeq ($(LIBRETRO), picodrive)
APP_TITLE = Picodrive Libretro APP_TITLE = Picodrive Libretro
@ -143,6 +154,7 @@ else ifeq ($(LIBRETRO), picodrive)
#APP_AUDIO = ctr/silent.wav #APP_AUDIO = ctr/silent.wav
#APP_SYSTEM_MODE = 64MB #APP_SYSTEM_MODE = 64MB
#APP_SYSTEM_MODE_EXT = Legacy #APP_SYSTEM_MODE_EXT = Legacy
#CTR_LINEAR_HEAP_SIZE = 0x600000
else ifeq ($(LIBRETRO), snes9x_next) else ifeq ($(LIBRETRO), snes9x_next)
APP_TITLE = Snes9x Next Libretro APP_TITLE = Snes9x Next Libretro
@ -155,6 +167,7 @@ else ifeq ($(LIBRETRO), snes9x_next)
#APP_AUDIO = ctr/silent.wav #APP_AUDIO = ctr/silent.wav
#APP_SYSTEM_MODE = 64MB #APP_SYSTEM_MODE = 64MB
#APP_SYSTEM_MODE_EXT = Legacy #APP_SYSTEM_MODE_EXT = Legacy
#CTR_LINEAR_HEAP_SIZE = 0x600000
else ifeq ($(LIBRETRO), mgba) else ifeq ($(LIBRETRO), mgba)
APP_TITLE = mGBA Libretro APP_TITLE = mGBA Libretro
@ -167,6 +180,7 @@ else ifeq ($(LIBRETRO), mgba)
#APP_AUDIO = ctr/silent.wav #APP_AUDIO = ctr/silent.wav
#APP_SYSTEM_MODE = 64MB #APP_SYSTEM_MODE = 64MB
#APP_SYSTEM_MODE_EXT = Legacy #APP_SYSTEM_MODE_EXT = Legacy
#CTR_LINEAR_HEAP_SIZE = 0x600000
else ifeq ($(LIBRETRO), quicknes) else ifeq ($(LIBRETRO), quicknes)
APP_TITLE = QuickNES Libretro APP_TITLE = QuickNES Libretro
@ -179,6 +193,7 @@ else ifeq ($(LIBRETRO), quicknes)
#APP_AUDIO = ctr/silent.wav #APP_AUDIO = ctr/silent.wav
#APP_SYSTEM_MODE = 64MB #APP_SYSTEM_MODE = 64MB
#APP_SYSTEM_MODE_EXT = Legacy #APP_SYSTEM_MODE_EXT = Legacy
#CTR_LINEAR_HEAP_SIZE = 0x600000
else ifeq ($(LIBRETRO), fb_alpha_neo) else ifeq ($(LIBRETRO), fb_alpha_neo)
APP_TITLE = Neo Geo (FB Alpha) APP_TITLE = Neo Geo (FB Alpha)
@ -191,6 +206,7 @@ else ifeq ($(LIBRETRO), fb_alpha_neo)
#APP_AUDIO = ctr/silent.wav #APP_AUDIO = ctr/silent.wav
APP_SYSTEM_MODE = 80MB APP_SYSTEM_MODE = 80MB
#APP_SYSTEM_MODE_EXT = Legacy #APP_SYSTEM_MODE_EXT = Legacy
#CTR_LINEAR_HEAP_SIZE = 0x600000
else ifeq ($(LIBRETRO), fb_alpha_cps1) else ifeq ($(LIBRETRO), fb_alpha_cps1)
APP_TITLE = Final Burn Alpha - CPS-1 APP_TITLE = Final Burn Alpha - CPS-1
@ -203,6 +219,7 @@ else ifeq ($(LIBRETRO), fb_alpha_cps1)
#APP_AUDIO = ctr/silent.wav #APP_AUDIO = ctr/silent.wav
#APP_SYSTEM_MODE = 64MB #APP_SYSTEM_MODE = 64MB
#APP_SYSTEM_MODE_EXT = Legacy #APP_SYSTEM_MODE_EXT = Legacy
#CTR_LINEAR_HEAP_SIZE = 0x600000
else ifeq ($(LIBRETRO), fb_alpha_cps2) else ifeq ($(LIBRETRO), fb_alpha_cps2)
APP_TITLE = Final Burn Alpha - CPS-2 APP_TITLE = Final Burn Alpha - CPS-2
@ -215,6 +232,7 @@ else ifeq ($(LIBRETRO), fb_alpha_cps2)
#APP_AUDIO = ctr/silent.wav #APP_AUDIO = ctr/silent.wav
APP_SYSTEM_MODE = 80MB APP_SYSTEM_MODE = 80MB
#APP_SYSTEM_MODE_EXT = Legacy #APP_SYSTEM_MODE_EXT = Legacy
#CTR_LINEAR_HEAP_SIZE = 0x600000
else ifeq ($(LIBRETRO), catsfc_plus) else ifeq ($(LIBRETRO), catsfc_plus)
APP_TITLE = CATSFC Plus Libretro APP_TITLE = CATSFC Plus Libretro
@ -227,6 +245,7 @@ else ifeq ($(LIBRETRO), catsfc_plus)
#APP_AUDIO = ctr/silent.wav #APP_AUDIO = ctr/silent.wav
#APP_SYSTEM_MODE = 64MB #APP_SYSTEM_MODE = 64MB
#APP_SYSTEM_MODE_EXT = Legacy #APP_SYSTEM_MODE_EXT = Legacy
#CTR_LINEAR_HEAP_SIZE = 0x600000
else ifeq ($(LIBRETRO), mednafen_pce_fast) else ifeq ($(LIBRETRO), mednafen_pce_fast)
APP_TITLE = Mednafen/Beetle PCE FAST APP_TITLE = Mednafen/Beetle PCE FAST
@ -239,6 +258,7 @@ else ifeq ($(LIBRETRO), mednafen_pce_fast)
#APP_AUDIO = ctr/silent.wav #APP_AUDIO = ctr/silent.wav
#APP_SYSTEM_MODE = 64MB #APP_SYSTEM_MODE = 64MB
#APP_SYSTEM_MODE_EXT = Legacy #APP_SYSTEM_MODE_EXT = Legacy
#CTR_LINEAR_HEAP_SIZE = 0x600000
else ifeq ($(LIBRETRO), pcsx_rearmed) else ifeq ($(LIBRETRO), pcsx_rearmed)
APP_TITLE = PCSX ReARMed APP_TITLE = PCSX ReARMed
@ -251,6 +271,7 @@ else ifeq ($(LIBRETRO), pcsx_rearmed)
#APP_AUDIO = ctr/silent.wav #APP_AUDIO = ctr/silent.wav
#APP_SYSTEM_MODE = 64MB #APP_SYSTEM_MODE = 64MB
#APP_SYSTEM_MODE_EXT = Legacy #APP_SYSTEM_MODE_EXT = Legacy
CTR_LINEAR_HEAP_SIZE = 0xE00000
else ifeq ($(LIBRETRO), fmsx) else ifeq ($(LIBRETRO), fmsx)
APP_TITLE = fMSX APP_TITLE = fMSX
@ -263,5 +284,6 @@ else ifeq ($(LIBRETRO), fmsx)
#APP_AUDIO = ctr/silent.wav #APP_AUDIO = ctr/silent.wav
#APP_SYSTEM_MODE = 64MB #APP_SYSTEM_MODE = 64MB
#APP_SYSTEM_MODE_EXT = Legacy #APP_SYSTEM_MODE_EXT = Legacy
#CTR_LINEAR_HEAP_SIZE = 0x600000
endif endif

View File

@ -34,7 +34,6 @@
#include "../../file_ext.h" #include "../../file_ext.h"
#else #else
#include "../../menu/menu.h" #include "../../menu/menu.h"
#include "../../menu/menu_list.h"
#endif #endif
const char* elf_path_cst = "sdmc:/retroarch/test.3dsx"; const char* elf_path_cst = "sdmc:/retroarch/test.3dsx";
@ -50,7 +49,7 @@ extern char* fake_heap_start;
extern char* fake_heap_end; extern char* fake_heap_end;
u32 __linear_heap; u32 __linear_heap;
u32 __heapBase; u32 __heapBase;
static u32 heap_size; u32 heap_size;
extern u32 linear_heap_size; extern u32 linear_heap_size;
extern void (*__system_retAddr)(void); extern void (*__system_retAddr)(void);

View File

@ -258,16 +258,17 @@ static void* ctr_init(const video_info_t* video,
ctr->vp.full_height = CTR_TOP_FRAMEBUFFER_HEIGHT; ctr->vp.full_height = CTR_TOP_FRAMEBUFFER_HEIGHT;
ctr->display_list_size = 0x40000; ctr->display_list_size = 0x400;
ctr->display_list = linearAlloc(ctr->display_list_size * sizeof(uint32_t)); ctr->display_list = linearAlloc(ctr->display_list_size * sizeof(uint32_t));
GPU_Reset(NULL, ctr->display_list, ctr->display_list_size); GPU_Reset(NULL, ctr->display_list, ctr->display_list_size);
ctr->texture_width = 1024; ctr->rgb32 = video->rgb32;
ctr->texture_height = 512; ctr->texture_width = video->input_scale * RARCH_SCALE_BASE;
ctr->texture_height = video->input_scale * RARCH_SCALE_BASE;
ctr->texture_linear = ctr->texture_linear =
linearMemAlign(ctr->texture_width * ctr->texture_height * sizeof(uint32_t), 128); linearMemAlign(ctr->texture_width * ctr->texture_height * (ctr->rgb32? 4:2), 128);
ctr->texture_swizzled = ctr->texture_swizzled =
linearMemAlign(ctr->texture_width * ctr->texture_height * sizeof(uint32_t), 128); linearMemAlign(ctr->texture_width * ctr->texture_height * (ctr->rgb32? 4:2), 128);
ctr->frame_coords = linearAlloc(sizeof(ctr_vertex_t)); ctr->frame_coords = linearAlloc(sizeof(ctr_vertex_t));
ctr->frame_coords->x0 = 0; ctr->frame_coords->x0 = 0;
@ -281,9 +282,9 @@ static void* ctr_init(const video_info_t* video,
ctr->menu.texture_width = 512; ctr->menu.texture_width = 512;
ctr->menu.texture_height = 512; ctr->menu.texture_height = 512;
ctr->menu.texture_linear = ctr->menu.texture_linear =
linearMemAlign(ctr->texture_width * ctr->texture_height * sizeof(uint16_t), 128); linearMemAlign(ctr->menu.texture_width * ctr->menu.texture_height * sizeof(uint16_t), 128);
ctr->menu.texture_swizzled = ctr->menu.texture_swizzled =
linearMemAlign(ctr->texture_width * ctr->texture_height * sizeof(uint16_t), 128); linearMemAlign(ctr->menu.texture_width * ctr->menu.texture_height * sizeof(uint16_t), 128);
ctr->menu.frame_coords = linearAlloc(sizeof(ctr_vertex_t)); ctr->menu.frame_coords = linearAlloc(sizeof(ctr_vertex_t));
@ -365,7 +366,8 @@ static void* ctr_init(const video_info_t* video,
ctr->keep_aspect = true; ctr->keep_aspect = true;
ctr->should_resize = true; ctr->should_resize = true;
ctr->smooth = true; ctr->smooth = video->smooth;
ctr->vsync = video->vsync;
ctr->lcd_buttom_on = true; ctr->lcd_buttom_on = true;
ctr->empty_framebuffer = linearAlloc(320 * 240 * 2); ctr->empty_framebuffer = linearAlloc(320 * 240 * 2);
@ -459,6 +461,11 @@ static bool ctr_frame(void* data, const void* frame,
frames = 0; frames = 0;
} }
// extern u32 __linear_heap_size;
// extern u32 gpuCmdBufOffset;
// extern u32 heap_size;
// printf("0x%08X 0x%08X 0x%08X\r", heap_size, gpuCmdBufOffset, (__linear_heap_size - linearSpaceFree() +0x3FF) & ~0x3FF);
// printf("fps: %8.4f frames: %i (%X)\r", fps, total_frames++, (__linear_heap_size - linearSpaceFree()));
printf("fps: %8.4f frames: %i\r", fps, total_frames++); printf("fps: %8.4f frames: %i\r", fps, total_frames++);
fflush(stdout); fflush(stdout);
@ -488,37 +495,36 @@ static bool ctr_frame(void* data, const void* frame,
&& !((pitch) & 0xF)) /* 16-byte aligned */ && !((pitch) & 0xF)) /* 16-byte aligned */
{ {
/* can copy the buffer directly with the GPU */ /* can copy the buffer directly with the GPU */
ctrGuCopyImage(false, frame, pitch / 2, height, CTRGU_RGB565, false, ctrGuCopyImage(false, frame, pitch / (ctr->rgb32? 4: 2), height, ctr->rgb32 ? CTRGU_RGBA8: CTRGU_RGB565, false,
ctr->texture_swizzled, ctr->texture_width, CTRGU_RGB565, true); ctr->texture_swizzled, ctr->texture_width, ctr->rgb32 ? CTRGU_RGBA8: CTRGU_RGB565, true);
} }
else else
{ {
int i; int i;
uint16_t *dst = (uint16_t*)ctr->texture_linear; uint8_t *dst = (uint8_t*)ctr->texture_linear;
const uint8_t *src = frame; const uint8_t *src = frame;
for (i = 0; i < height; i++) for (i = 0; i < height; i++)
{ {
memcpy(dst, src, width * sizeof(uint16_t)); memcpy(dst, src, width * (ctr->rgb32? 4: 2));
dst += ctr->texture_width; dst += ctr->texture_width * (ctr->rgb32? 4: 2);
src += pitch; src += pitch;
} }
GSPGPU_FlushDataCache(NULL, ctr->texture_linear, GSPGPU_FlushDataCache(NULL, ctr->texture_linear,
ctr->texture_width * ctr->texture_height * sizeof(uint16_t)); ctr->texture_width * ctr->texture_height * (ctr->rgb32? 4: 2));
ctrGuCopyImage(false, ctr->texture_linear, ctr->texture_width, ctr->menu.texture_height, CTRGU_RGB565, false, ctrGuCopyImage(false, ctr->texture_linear, ctr->texture_width, ctr->texture_height, ctr->rgb32 ? CTRGU_RGBA8: CTRGU_RGB565, false,
ctr->texture_swizzled, ctr->texture_width, CTRGU_RGB565, true); ctr->texture_swizzled, ctr->texture_width, ctr->rgb32 ? CTRGU_RGBA8: CTRGU_RGB565, true);
} }
} }
ctrGuSetTexture(GPU_TEXUNIT0, VIRT_TO_PHYS(ctr->texture_swizzled), ctr->texture_width, ctr->texture_height, ctrGuSetTexture(GPU_TEXUNIT0, VIRT_TO_PHYS(ctr->texture_swizzled), ctr->texture_width, ctr->texture_height,
(ctr->smooth? GPU_TEXTURE_MAG_FILTER(GPU_LINEAR) | GPU_TEXTURE_MIN_FILTER(GPU_LINEAR) (ctr->smooth? GPU_TEXTURE_MAG_FILTER(GPU_LINEAR) | GPU_TEXTURE_MIN_FILTER(GPU_LINEAR)
: GPU_TEXTURE_MAG_FILTER(GPU_NEAREST) | GPU_TEXTURE_MIN_FILTER(GPU_NEAREST)) | : GPU_TEXTURE_MAG_FILTER(GPU_NEAREST) | GPU_TEXTURE_MIN_FILTER(GPU_NEAREST)) |
GPU_TEXTURE_WRAP_S(GPU_CLAMP_TO_EDGE) | GPU_TEXTURE_WRAP_T(GPU_CLAMP_TO_EDGE), GPU_TEXTURE_WRAP_S(GPU_CLAMP_TO_EDGE) | GPU_TEXTURE_WRAP_T(GPU_CLAMP_TO_EDGE),
GPU_RGB565); ctr->rgb32 ? GPU_RGBA8: GPU_RGB565);
ctr->frame_coords->u = width; ctr->frame_coords->u = width;
ctr->frame_coords->v = height; ctr->frame_coords->v = height;
@ -526,8 +532,49 @@ static bool ctr_frame(void* data, const void* frame,
ctrGuSetAttributeBuffersAddress(VIRT_TO_PHYS(ctr->frame_coords)); ctrGuSetAttributeBuffersAddress(VIRT_TO_PHYS(ctr->frame_coords));
ctrGuSetVertexShaderFloatUniform(0, (float*)&ctr->scale_vector, 1); ctrGuSetVertexShaderFloatUniform(0, (float*)&ctr->scale_vector, 1);
/* ARGB --> RGBA */
if (ctr->rgb32)
{
GPU_SetTexEnv(0,
GPU_TEVSOURCES(GPU_TEXTURE0, GPU_CONSTANT, 0),
GPU_TEVSOURCES(GPU_PRIMARY_COLOR, GPU_PRIMARY_COLOR, 0),
GPU_TEVOPERANDS(GPU_TEVOP_RGB_SRC_G, 0, 0),
GPU_TEVOPERANDS(0, 0, 0),
GPU_MODULATE, GPU_MODULATE,
0x0000FF);
GPU_SetTexEnv(1,
GPU_TEVSOURCES(GPU_TEXTURE0, GPU_CONSTANT, GPU_PREVIOUS),
GPU_TEVSOURCES(GPU_PREVIOUS, GPU_PREVIOUS, 0),
GPU_TEVOPERANDS(GPU_TEVOP_RGB_SRC_B, 0, 0),
GPU_TEVOPERANDS(0, 0, 0),
GPU_MULTIPLY_ADD, GPU_MODULATE,
0x00FF00);
GPU_SetTexEnv(2,
GPU_TEVSOURCES(GPU_TEXTURE0, GPU_CONSTANT, GPU_PREVIOUS),
GPU_TEVSOURCES(GPU_PREVIOUS, GPU_PREVIOUS, 0),
GPU_TEVOPERANDS(GPU_TEVOP_RGB_SRC_ALPHA, 0, 0),
GPU_TEVOPERANDS(0, 0, 0),
GPU_MULTIPLY_ADD, GPU_MODULATE,
0xFF0000);
}
GPU_DrawArray(GPU_UNKPRIM, 0, 1); GPU_DrawArray(GPU_UNKPRIM, 0, 1);
/* restore */
if (ctr->rgb32)
{
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);
}
if (ctr->menu_texture_enable) if (ctr->menu_texture_enable)
{ {

View File

@ -31,6 +31,14 @@
#define CTRGU_SIZE(W,H) (((u32)(W)&0xFFFF)|((u32)(H)<<16)) #define CTRGU_SIZE(W,H) (((u32)(W)&0xFFFF)|((u32)(H)<<16))
/* from ctrulib/great-refactor */
#define GPU_TEVOP_RGB_SRC_G 0x8
#define GPU_TEVOP_RGB_SRC_B 0xC
#define GPU_TEVOP_RGB_SRC_ALPHA 0x2
#define GPU_MULTIPLY_ADD 0x8
/*******************************/
/* DMA flags */ /* DMA flags */
#define CTRGU_DMA_VFLIP (1 << 0) #define CTRGU_DMA_VFLIP (1 << 0)
#define CTRGU_DMA_L_TO_T (1 << 1) #define CTRGU_DMA_L_TO_T (1 << 1)
@ -54,6 +62,8 @@
#ifndef DEBUG_HOLD #ifndef DEBUG_HOLD
void wait_for_input(void); void wait_for_input(void);
#define DEBUG_HOLD() do{printf("%s@%s:%d.\n",__FUNCTION__, __FILE__, __LINE__);fflush(stdout);wait_for_input();}while(0) #define DEBUG_HOLD() do{printf("%s@%s:%d.\n",__FUNCTION__, __FILE__, __LINE__);fflush(stdout);wait_for_input();}while(0)
#define DEBUG_VAR(X) printf( "%-20s: 0x%08X\n", #X, (u32)(X))
#define DEBUG_VAR64(X) printf( #X"\r\t\t\t\t : 0x%016llX\n", (u64)(X))
#endif #endif