diff --git a/Makefile.psl1ght b/Makefile.psl1ght index cef82284142..d062e22abf9 100644 --- a/Makefile.psl1ght +++ b/Makefile.psl1ght @@ -33,7 +33,7 @@ LIBDIRS += -L. -L$(PORTLIBS)/lib MACHDEP := -D__PSL1GHT__ -D__PS3__ -mcpu=cell CFLAGS += -Wall $(MACHDEP) $(INCLUDE) LDFLAGS := $(MACHDEP) -LIBS := -lretro_psl1ght -laudio -lrsx -lgcm_sys -lnet -lio -lsysutil -lsysmodule -lm -ljpgdec -lpngdec -llv2 -lnet -lnetctl -lsysfs -lfreetype -lcamera -lgem -lspurs +LIBS := -lretro_psl1ght -lrt -laudio -lrsx -lgcm_sys -lnet -lio -lsysutil -lsysmodule -lm -ljpgdec -lpngdec -llv2 -lnet -lnetctl -lsysfs -lfreetype -lcamera -lgem -lspurs # system platform system_platform = unix diff --git a/frontend/drivers/platform_ps3.c b/frontend/drivers/platform_ps3.c index 9da2554ef89..add38d50b41 100644 --- a/frontend/drivers/platform_ps3.c +++ b/frontend/drivers/platform_ps3.c @@ -646,14 +646,14 @@ static void frontend_ps3_process_args(int *argc, char *argv[]) static size_t frontend_ps3_get_mem_total(void) { sys_memory_info_t mem_info; - sys_memory_get_user_memory_size(&mem_info); + sys_memory_get_user_memory_size((u64)&mem_info); return mem_info.total; } static size_t frontend_ps3_get_mem_used(void) { sys_memory_info_t mem_info; - sys_memory_get_user_memory_size(&mem_info); + sys_memory_get_user_memory_size((u64)&mem_info); return mem_info.avail; } #endif diff --git a/gfx/common/egl_common.c b/gfx/common/egl_common.c index ebc71c4e3d5..edcf526f9ad 100644 --- a/gfx/common/egl_common.c +++ b/gfx/common/egl_common.c @@ -125,11 +125,9 @@ bool egl_init_dll(void) { #if defined(HAVE_DYLIB) && defined(HAVE_DYNAMIC_EGL) static dylib_t egl_dll; - if (!egl_dll) { - egl_dll = dylib_load("libEGL.dll"); - if (egl_dll) + if ((egl_dll = dylib_load("libEGL.dll"))) { /* Setup function callbacks once */ _egl_query_surface = (PFN_EGL_QUERY_SURFACE)dylib_proc( @@ -329,9 +327,9 @@ void egl_bind_hw_render(egl_ctx_data_t *egl, bool enable) void egl_swap_buffers(void *data) { egl_ctx_data_t *egl = (egl_ctx_data_t*)data; - if ( egl && - egl->dpy != EGL_NO_DISPLAY && - egl->surf != EGL_NO_SURFACE + if ( (egl) + && (egl->dpy != EGL_NO_DISPLAY) + && (egl->surf != EGL_NO_SURFACE) ) _egl_swap_buffers(egl->dpy, egl->surf); } @@ -344,7 +342,7 @@ void egl_set_swap_interval(egl_ctx_data_t *egl, int interval) */ egl->interval = interval; - if (egl->dpy == EGL_NO_DISPLAY) + if (egl->dpy == EGL_NO_DISPLAY) return; if (!_egl_get_current_context()) return; @@ -372,51 +370,54 @@ void egl_get_video_size(egl_ctx_data_t *egl, unsigned *width, unsigned *height) } } +#if defined(EGL_VERSION_1_5) static bool check_egl_version(int min_major_version, int min_minor_version) { - int major, minor; const char *str = _egl_query_string(EGL_NO_DISPLAY, EGL_VERSION); - if (!str) - return false; - - if (sscanf(str, "%d.%d", &major, &minor) != 2) - return false; - - if (major < min_major_version) - return false; - - if (major > min_major_version) - return true; - - if (minor >= min_minor_version) - return true; + if (str) + { + int major, minor; + if (sscanf(str, "%d.%d", &major, &minor) == 2) + { + if (major >= min_major_version) + { + if (major > min_major_version) + return true; + else if (minor >= min_minor_version) + return true; + } + } + } return false; } +#endif +#if defined(EGL_EXT_platform_base) static bool check_egl_client_extension(const char *name, size_t name_len) { const char *str = _egl_query_string(EGL_NO_DISPLAY, EGL_EXTENSIONS); /* The EGL implementation doesn't support client extensions at all. */ - if (!str) - return false; - - while (*str != '\0') + if (str) { - /* Use strspn and strcspn to find the start position and length of each - * token in the extension string. Using strtok could also work, but - * that would require allocating a copy of the string. */ - size_t len = strcspn(str, " "); - if (len == name_len && strncmp(str, name, name_len) == 0) - return true; - str += len; - str += strspn(str, " "); + while (*str != '\0') + { + /* Use strspn and strcspn to find the start position and length of each + * token in the extension string. Using strtok could also work, but + * that would require allocating a copy of the string. */ + size_t len = strcspn(str, " "); + if (len == name_len && strncmp(str, name, name_len) == 0) + return true; + str += len; + str += strspn(str, " "); + } } return false; } +#endif static EGLDisplay get_egl_display(EGLenum platform, void *native) { @@ -623,13 +624,3 @@ bool egl_create_surface(egl_ctx_data_t *egl, void *native_window) return true; } - -bool egl_has_config(egl_ctx_data_t *egl) -{ - if (!egl->config) - { - RARCH_ERR("[EGL]: No EGL configurations available.\n"); - return false; - } - return true; -} diff --git a/gfx/common/egl_common.h b/gfx/common/egl_common.h index 00856b6bf67..acb7c66e2c0 100644 --- a/gfx/common/egl_common.h +++ b/gfx/common/egl_common.h @@ -74,8 +74,6 @@ extern bool g_egl_inited; extern unsigned g_egl_major; extern unsigned g_egl_minor; -void egl_report_error(void); - void egl_destroy(egl_ctx_data_t *egl); gfx_ctx_proc_t egl_get_proc_address(const char *symbol); @@ -123,6 +121,8 @@ bool egl_get_native_visual_id(egl_ctx_data_t *egl, EGLint *value); bool egl_get_config_attrib(EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value); +void egl_report_error(void); + bool egl_has_config(egl_ctx_data_t *egl); RETRO_END_DECLS diff --git a/gfx/common/rsx_common.h b/gfx/common/rsx_common.h index eb51451b0c0..4bdcd239a41 100644 --- a/gfx/common/rsx_common.h +++ b/gfx/common/rsx_common.h @@ -38,6 +38,9 @@ #define RSX_MAX_TEXTURE_VERTICES 4096 // Set > 0 for preallocated texture vertices #define RSX_MAX_FONT_VERTICES 8192 +#define RSX_SHADER_STOCK_BLEND (RSX_MAX_SHADERS - 1) +#define RSX_SHADER_MENU (RSX_MAX_SHADERS - 2) + /* Shader objects */ extern const u8 modern_opaque_vpo_end[]; extern const u8 modern_opaque_vpo[]; diff --git a/gfx/common/vulkan_common.c b/gfx/common/vulkan_common.c index 3a2ca92652f..0b09324f8cd 100644 --- a/gfx/common/vulkan_common.c +++ b/gfx/common/vulkan_common.c @@ -420,7 +420,9 @@ struct vk_texture vulkan_create_texture(vk_t *vk, enum vk_texture_type type) { unsigned i; + uint32_t buffer_width; struct vk_texture tex; + VkFormat remap_tex_fmt; VkMemoryRequirements mem_reqs; VkSubresourceLayout layout; VkDevice device = vk->context->device; @@ -432,7 +434,6 @@ struct vk_texture vulkan_create_texture(vk_t *vk, VkCommandBufferAllocateInfo cmd_info = { VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO }; VkSubmitInfo submit_info = { VK_STRUCTURE_TYPE_SUBMIT_INFO }; VkCommandBufferBeginInfo begin_info = { VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO }; - uint32_t buffer_width; memset(&tex, 0, sizeof(tex)); @@ -452,19 +453,19 @@ struct vk_texture vulkan_create_texture(vk_t *vk, buffer_info.size = buffer_width * height; buffer_info.sharingMode = VK_SHARING_MODE_EXCLUSIVE; + remap_tex_fmt = vulkan_remap_to_texture_format(format); + /* Compatibility concern. Some Apple hardware does not support rgb565. * Use compute shader uploads instead. * If we attempt to use streamed texture, force staging path. * If we're creating fallback dynamic texture, force RGBA8888. */ - if (vulkan_remap_to_texture_format(format) != format) + if (remap_tex_fmt != format) { if (type == VULKAN_TEXTURE_STREAMED) - { - type = VULKAN_TEXTURE_STAGING; - } + type = VULKAN_TEXTURE_STAGING; else if (type == VULKAN_TEXTURE_DYNAMIC) { - format = vulkan_remap_to_texture_format(format); + format = remap_tex_fmt; info.format = format; info.usage |= VK_IMAGE_USAGE_STORAGE_BIT; } diff --git a/gfx/common/vulkan_common.h b/gfx/common/vulkan_common.h index 840d8d188fe..02ca9bf4abf 100644 --- a/gfx/common/vulkan_common.h +++ b/gfx/common/vulkan_common.h @@ -21,7 +21,7 @@ #endif #include - +#include #define VULKAN_DESCRIPTOR_MANAGER_BLOCK_SETS 16 #define VULKAN_MAX_DESCRIPTOR_POOL_SIZES 16 @@ -745,12 +745,11 @@ void vulkan_set_uniform_buffer( void vulkan_debug_mark_image(VkDevice device, VkImage image); void vulkan_debug_mark_memory(VkDevice device, VkDeviceMemory memory); -static inline VkFormat vulkan_remap_to_texture_format(VkFormat fmt) +static INLINE VkFormat vulkan_remap_to_texture_format(VkFormat fmt) { if (fmt == VK_FORMAT_R5G6B5_UNORM_PACK16) return VK_FORMAT_R8G8B8A8_UNORM; - else - return fmt; + return fmt; } RETRO_END_DECLS diff --git a/gfx/drivers/metal.m b/gfx/drivers/metal.m index 5405005c135..591c0c975ff 100644 --- a/gfx/drivers/metal.m +++ b/gfx/drivers/metal.m @@ -174,7 +174,9 @@ - (instancetype)initWithVideo:(const video_info_t *)video [apple_platform setVideoMode:mode]; +#ifdef HAVE_COCOATOUCH [self mtkView:view drawableSizeWillChange:CGSizeMake(mode.width, mode.height)]; +#endif *input = NULL; *inputData = NULL; diff --git a/gfx/drivers/rsx_gfx.c b/gfx/drivers/rsx_gfx.c index 79b5e68d46e..f9671ae5804 100644 --- a/gfx/drivers/rsx_gfx.c +++ b/gfx/drivers/rsx_gfx.c @@ -536,46 +536,46 @@ static void rsx_init_shader(rsx_t *rsx) { u32 fpsize = 0; u32 vpsize = 0; - rsx->vp_ucode[VIDEO_SHADER_MENU] = NULL; - rsx->fp_ucode[VIDEO_SHADER_MENU] = NULL; - rsx->vpo[VIDEO_SHADER_MENU] = (rsxVertexProgram *)modern_opaque_vpo; - rsx->fpo[VIDEO_SHADER_MENU] = (rsxFragmentProgram *)modern_opaque_fpo; - rsxVertexProgramGetUCode(rsx->vpo[VIDEO_SHADER_MENU], &rsx->vp_ucode[VIDEO_SHADER_MENU], &vpsize); - rsxFragmentProgramGetUCode(rsx->fpo[VIDEO_SHADER_MENU], &rsx->fp_ucode[VIDEO_SHADER_MENU], &fpsize); - rsx->fp_buffer[VIDEO_SHADER_MENU] = (u32 *)rsxMemalign(64, fpsize); - if (!rsx->fp_buffer[VIDEO_SHADER_MENU]) + rsx->vp_ucode[RSX_SHADER_MENU] = NULL; + rsx->fp_ucode[RSX_SHADER_MENU] = NULL; + rsx->vpo[RSX_SHADER_MENU] = (rsxVertexProgram *)modern_opaque_vpo; + rsx->fpo[RSX_SHADER_MENU] = (rsxFragmentProgram *)modern_opaque_fpo; + rsxVertexProgramGetUCode(rsx->vpo[RSX_SHADER_MENU], &rsx->vp_ucode[RSX_SHADER_MENU], &vpsize); + rsxFragmentProgramGetUCode(rsx->fpo[RSX_SHADER_MENU], &rsx->fp_ucode[RSX_SHADER_MENU], &fpsize); + rsx->fp_buffer[RSX_SHADER_MENU] = (u32 *)rsxMemalign(64, fpsize); + if (!rsx->fp_buffer[RSX_SHADER_MENU]) { RARCH_LOG("failed to allocate fp_buffer\n"); return; } - memcpy(rsx->fp_buffer[VIDEO_SHADER_MENU], rsx->fp_ucode[VIDEO_SHADER_MENU], fpsize); - rsxAddressToOffset(rsx->fp_buffer[VIDEO_SHADER_MENU], &rsx->fp_offset[VIDEO_SHADER_MENU]); - rsx->proj_matrix[VIDEO_SHADER_MENU] = rsxVertexProgramGetConst(rsx->vpo[VIDEO_SHADER_MENU], "modelViewProj"); - rsx->pos_index[VIDEO_SHADER_MENU] = rsxVertexProgramGetAttrib(rsx->vpo[VIDEO_SHADER_MENU], "position"); - rsx->col_index[VIDEO_SHADER_MENU] = rsxVertexProgramGetAttrib(rsx->vpo[VIDEO_SHADER_MENU], "color"); - rsx->uv_index[VIDEO_SHADER_MENU] = rsxVertexProgramGetAttrib(rsx->vpo[VIDEO_SHADER_MENU], "texcoord"); - rsx->tex_unit[VIDEO_SHADER_MENU] = rsxFragmentProgramGetAttrib(rsx->fpo[VIDEO_SHADER_MENU], "texture"); - - rsx->vp_ucode[VIDEO_SHADER_STOCK_BLEND] = NULL; - rsx->fp_ucode[VIDEO_SHADER_STOCK_BLEND] = NULL; - rsx->vpo[VIDEO_SHADER_STOCK_BLEND] = (rsxVertexProgram *)modern_alpha_blend_vpo; - rsx->fpo[VIDEO_SHADER_STOCK_BLEND] = (rsxFragmentProgram *)modern_alpha_blend_fpo; - rsxVertexProgramGetUCode(rsx->vpo[VIDEO_SHADER_STOCK_BLEND], &rsx->vp_ucode[VIDEO_SHADER_STOCK_BLEND], &vpsize); - rsxFragmentProgramGetUCode(rsx->fpo[VIDEO_SHADER_STOCK_BLEND], &rsx->fp_ucode[VIDEO_SHADER_STOCK_BLEND], &fpsize); - rsx->fp_buffer[VIDEO_SHADER_STOCK_BLEND] = (u32 *)rsxMemalign(64, fpsize); - if (!rsx->fp_buffer[VIDEO_SHADER_STOCK_BLEND]) + memcpy(rsx->fp_buffer[RSX_SHADER_MENU], rsx->fp_ucode[RSX_SHADER_MENU], fpsize); + rsxAddressToOffset(rsx->fp_buffer[RSX_SHADER_MENU], &rsx->fp_offset[RSX_SHADER_MENU]); + rsx->proj_matrix[RSX_SHADER_MENU] = rsxVertexProgramGetConst(rsx->vpo[RSX_SHADER_MENU], "modelViewProj"); + rsx->pos_index[RSX_SHADER_MENU] = rsxVertexProgramGetAttrib(rsx->vpo[RSX_SHADER_MENU], "position"); + rsx->col_index[RSX_SHADER_MENU] = rsxVertexProgramGetAttrib(rsx->vpo[RSX_SHADER_MENU], "color"); + rsx->uv_index[RSX_SHADER_MENU] = rsxVertexProgramGetAttrib(rsx->vpo[RSX_SHADER_MENU], "texcoord"); + rsx->tex_unit[RSX_SHADER_MENU] = rsxFragmentProgramGetAttrib(rsx->fpo[RSX_SHADER_MENU], "texture"); + + rsx->vp_ucode[RSX_SHADER_STOCK_BLEND] = NULL; + rsx->fp_ucode[RSX_SHADER_STOCK_BLEND] = NULL; + rsx->vpo[RSX_SHADER_STOCK_BLEND] = (rsxVertexProgram *)modern_alpha_blend_vpo; + rsx->fpo[RSX_SHADER_STOCK_BLEND] = (rsxFragmentProgram *)modern_alpha_blend_fpo; + rsxVertexProgramGetUCode(rsx->vpo[RSX_SHADER_STOCK_BLEND], &rsx->vp_ucode[RSX_SHADER_STOCK_BLEND], &vpsize); + rsxFragmentProgramGetUCode(rsx->fpo[RSX_SHADER_STOCK_BLEND], &rsx->fp_ucode[RSX_SHADER_STOCK_BLEND], &fpsize); + rsx->fp_buffer[RSX_SHADER_STOCK_BLEND] = (u32 *)rsxMemalign(64, fpsize); + if (!rsx->fp_buffer[RSX_SHADER_STOCK_BLEND]) { RARCH_LOG("failed to allocate fp_buffer\n"); return; } - memcpy(rsx->fp_buffer[VIDEO_SHADER_STOCK_BLEND], rsx->fp_ucode[VIDEO_SHADER_STOCK_BLEND], fpsize); - rsxAddressToOffset(rsx->fp_buffer[VIDEO_SHADER_STOCK_BLEND], &rsx->fp_offset[VIDEO_SHADER_STOCK_BLEND]); - rsx->proj_matrix[VIDEO_SHADER_STOCK_BLEND] = rsxVertexProgramGetConst(rsx->vpo[VIDEO_SHADER_STOCK_BLEND], "modelViewProj"); - rsx->pos_index[VIDEO_SHADER_STOCK_BLEND] = rsxVertexProgramGetAttrib(rsx->vpo[VIDEO_SHADER_STOCK_BLEND], "position"); - rsx->col_index[VIDEO_SHADER_STOCK_BLEND] = rsxVertexProgramGetAttrib(rsx->vpo[VIDEO_SHADER_STOCK_BLEND], "color"); - rsx->uv_index[VIDEO_SHADER_STOCK_BLEND] = rsxVertexProgramGetAttrib(rsx->vpo[VIDEO_SHADER_STOCK_BLEND], "texcoord"); - rsx->tex_unit[VIDEO_SHADER_STOCK_BLEND] = rsxFragmentProgramGetAttrib(rsx->fpo[VIDEO_SHADER_STOCK_BLEND], "texture"); - rsx->bgcolor[VIDEO_SHADER_STOCK_BLEND] = rsxFragmentProgramGetConst(rsx->fpo[VIDEO_SHADER_STOCK_BLEND], "bgcolor"); + memcpy(rsx->fp_buffer[RSX_SHADER_STOCK_BLEND], rsx->fp_ucode[RSX_SHADER_STOCK_BLEND], fpsize); + rsxAddressToOffset(rsx->fp_buffer[RSX_SHADER_STOCK_BLEND], &rsx->fp_offset[RSX_SHADER_STOCK_BLEND]); + rsx->proj_matrix[RSX_SHADER_STOCK_BLEND] = rsxVertexProgramGetConst(rsx->vpo[RSX_SHADER_STOCK_BLEND], "modelViewProj"); + rsx->pos_index[RSX_SHADER_STOCK_BLEND] = rsxVertexProgramGetAttrib(rsx->vpo[RSX_SHADER_STOCK_BLEND], "position"); + rsx->col_index[RSX_SHADER_STOCK_BLEND] = rsxVertexProgramGetAttrib(rsx->vpo[RSX_SHADER_STOCK_BLEND], "color"); + rsx->uv_index[RSX_SHADER_STOCK_BLEND] = rsxVertexProgramGetAttrib(rsx->vpo[RSX_SHADER_STOCK_BLEND], "texcoord"); + rsx->tex_unit[RSX_SHADER_STOCK_BLEND] = rsxFragmentProgramGetAttrib(rsx->fpo[RSX_SHADER_STOCK_BLEND], "texture"); + rsx->bgcolor[RSX_SHADER_STOCK_BLEND] = rsxFragmentProgramGetConst(rsx->fpo[RSX_SHADER_STOCK_BLEND], "bgcolor"); } static void* rsx_init(const video_info_t* video, @@ -919,21 +919,21 @@ static void rsx_blit_buffer( static void rsx_set_texture(rsx_t* rsx, rsx_texture_t *texture) { rsxInvalidateTextureCache(rsx->context, GCM_INVALIDATE_TEXTURE); - rsxLoadTexture(rsx->context, rsx->tex_unit[VIDEO_SHADER_MENU]->index, &texture->tex); - rsxTextureControl(rsx->context, rsx->tex_unit[VIDEO_SHADER_MENU]->index, GCM_TRUE, 0 << 8, 12 << 8, GCM_TEXTURE_MAX_ANISO_1); - rsxTextureFilter(rsx->context, rsx->tex_unit[VIDEO_SHADER_MENU]->index, 0, texture->min_filter, texture->mag_filter, GCM_TEXTURE_CONVOLUTION_QUINCUNX); - rsxTextureWrapMode(rsx->context, rsx->tex_unit[VIDEO_SHADER_MENU]->index, texture->wrap_s, texture->wrap_t, GCM_TEXTURE_CLAMP_TO_EDGE, + rsxLoadTexture(rsx->context, rsx->tex_unit[RSX_SHADER_MENU]->index, &texture->tex); + rsxTextureControl(rsx->context, rsx->tex_unit[RSX_SHADER_MENU]->index, GCM_TRUE, 0 << 8, 12 << 8, GCM_TEXTURE_MAX_ANISO_1); + rsxTextureFilter(rsx->context, rsx->tex_unit[RSX_SHADER_MENU]->index, 0, texture->min_filter, texture->mag_filter, GCM_TEXTURE_CONVOLUTION_QUINCUNX); + rsxTextureWrapMode(rsx->context, rsx->tex_unit[RSX_SHADER_MENU]->index, texture->wrap_s, texture->wrap_t, GCM_TEXTURE_CLAMP_TO_EDGE, 0, GCM_TEXTURE_ZFUNC_LESS, 0); } static void rsx_set_menu_texture(rsx_t* rsx, rsx_texture_t *texture) { rsxInvalidateTextureCache(rsx->context, GCM_INVALIDATE_TEXTURE); - rsxLoadTexture(rsx->context, rsx->tex_unit[VIDEO_SHADER_STOCK_BLEND]->index, &texture->tex); - rsxTextureControl(rsx->context, rsx->tex_unit[VIDEO_SHADER_STOCK_BLEND]->index, GCM_TRUE, 0 << 8, 12 << 8, GCM_TEXTURE_MAX_ANISO_1); - rsxTextureFilter(rsx->context, rsx->tex_unit[VIDEO_SHADER_STOCK_BLEND]->index, 0, texture->min_filter, + rsxLoadTexture(rsx->context, rsx->tex_unit[RSX_SHADER_STOCK_BLEND]->index, &texture->tex); + rsxTextureControl(rsx->context, rsx->tex_unit[RSX_SHADER_STOCK_BLEND]->index, GCM_TRUE, 0 << 8, 12 << 8, GCM_TEXTURE_MAX_ANISO_1); + rsxTextureFilter(rsx->context, rsx->tex_unit[RSX_SHADER_STOCK_BLEND]->index, 0, texture->min_filter, texture->mag_filter, GCM_TEXTURE_CONVOLUTION_QUINCUNX); - rsxTextureWrapMode(rsx->context, rsx->tex_unit[VIDEO_SHADER_STOCK_BLEND]->index, texture->wrap_s, + rsxTextureWrapMode(rsx->context, rsx->tex_unit[RSX_SHADER_STOCK_BLEND]->index, texture->wrap_s, texture->wrap_t, GCM_TEXTURE_CLAMP_TO_EDGE, 0, GCM_TEXTURE_ZFUNC_LESS, 0); } @@ -1014,21 +1014,21 @@ static void rsx_draw_vertices(rsx_t* rsx) vertices[rsx->vert_idx+3].b = 1.0f; vertices[rsx->vert_idx+3].a = 1.0f; - rsxAddressToOffset(&vertices[rsx->vert_idx].x, &rsx->pos_offset[VIDEO_SHADER_MENU]); - rsxAddressToOffset(&vertices[rsx->vert_idx].u, &rsx->uv_offset[VIDEO_SHADER_MENU]); - rsxAddressToOffset(&vertices[rsx->vert_idx].r, &rsx->col_offset[VIDEO_SHADER_MENU]); + rsxAddressToOffset(&vertices[rsx->vert_idx].x, &rsx->pos_offset[RSX_SHADER_MENU]); + rsxAddressToOffset(&vertices[rsx->vert_idx].u, &rsx->uv_offset[RSX_SHADER_MENU]); + rsxAddressToOffset(&vertices[rsx->vert_idx].r, &rsx->col_offset[RSX_SHADER_MENU]); rsx->vert_idx = end_vert_idx; - rsxBindVertexArrayAttrib(rsx->context, rsx->pos_index[VIDEO_SHADER_MENU]->index, 0, - rsx->pos_offset[VIDEO_SHADER_MENU], sizeof(rsx_vertex_t), 2, GCM_VERTEX_DATA_TYPE_F32, GCM_LOCATION_RSX); - rsxBindVertexArrayAttrib(rsx->context, rsx->uv_index[VIDEO_SHADER_MENU]->index, 0, - rsx->uv_offset[VIDEO_SHADER_MENU], sizeof(rsx_vertex_t), 2, GCM_VERTEX_DATA_TYPE_F32, GCM_LOCATION_RSX); - rsxBindVertexArrayAttrib(rsx->context, rsx->col_index[VIDEO_SHADER_MENU]->index, 0, - rsx->col_offset[VIDEO_SHADER_MENU], sizeof(rsx_vertex_t), 4, GCM_VERTEX_DATA_TYPE_F32, GCM_LOCATION_RSX); + rsxBindVertexArrayAttrib(rsx->context, rsx->pos_index[RSX_SHADER_MENU]->index, 0, + rsx->pos_offset[RSX_SHADER_MENU], sizeof(rsx_vertex_t), 2, GCM_VERTEX_DATA_TYPE_F32, GCM_LOCATION_RSX); + rsxBindVertexArrayAttrib(rsx->context, rsx->uv_index[RSX_SHADER_MENU]->index, 0, + rsx->uv_offset[RSX_SHADER_MENU], sizeof(rsx_vertex_t), 2, GCM_VERTEX_DATA_TYPE_F32, GCM_LOCATION_RSX); + rsxBindVertexArrayAttrib(rsx->context, rsx->col_index[RSX_SHADER_MENU]->index, 0, + rsx->col_offset[RSX_SHADER_MENU], sizeof(rsx_vertex_t), 4, GCM_VERTEX_DATA_TYPE_F32, GCM_LOCATION_RSX); - rsxLoadVertexProgram(rsx->context, rsx->vpo[VIDEO_SHADER_MENU], rsx->vp_ucode[VIDEO_SHADER_MENU]); - rsxSetVertexProgramParameter(rsx->context, rsx->vpo[VIDEO_SHADER_MENU], rsx->proj_matrix[VIDEO_SHADER_MENU], (float *)&rsx->mvp); - rsxLoadFragmentProgramLocation(rsx->context, rsx->fpo[VIDEO_SHADER_MENU], rsx->fp_offset[VIDEO_SHADER_MENU], GCM_LOCATION_RSX); + rsxLoadVertexProgram(rsx->context, rsx->vpo[RSX_SHADER_MENU], rsx->vp_ucode[RSX_SHADER_MENU]); + rsxSetVertexProgramParameter(rsx->context, rsx->vpo[RSX_SHADER_MENU], rsx->proj_matrix[RSX_SHADER_MENU], (float *)&rsx->mvp); + rsxLoadFragmentProgramLocation(rsx->context, rsx->fpo[RSX_SHADER_MENU], rsx->fp_offset[RSX_SHADER_MENU], GCM_LOCATION_RSX); rsxClearSurface(rsx->context, GCM_CLEAR_Z); rsxDrawVertexArray(rsx->context, GCM_TYPE_TRIANGLE_STRIP, 0, 4); @@ -1082,21 +1082,21 @@ static void rsx_draw_menu_vertices(rsx_t* rsx) vertices[rsx->vert_idx+3].b = 1.0f; vertices[rsx->vert_idx+3].a = rsx->menu_texture_alpha; - rsxAddressToOffset(&vertices[rsx->vert_idx].x, &rsx->pos_offset[VIDEO_SHADER_STOCK_BLEND]); - rsxAddressToOffset(&vertices[rsx->vert_idx].u, &rsx->uv_offset[VIDEO_SHADER_STOCK_BLEND]); - rsxAddressToOffset(&vertices[rsx->vert_idx].r, &rsx->col_offset[VIDEO_SHADER_STOCK_BLEND]); + rsxAddressToOffset(&vertices[rsx->vert_idx].x, &rsx->pos_offset[RSX_SHADER_STOCK_BLEND]); + rsxAddressToOffset(&vertices[rsx->vert_idx].u, &rsx->uv_offset[RSX_SHADER_STOCK_BLEND]); + rsxAddressToOffset(&vertices[rsx->vert_idx].r, &rsx->col_offset[RSX_SHADER_STOCK_BLEND]); rsx->vert_idx = end_vert_idx; - rsxBindVertexArrayAttrib(rsx->context, rsx->pos_index[VIDEO_SHADER_STOCK_BLEND]->index, 0, - rsx->pos_offset[VIDEO_SHADER_STOCK_BLEND], sizeof(rsx_vertex_t), 2, GCM_VERTEX_DATA_TYPE_F32, GCM_LOCATION_RSX); - rsxBindVertexArrayAttrib(rsx->context, rsx->uv_index[VIDEO_SHADER_STOCK_BLEND]->index, 0, - rsx->uv_offset[VIDEO_SHADER_STOCK_BLEND], sizeof(rsx_vertex_t), 2, GCM_VERTEX_DATA_TYPE_F32, GCM_LOCATION_RSX); - rsxBindVertexArrayAttrib(rsx->context, rsx->col_index[VIDEO_SHADER_STOCK_BLEND]->index, 0, - rsx->col_offset[VIDEO_SHADER_STOCK_BLEND], sizeof(rsx_vertex_t), 4, GCM_VERTEX_DATA_TYPE_F32, GCM_LOCATION_RSX); + rsxBindVertexArrayAttrib(rsx->context, rsx->pos_index[RSX_SHADER_STOCK_BLEND]->index, 0, + rsx->pos_offset[RSX_SHADER_STOCK_BLEND], sizeof(rsx_vertex_t), 2, GCM_VERTEX_DATA_TYPE_F32, GCM_LOCATION_RSX); + rsxBindVertexArrayAttrib(rsx->context, rsx->uv_index[RSX_SHADER_STOCK_BLEND]->index, 0, + rsx->uv_offset[RSX_SHADER_STOCK_BLEND], sizeof(rsx_vertex_t), 2, GCM_VERTEX_DATA_TYPE_F32, GCM_LOCATION_RSX); + rsxBindVertexArrayAttrib(rsx->context, rsx->col_index[RSX_SHADER_STOCK_BLEND]->index, 0, + rsx->col_offset[RSX_SHADER_STOCK_BLEND], sizeof(rsx_vertex_t), 4, GCM_VERTEX_DATA_TYPE_F32, GCM_LOCATION_RSX); - rsxLoadVertexProgram(rsx->context, rsx->vpo[VIDEO_SHADER_STOCK_BLEND], rsx->vp_ucode[VIDEO_SHADER_STOCK_BLEND]); - rsxSetVertexProgramParameter(rsx->context, rsx->vpo[VIDEO_SHADER_STOCK_BLEND], rsx->proj_matrix[VIDEO_SHADER_STOCK_BLEND], (float *)&rsx->mvp_no_rot); - rsxLoadFragmentProgramLocation(rsx->context, rsx->fpo[VIDEO_SHADER_STOCK_BLEND], rsx->fp_offset[VIDEO_SHADER_STOCK_BLEND], GCM_LOCATION_RSX); + rsxLoadVertexProgram(rsx->context, rsx->vpo[RSX_SHADER_STOCK_BLEND], rsx->vp_ucode[RSX_SHADER_STOCK_BLEND]); + rsxSetVertexProgramParameter(rsx->context, rsx->vpo[RSX_SHADER_STOCK_BLEND], rsx->proj_matrix[RSX_SHADER_STOCK_BLEND], (float *)&rsx->mvp_no_rot); + rsxLoadFragmentProgramLocation(rsx->context, rsx->fpo[RSX_SHADER_STOCK_BLEND], rsx->fp_offset[RSX_SHADER_STOCK_BLEND], GCM_LOCATION_RSX); rsxSetBlendEnable(rsx->context, GCM_TRUE); rsxSetBlendFunc(rsx->context, GCM_SRC_ALPHA, GCM_ONE_MINUS_SRC_ALPHA, GCM_SRC_ALPHA, GCM_ONE_MINUS_SRC_ALPHA); diff --git a/gfx/drivers_context/wayland_ctx.c b/gfx/drivers_context/wayland_ctx.c index e12a4533ef7..01a845a8da6 100644 --- a/gfx/drivers_context/wayland_ctx.c +++ b/gfx/drivers_context/wayland_ctx.c @@ -259,15 +259,11 @@ static bool gfx_ctx_wl_egl_init_context(gfx_ctx_wayland_data_t *wl) egl_default_accept_config_cb)) { egl_report_error(); - goto error; + return false; } - - if (n == 0 || !egl_has_config(&wl->egl)) - goto error; + if (n == 0 || !&wl->egl.config) + return false; return true; - -error: - return false; } #endif @@ -275,23 +271,17 @@ static void *gfx_ctx_wl_init(void *data) { int i; gfx_ctx_wayland_data_t *wl = NULL; - if (!gfx_ctx_wl_init_common(&toplevel_listener, &wl)) goto error; - #ifdef HAVE_EGL if (!gfx_ctx_wl_egl_init_context(wl)) goto error; #endif - return wl; - error: gfx_ctx_wl_destroy_resources(wl); - if (wl) free(wl); - return NULL; } diff --git a/gfx/drivers_context/xegl_ctx.c b/gfx/drivers_context/xegl_ctx.c index dcb13bfe0f6..b96dfec615f 100644 --- a/gfx/drivers_context/xegl_ctx.c +++ b/gfx/drivers_context/xegl_ctx.c @@ -181,7 +181,7 @@ static void *gfx_ctx_xegl_init(void *video_driver) goto error; } - if (n == 0 || !egl_has_config(&xegl->egl)) + if (n == 0 || !&xegl->egl.config) goto error; #endif diff --git a/gfx/drivers_display/gfx_display_rsx.c b/gfx/drivers_display/gfx_display_rsx.c index c378706e50c..deae25c844c 100644 --- a/gfx/drivers_display/gfx_display_rsx.c +++ b/gfx/drivers_display/gfx_display_rsx.c @@ -105,12 +105,12 @@ static void gfx_display_rsx_draw(gfx_display_ctx_draw_t *draw, rsxSetViewport(rsx->context, vp.x, vp.y, vp.w, vp.h, vp.min, vp.max, vp.scale, vp.offset); rsxInvalidateTextureCache(rsx->context, GCM_INVALIDATE_TEXTURE); - rsxLoadTexture(rsx->context, rsx->tex_unit[VIDEO_SHADER_STOCK_BLEND]->index, &texture->tex); - rsxTextureControl(rsx->context, rsx->tex_unit[VIDEO_SHADER_STOCK_BLEND]->index, + rsxLoadTexture(rsx->context, rsx->tex_unit[RSX_SHADER_STOCK_BLEND]->index, &texture->tex); + rsxTextureControl(rsx->context, rsx->tex_unit[RSX_SHADER_STOCK_BLEND]->index, GCM_TRUE, 0 << 8, 12 << 8, GCM_TEXTURE_MAX_ANISO_1); - rsxTextureFilter(rsx->context, rsx->tex_unit[VIDEO_SHADER_STOCK_BLEND]->index, 0, + rsxTextureFilter(rsx->context, rsx->tex_unit[RSX_SHADER_STOCK_BLEND]->index, 0, texture->min_filter, texture->mag_filter, GCM_TEXTURE_CONVOLUTION_QUINCUNX); - rsxTextureWrapMode(rsx->context, rsx->tex_unit[VIDEO_SHADER_STOCK_BLEND]->index, texture->wrap_s, + rsxTextureWrapMode(rsx->context, rsx->tex_unit[RSX_SHADER_STOCK_BLEND]->index, texture->wrap_s, texture->wrap_t, GCM_TEXTURE_CLAMP_TO_EDGE, 0, GCM_TEXTURE_ZFUNC_LESS, 0); #if RSX_MAX_TEXTURE_VERTICES > 0 @@ -140,30 +140,30 @@ static void gfx_display_rsx_draw(gfx_display_ctx_draw_t *draw, vertices[i].a = *color++; } rsxAddressToOffset(&vertices[rsx->texture_vert_idx].x, - &rsx->pos_offset[VIDEO_SHADER_STOCK_BLEND]); + &rsx->pos_offset[RSX_SHADER_STOCK_BLEND]); rsxAddressToOffset(&vertices[rsx->texture_vert_idx].u, - &rsx->uv_offset[VIDEO_SHADER_STOCK_BLEND]); + &rsx->uv_offset[RSX_SHADER_STOCK_BLEND]); rsxAddressToOffset(&vertices[rsx->texture_vert_idx].r, - &rsx->col_offset[VIDEO_SHADER_STOCK_BLEND]); + &rsx->col_offset[RSX_SHADER_STOCK_BLEND]); rsx->texture_vert_idx = end_vert_idx; - rsxBindVertexArrayAttrib(rsx->context, rsx->pos_index[VIDEO_SHADER_STOCK_BLEND]->index, 0, - rsx->pos_offset[VIDEO_SHADER_STOCK_BLEND], sizeof(rsx_vertex_t), 2, + rsxBindVertexArrayAttrib(rsx->context, rsx->pos_index[RSX_SHADER_STOCK_BLEND]->index, 0, + rsx->pos_offset[RSX_SHADER_STOCK_BLEND], sizeof(rsx_vertex_t), 2, GCM_VERTEX_DATA_TYPE_F32, GCM_LOCATION_RSX); - rsxBindVertexArrayAttrib(rsx->context, rsx->uv_index[VIDEO_SHADER_STOCK_BLEND]->index, 0, - rsx->uv_offset[VIDEO_SHADER_STOCK_BLEND], sizeof(rsx_vertex_t), 2, + rsxBindVertexArrayAttrib(rsx->context, rsx->uv_index[RSX_SHADER_STOCK_BLEND]->index, 0, + rsx->uv_offset[RSX_SHADER_STOCK_BLEND], sizeof(rsx_vertex_t), 2, GCM_VERTEX_DATA_TYPE_F32, GCM_LOCATION_RSX); - rsxBindVertexArrayAttrib(rsx->context, rsx->col_index[VIDEO_SHADER_STOCK_BLEND]->index, 0, - rsx->col_offset[VIDEO_SHADER_STOCK_BLEND], sizeof(rsx_vertex_t), 4, + rsxBindVertexArrayAttrib(rsx->context, rsx->col_index[RSX_SHADER_STOCK_BLEND]->index, 0, + rsx->col_offset[RSX_SHADER_STOCK_BLEND], sizeof(rsx_vertex_t), 4, GCM_VERTEX_DATA_TYPE_F32, GCM_LOCATION_RSX); - rsxLoadVertexProgram(rsx->context, rsx->vpo[VIDEO_SHADER_STOCK_BLEND], - rsx->vp_ucode[VIDEO_SHADER_STOCK_BLEND]); + rsxLoadVertexProgram(rsx->context, rsx->vpo[RSX_SHADER_STOCK_BLEND], + rsx->vp_ucode[RSX_SHADER_STOCK_BLEND]); rsxSetVertexProgramParameter(rsx->context, - rsx->vpo[VIDEO_SHADER_STOCK_BLEND], rsx->proj_matrix[VIDEO_SHADER_STOCK_BLEND], + rsx->vpo[RSX_SHADER_STOCK_BLEND], rsx->proj_matrix[RSX_SHADER_STOCK_BLEND], (float *)&rsx->mvp_no_rot); rsxLoadFragmentProgramLocation(rsx->context, - rsx->fpo[VIDEO_SHADER_STOCK_BLEND], rsx->fp_offset[VIDEO_SHADER_STOCK_BLEND], + rsx->fpo[RSX_SHADER_STOCK_BLEND], rsx->fp_offset[RSX_SHADER_STOCK_BLEND], GCM_LOCATION_RSX); rsxClearSurface(rsx->context, GCM_CLEAR_Z); diff --git a/gfx/drivers_font/rsx_font.c b/gfx/drivers_font/rsx_font.c index 09340bb080b..bfa39eb79e9 100644 --- a/gfx/drivers_font/rsx_font.c +++ b/gfx/drivers_font/rsx_font.c @@ -45,7 +45,7 @@ typedef struct rsx_texture_t texture; u32 tex_width; u32 tex_height; - rsxProgramAttrib *proj_matrix; + rsxProgramConst *proj_matrix; rsxProgramAttrib *pos_index; rsxProgramAttrib *uv_index; rsxProgramAttrib *col_index; @@ -161,24 +161,24 @@ static void *rsx_font_init(void *data, font->atlas = font->font_driver->get_atlas(font->font_data); - font->vpo = font->rsx->vpo[VIDEO_SHADER_STOCK_BLEND]; - font->fpo = font->rsx->fpo[VIDEO_SHADER_STOCK_BLEND]; - font->fp_ucode = font->rsx->fp_ucode[VIDEO_SHADER_STOCK_BLEND]; - font->vp_ucode = font->rsx->vp_ucode[VIDEO_SHADER_STOCK_BLEND]; - font->fp_offset = font->rsx->fp_offset[VIDEO_SHADER_STOCK_BLEND]; + font->vpo = font->rsx->vpo[RSX_SHADER_STOCK_BLEND]; + font->fpo = font->rsx->fpo[RSX_SHADER_STOCK_BLEND]; + font->fp_ucode = font->rsx->fp_ucode[RSX_SHADER_STOCK_BLEND]; + font->vp_ucode = font->rsx->vp_ucode[RSX_SHADER_STOCK_BLEND]; + font->fp_offset = font->rsx->fp_offset[RSX_SHADER_STOCK_BLEND]; - font->proj_matrix = font->rsx->proj_matrix[VIDEO_SHADER_STOCK_BLEND]; - font->pos_index = font->rsx->pos_index[VIDEO_SHADER_STOCK_BLEND]; - font->uv_index = font->rsx->uv_index[VIDEO_SHADER_STOCK_BLEND]; - font->col_index = font->rsx->col_index[VIDEO_SHADER_STOCK_BLEND]; - font->tex_unit = font->rsx->tex_unit[VIDEO_SHADER_STOCK_BLEND]; + font->proj_matrix = font->rsx->proj_matrix[RSX_SHADER_STOCK_BLEND]; + font->pos_index = font->rsx->pos_index[RSX_SHADER_STOCK_BLEND]; + font->uv_index = font->rsx->uv_index[RSX_SHADER_STOCK_BLEND]; + font->col_index = font->rsx->col_index[RSX_SHADER_STOCK_BLEND]; + font->tex_unit = font->rsx->tex_unit[RSX_SHADER_STOCK_BLEND]; font->vertices = (rsx_vertex_t *)rsxMemalign(128, sizeof(rsx_vertex_t) * RSX_MAX_FONT_VERTICES); font->rsx->font_vert_idx = 0; font->tex_width = font->atlas->width; font->tex_height = font->atlas->height; - font->texture.data = (u8 *)rsxMemalign(128, (font->tex_height * font->tex_width)); + font->texture.data = (u32 *)rsxMemalign(128, (font->tex_height * font->tex_width)); rsxAddressToOffset(font->texture.data, &font->texture.offset); if (!font->texture.data) diff --git a/gfx/drivers_shader/shader_glsl.c b/gfx/drivers_shader/shader_glsl.c index 62928fce26f..81a7b3727d1 100644 --- a/gfx/drivers_shader/shader_glsl.c +++ b/gfx/drivers_shader/shader_glsl.c @@ -37,6 +37,7 @@ #include "../../state_manager.h" #endif #include "../../core.h" +#include "../../retroarch.h" #include "../../verbosity.h" #if defined(ORBIS) @@ -97,6 +98,8 @@ struct shader_uniforms int frame_count; int frame_direction; + int rotation; + int lut_texture[GFX_MAX_TEXTURES]; unsigned frame_count_mod; @@ -731,6 +734,8 @@ static void gl_glsl_find_uniforms(glsl_shader_data_t *glsl, uni->frame_count = gl_glsl_get_uniform(glsl, prog, "FrameCount"); uni->frame_direction = gl_glsl_get_uniform(glsl, prog, "FrameDirection"); + uni->rotation = gl_glsl_get_uniform(glsl, prog, "Rotation"); + for (i = 0; i < glsl->shader->luts; i++) uni->lut_texture[i] = glGetUniformLocation(prog, glsl->shader->lut[i].id); @@ -1327,6 +1332,9 @@ static void gl_glsl_set_params(void *dat, void *shader_data) glUniform1i(uni->frame_direction, 1); } + if (uni->rotation >= 0) + glUniform1i(uni->rotation, retroarch_get_rotation()); + /* Set lookup textures. */ for (i = 0; i < glsl->shader->luts; i++) { diff --git a/input/drivers/psl1ght_input.c b/input/drivers/psl1ght_input.c index 4f279492eb4..37d30401b98 100644 --- a/input/drivers/psl1ght_input.c +++ b/input/drivers/psl1ght_input.c @@ -207,9 +207,9 @@ static int ps3_process_gem(ps3_input_t *ps3, int t) switch (t) { case 0: - return gemUpdateStart(ps3->camread.buffer, ps3->camread.timestamp); + return gemUpdateStart((void *)(u64)ps3->camread.buffer, ps3->camread.timestamp); case 1: - return gemConvertVideoStart(ps3->camread.buffer); + return gemConvertVideoStart((void *)(u64)ps3->camread.buffer); case 2: return gemUpdateFinish(); case 3: @@ -638,7 +638,7 @@ static int16_t ps3_lightgun_device_state(ps3_input_t *ps3, float pointer_y; videoState state; videoResolution res; - VmathVector4 ray_start, ray_dir; + VmathVector3 ray_start, ray_dir; struct video_viewport vp; float center_y = 0.0f; float center_x = 0.0f; @@ -681,10 +681,8 @@ static int16_t ps3_lightgun_device_state(ps3_input_t *ps3, /* tracking mode 1: laser pointer mode (this is closest to actual lightgun behavior) */ ray_start.vec128 = ps3->gem_state.pos; - VmathVector4 ray_tmp = {.vec128 = {0.0f,0.0f,-1.0f,0.0f}}; - const VmathQuat *quat = &ps3->gem_state.quat; /* TODO/FIXME - warning - VmathVector3/VmathVector4 issue again */ - /* TODO/FIXME - note: expected 'VmathVector3 * {aka struct _VmathVector3 *}' but argument is of type 'VmathVector4 * {aka struct _VmathVector4 *}' - * vmathQRotate takes type VmathVector3* instead of VmathVector4* */ + VmathVector3 ray_tmp = {.vec128 = {0.0f,0.0f,-1.0f,0.0f}}; + const VmathQuat *quat = (VmathQuat *)&ps3->gem_state.quat; vmathQRotate(&ray_dir, quat, &ray_tmp); float t = -ray_start.vec128[2] / ray_dir.vec128[2]; pointer_x = ray_start.vec128[0] + ray_dir.vec128[0]*t; diff --git a/intl/msg_hash_cht.h b/intl/msg_hash_cht.h index 497eeb78a3e..5a71a0f6804 100644 --- a/intl/msg_hash_cht.h +++ b/intl/msg_hash_cht.h @@ -106,7 +106,7 @@ MSG_HASH( /* FIXME Is a specific image format used? Is it determined automatical #ifdef HAVE_LAKKA MSG_HASH( MENU_ENUM_LABEL_VALUE_EJECT_DISC, - "退出光碟片" + "退出光碟" ) MSG_HASH( MENU_ENUM_SUBLABEL_EJECT_DISC, @@ -1254,11 +1254,11 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_LABEL_HELP_FILE_BROWSER_MOVIE_OPEN, - "影片檔案。\n可使用內建播放器開啟此檔案。" + "影片檔案。\n可以使用內建播放器開啟此檔案。" ) MSG_HASH( MENU_ENUM_LABEL_HELP_FILE_BROWSER_MUSIC_OPEN, - "音樂檔案。\n可使用內建播放器開啟此檔案。" + "音樂檔案。\n可以使用內建播放器開啟此檔案。" ) MSG_HASH( MENU_ENUM_LABEL_HELP_FILE_BROWSER_IMAGE, @@ -1266,7 +1266,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_LABEL_HELP_FILE_BROWSER_IMAGE_OPEN_WITH_VIEWER, - "圖片檔案。\n可使用內建瀏覽器開啟此檔案。" + "圖片檔案。\n可以使用內建瀏覽器開啟此檔案。" ) MSG_HASH( MENU_ENUM_LABEL_HELP_FILE_BROWSER_CORE_SELECT_FROM_COLLECTION, @@ -1318,7 +1318,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_AI_SERVICE_SETTINGS, - "變更翻譯服務相關的設定。" + "變更人工智慧服務相關的設定。" ) MSG_HASH( MENU_ENUM_LABEL_VALUE_ACCESSIBILITY_SETTINGS, @@ -1857,7 +1857,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_FILTER, - "套用中央處理器架構的影像濾鏡, 套用時可能影響效能, 部分濾鏡限制色彩深度(16位元或32位元), 僅適用核心支援的格式。" + "中央處理器架構的影像濾鏡套用時可能影響效能, 部分濾鏡限制色彩深度(16位元或32位元), 僅限核心支援的格式。" ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_FILTER, @@ -2212,7 +2212,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_ASPECT_RATIO_INDEX, - "設定顯示寬高比。" + "設定顯示寬高比, 當「整數縮放」開啟時畫面可能不會延伸到螢幕邊緣。" ) MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_ASPECT_RATIO, @@ -6201,7 +6201,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_AI_SERVICE_ENABLE, - "開啟時必須完成即時翻譯相關的設定, 當執行項目需要翻譯時按快捷鍵執行。" + "開啟時必須完成即時翻譯相關的設定, 執行的項目需要翻譯時按快捷鍵執行。" ) MSG_HASH( MENU_ENUM_LABEL_VALUE_AI_SERVICE_PAUSE, @@ -8699,31 +8699,31 @@ MSG_HASH( MSG_HASH( MENU_ENUM_LABEL_VALUE_DISK_TRAY_EJECT, - "退出光碟映像檔" + "取出光碟映像檔" ) MSG_HASH( MENU_ENUM_SUBLABEL_DISK_TRAY_EJECT, - "開啟虛擬光碟機托盤並取出載入的映像檔, 開啟「當開啟選單時暫停核心」時, 部分核心須等到繼續遊戲後幾秒才載入。" + "虛擬光碟機托盤退出並取出載入的映像檔。\n設定選單選項中「當開啟選單時暫停核心」開啟時, 部分核心須等到繼續遊戲後幾秒才載入。" ) MSG_HASH( MENU_ENUM_LABEL_VALUE_DISK_TRAY_INSERT, - "載入光碟映像檔" + "放入光碟映像檔" ) MSG_HASH( MENU_ENUM_SUBLABEL_DISK_TRAY_INSERT, - "載入所選擇的映像檔編號, 開啟「當開啟選單時暫停核心」時, 部分核心須等到繼續遊戲後幾秒才載入。" + "虛擬光碟機托盤進入並載入選擇的映像檔。\n設定選單選項中「當開啟選單時暫停核心」開啟時, 部分核心須等到繼續遊戲後幾秒才載入。" ) MSG_HASH( MENU_ENUM_LABEL_VALUE_DISK_IMAGE_APPEND, - "選擇光碟映像檔" + "載入光碟映像檔" ) MSG_HASH( MENU_ENUM_SUBLABEL_DISK_IMAGE_APPEND, - "選擇光碟映像檔載入執行, 並加入到映像檔可使用編號中, 加入編號後支援使用快捷鍵切換映像檔。\n注意事項: 這是舊功能, 建議使用M3U格式載入映像檔, 可跳過此步驟, 直接使用快捷鍵切換映像檔。" + "載入光碟映像檔直接執行並加入到可使用編號中, 已加入的映像檔編號可以使用快捷鍵切換映像檔。\n注意事項: 此選項為舊功能, 建議使用M3U格式載入映像檔, 可跳過此步驟直接使用快捷鍵切換映像檔。" ) MSG_HASH( MENU_ENUM_SUBLABEL_DISK_IMAGE_APPEND_TRAY_OPEN, - "選擇光碟映像檔, 加入到編號中等待載入。\n注意事項: 這是舊功能, 建議使用M3U格式載入映像檔, 可跳過此步驟, 直接使用快捷鍵切換映像檔。" + "載入光碟映像檔並加入到編號中等待執行。\n注意事項: 此選項為舊功能, 建議使用M3U格式載入映像檔, 可跳過此步驟直接使用快捷鍵切換映像檔。" ) MSG_HASH( MENU_ENUM_LABEL_VALUE_DISK_INDEX, @@ -8731,7 +8731,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_DISK_INDEX, - "選擇要載入的光碟映像檔編號, 按下「載入光碟映像檔」執行。" + "選擇要放入的光碟映像檔編號, 使用「放入光碟映像檔」執行。" ) /* Quick Menu > Shaders */ @@ -8883,7 +8883,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_SHADER_PRESET_SAVE_AS, - "儲存目前著色器設置, 為新的配置檔, 可使用著色器快捷鍵載入。" + "儲存目前著色器設置為新的配置檔, 可使用著色器快捷鍵載入。" ) MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_GLOBAL, @@ -9161,7 +9161,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_LABEL_VALUE_NO_SETTINGS_FOUND, - "沒有可變更的設定選項。" + "沒有可以設定的選項。" ) MSG_HASH( MENU_ENUM_LABEL_VALUE_NO_BT_DEVICES_FOUND, diff --git a/libretro-common/file/config_file.c b/libretro-common/file/config_file.c index 3e0acf94519..7d82a74b8b9 100644 --- a/libretro-common/file/config_file.c +++ b/libretro-common/file/config_file.c @@ -207,12 +207,13 @@ static char *config_file_strip_comment(char *str) static char *config_file_extract_value(char *line) { + char *dst = NULL; while (ISSPACE((int)*line)) line++; /* Note: From this point on, an empty value * string is valid - and in this case, strldup("", sizeof("")) - * will be returned + * will be returned (see Note 2) * > If we instead return NULL, the the entry * is ignored completely - which means we cannot * track *changes* in entry value */ @@ -254,7 +255,13 @@ static char *config_file_extract_value(char *line) return strdup(value); } - return strldup("", sizeof("")); + /* Note 2: This is an unrolled strldup call + * to avoid an unnecessary dependency - + * call is strldup("", sizeof("")) + **/ + dst = (char*)malloc(sizeof(char*) * 2); + strlcpy(dst, "", 1); + return dst; } /* Move semantics? */ diff --git a/ui/drivers/ui_cocoa.m b/ui/drivers/ui_cocoa.m index 907b0d2d832..b397a411a74 100644 --- a/ui/drivers/ui_cocoa.m +++ b/ui/drivers/ui_cocoa.m @@ -701,6 +701,10 @@ - (void)setVideoMode:(gfx_ctx_mode_t)mode [self updateWindowedMode]; } + /* HACK(sgc): ensure MTKView posts a drawable resize event */ + if (mode.width > 0) + [self.window setContentSize:NSMakeSize(mode.width-1, mode.height)]; + [self.window setContentSize:NSMakeSize(mode.width, mode.height)]; [self.window displayIfNeeded]; }