diff options
Diffstat (limited to 'src/osd/modules/render')
-rw-r--r-- | src/osd/modules/render/aviwrite.cpp | 9 | ||||
-rw-r--r-- | src/osd/modules/render/bgfx/shadermanager.cpp | 9 | ||||
-rw-r--r-- | src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass0.sc | 2 | ||||
-rw-r--r-- | src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass4.sc | 2 | ||||
-rw-r--r-- | src/osd/modules/render/bgfx/shaders/shader.mk | 2 | ||||
-rw-r--r-- | src/osd/modules/render/d3d/d3dhlsl.cpp | 2 | ||||
-rw-r--r-- | src/osd/modules/render/d3d/d3dhlsl.h | 4 | ||||
-rw-r--r-- | src/osd/modules/render/drawbgfx.cpp | 48 | ||||
-rw-r--r-- | src/osd/modules/render/drawogl.cpp | 4 | ||||
-rw-r--r-- | src/osd/modules/render/drawsdl.cpp | 16 |
10 files changed, 37 insertions, 61 deletions
diff --git a/src/osd/modules/render/aviwrite.cpp b/src/osd/modules/render/aviwrite.cpp index e86d8f99ba6..e758d467e37 100644 --- a/src/osd/modules/render/aviwrite.cpp +++ b/src/osd/modules/render/aviwrite.cpp @@ -72,7 +72,7 @@ void avi_write::begin_avi_recording(std::string_view name) info.audio_timescale = m_machine.sample_rate(); info.audio_sampletime = 1; info.audio_numsamples = 0; - info.audio_channels = 2; + info.audio_channels = m_machine.sound().outputs_count(); info.audio_samplebits = 16; info.audio_samplerate = m_machine.sample_rate(); @@ -142,9 +142,10 @@ void avi_write::audio_frame(const int16_t *buffer, int samples_this_frame) if (m_output_file != nullptr) { // write the next frame - avi_file::error avierr = m_output_file->append_sound_samples(0, buffer + 0, samples_this_frame, 1); - if (avierr == avi_file::error::NONE) - avierr = m_output_file->append_sound_samples(1, buffer + 1, samples_this_frame, 1); + int channels = m_machine.sound().outputs_count(); + avi_file::error avierr = avi_file::error::NONE; + for (int channel = 0; channel != channels && avierr == avi_file::error::NONE; channel ++) + avierr = m_output_file->append_sound_samples(channel, buffer + channel, samples_this_frame, channels-1); if (avierr != avi_file::error::NONE) { osd_printf_error("Error while logging AVI audio frame: %s\n", avi_file::error_string(avierr)); diff --git a/src/osd/modules/render/bgfx/shadermanager.cpp b/src/osd/modules/render/bgfx/shadermanager.cpp index 763a744e4aa..282029cb96a 100644 --- a/src/osd/modules/render/bgfx/shadermanager.cpp +++ b/src/osd/modules/render/bgfx/shadermanager.cpp @@ -83,6 +83,15 @@ std::string shader_manager::make_path_string(const osd_options &options, const s { std::string shader_path(options.bgfx_path()); shader_path += PATH_SEPARATOR "shaders" PATH_SEPARATOR; + +#if defined(SDLMAME_EMSCRIPTEN) + // Hard-code renderer type to OpenGL ES for emscripten builds since the + // bgfx::getRendererType() is called here before BGFX has been + // initialized and therefore gives the wrong renderer type (Noop). + shader_path += "essl" PATH_SEPARATOR; + return shader_path; +#endif + switch (bgfx::getRendererType()) { case bgfx::RendererType::Noop: diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass0.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass0.sc index 4331c2353f6..229f2f93936 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass0.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass0.sc @@ -120,7 +120,7 @@ vec4 weighted_distance(vec4 a, vec4 b, vec4 c, vec4 d, vec4 e, vec4 f, vec4 g, v LEFT = UP = LEFT3 = UP3 = 0.0; \ PX0 = vec2(0.0, PX); \ LIN0 = vec4(0.0, 0.0, 0.0, 0.0); \ - } \ + } diff --git a/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass4.sc b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass4.sc index c37c512a7f6..bdd9f5b31db 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass4.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass4.sc @@ -110,7 +110,7 @@ vec3 color_mix(vec3 c, vec3 color, vec3 E) ax.x = round(info); \ iq.x = dot(ax, bin) - 2.0; \ iq.y = dot(ay, bin) - 2.0; \ - PIXEL = texture2D(ORIG_texture, v_texcoord0 + iq.x * v_texcoord1.xy + iq.y * v_texcoord1.zw).xyz; \ + PIXEL = texture2D(ORIG_texture, v_texcoord0 + iq.x * v_texcoord1.xy + iq.y * v_texcoord1.zw).xyz; void main() diff --git a/src/osd/modules/render/bgfx/shaders/shader.mk b/src/osd/modules/render/bgfx/shaders/shader.mk index e63d171a3ca..cc656d5e828 100644 --- a/src/osd/modules/render/bgfx/shaders/shader.mk +++ b/src/osd/modules/render/bgfx/shaders/shader.mk @@ -1,5 +1,5 @@ # -# Copyright 2011-2021 Branimir Karadzic. All rights reserved. +# Copyright 2011-2021 Branimir Karadzic. # License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause # diff --git a/src/osd/modules/render/d3d/d3dhlsl.cpp b/src/osd/modules/render/d3d/d3dhlsl.cpp index 52bec85f06f..c0753f314f7 100644 --- a/src/osd/modules/render/d3d/d3dhlsl.cpp +++ b/src/osd/modules/render/d3d/d3dhlsl.cpp @@ -2022,7 +2022,7 @@ int32_t slider::update(std::string *str, int32_t newval) return 0; } -char shaders::last_system_name[16]; +char shaders::last_system_name[MAX_DRIVER_NAME_CHARS + 1]; hlsl_options shaders::last_options = { false }; diff --git a/src/osd/modules/render/d3d/d3dhlsl.h b/src/osd/modules/render/d3d/d3dhlsl.h index f06deca2a57..6820f3dd316 100644 --- a/src/osd/modules/render/d3d/d3dhlsl.h +++ b/src/osd/modules/render/d3d/d3dhlsl.h @@ -2,7 +2,7 @@ // copyright-holders:Aaron Giles //============================================================ // -// drawd3d.c - Win32 Direct3D HLSL-specific header +// drawd3d.h - Win32 Direct3D HLSL-specific header // //============================================================ @@ -457,7 +457,7 @@ private: static slider_desc s_sliders[]; static hlsl_options last_options; // last used options - static char last_system_name[16]; // last used system + static char last_system_name[MAX_DRIVER_NAME_CHARS + 1]; // last used system osd::dynamic_module::ptr d3dx9_dll; d3dx_create_effect_from_file_fn d3dx_create_effect_from_file_ptr; diff --git a/src/osd/modules/render/drawbgfx.cpp b/src/osd/modules/render/drawbgfx.cpp index 36758914961..ef90478e59e 100644 --- a/src/osd/modules/render/drawbgfx.cpp +++ b/src/osd/modules/render/drawbgfx.cpp @@ -56,10 +56,6 @@ extern void *GetOSWindow(void *wincontroller); #endif #endif -#if defined(SDLMAME_USE_WAYLAND) -#include <wayland-egl.h> -#endif - #include <bgfx/bgfx.h> #include <bgfx/platform.h> @@ -387,36 +383,6 @@ bool video_bgfx::init_bgfx_library(osd_window &window) //============================================================ -// Helper for creating a wayland window -//============================================================ - -#if defined(SDLMAME_USE_WAYLAND) -wl_egl_window *create_wl_egl_window(SDL_Window *window, struct wl_surface *surface) -{ - if (!surface) - { - osd_printf_error("Wayland surface missing, aborting\n"); - return nullptr; - } - wl_egl_window *win_impl = (wl_egl_window *)SDL_GetWindowData(window, "wl_egl_window"); - if (!win_impl) - { - int width, height; - SDL_GetWindowSize(window, &width, &height); - win_impl = wl_egl_window_create(surface, width, height); - if (!win_impl) - { - osd_printf_error("Creating wayland window failed\n"); - return nullptr; - } - SDL_SetWindowData(window, "wl_egl_window", win_impl); - } - return win_impl; -} -#endif - - -//============================================================ // Utility for setting up window handle //============================================================ @@ -428,6 +394,9 @@ bool video_bgfx::set_platform_data(bgfx::PlatformData &platform_data, osd_window #elif defined(OSD_MAC) platform_data.ndt = nullptr; platform_data.nwh = GetOSWindow(dynamic_cast<mac_window_info const &>(window).platform_window()); +#elif defined(SDLMAME_EMSCRIPTEN) + platform_data.ndt = nullptr; + platform_data.nwh = (void *)"#canvas"; // HTML5 target selector #else // defined(OSD_*) SDL_SysWMinfo wmi; SDL_VERSION(&wmi.version); @@ -457,10 +426,10 @@ bool video_bgfx::set_platform_data(bgfx::PlatformData &platform_data, osd_window platform_data.nwh = wmi.info.cocoa.window; break; #endif -#if defined(SDL_VIDEO_DRIVER_WAYLAND) && SDL_VERSION_ATLEAST(2, 0, 16) && defined(SDLMAME_USE_WAYLAND) +#if defined(SDL_VIDEO_DRIVER_WAYLAND) && SDL_VERSION_ATLEAST(2, 0, 16) case SDL_SYSWM_WAYLAND: platform_data.ndt = wmi.info.wl.display; - platform_data.nwh = create_wl_egl_window(dynamic_cast<sdl_window_info const &>(window).platform_window(), wmi.info.wl.surface); + platform_data.nwh = wmi.info.wl.surface; if (!platform_data.nwh) { osd_printf_error("BGFX: Error creating a Wayland window\n"); @@ -553,12 +522,9 @@ static std::pair<void *, bool> sdlNativeWindowHandle(SDL_Window *window) case SDL_SYSWM_COCOA: return std::make_pair(wmi.info.cocoa.window, true); #endif -#if defined(SDL_VIDEO_DRIVER_WAYLAND) && SDL_VERSION_ATLEAST(2, 0, 16) && defined(SDLMAME_USE_WAYLAND) +#if defined(SDL_VIDEO_DRIVER_WAYLAND) && SDL_VERSION_ATLEAST(2, 0, 16) case SDL_SYSWM_WAYLAND: - { - void *const platform_window = osd::create_wl_egl_window(window, wmi.info.wl.surface); - return std::make_pair(platform_window, platform_window != nullptr); - } + return std::make_pair(wmi.info.wl.surface, true); #endif #if defined(SDL_VIDEO_DRIVER_ANDROID) case SDL_SYSWM_ANDROID: diff --git a/src/osd/modules/render/drawogl.cpp b/src/osd/modules/render/drawogl.cpp index bc7fcf9a959..f9f76946bf4 100644 --- a/src/osd/modules/render/drawogl.cpp +++ b/src/osd/modules/render/drawogl.cpp @@ -316,8 +316,8 @@ public: #endif private: - static const uint32_t HASH_SIZE = ((1 << 10) + 1); - static const uint32_t OVERFLOW_SIZE = (1 << 10); + static const uint32_t HASH_SIZE = ((1 << 18) + 1); + static const uint32_t OVERFLOW_SIZE = (1 << 12); void destroy_all_textures(); diff --git a/src/osd/modules/render/drawsdl.cpp b/src/osd/modules/render/drawsdl.cpp index f806815b2b0..b1a9e93f42e 100644 --- a/src/osd/modules/render/drawsdl.cpp +++ b/src/osd/modules/render/drawsdl.cpp @@ -126,13 +126,13 @@ private: // YUV overlays -static void yuv_RGB_to_YV12(const uint16_t *bitmap, uint8_t *ptr, const int pitch, \ +static void yuv_RGB_to_YV12(const uint16_t *bitmap, uint8_t *ptr, const int pitch, const uint32_t *lookup, const int width, const int height); -static void yuv_RGB_to_YV12X2(const uint16_t *bitmap, uint8_t *ptr, const int pitch, \ +static void yuv_RGB_to_YV12X2(const uint16_t *bitmap, uint8_t *ptr, const int pitch, const uint32_t *lookup, const int width, const int height); -static void yuv_RGB_to_YUY2(const uint16_t *bitmap, uint8_t *ptr, const int pitch, \ +static void yuv_RGB_to_YUY2(const uint16_t *bitmap, uint8_t *ptr, const int pitch, const uint32_t *lookup, const int width, const int height); -static void yuv_RGB_to_YUY2X2(const uint16_t *bitmap, uint8_t *ptr, const int pitch, \ +static void yuv_RGB_to_YUY2X2(const uint16_t *bitmap, uint8_t *ptr, const int pitch, const uint32_t *lookup, const int width, const int height); //============================================================ @@ -552,7 +552,7 @@ void renderer_sdl1::yuv_init() //uint32_t *lookup = sdl->m_yuv_lookup; -static void yuv_RGB_to_YV12(const uint16_t *bitmap, uint8_t *ptr, const int pitch, \ +static void yuv_RGB_to_YV12(const uint16_t *bitmap, uint8_t *ptr, const int pitch, const uint32_t *lookup, const int width, const int height) { int x, y; @@ -606,7 +606,7 @@ static void yuv_RGB_to_YV12(const uint16_t *bitmap, uint8_t *ptr, const int pitc } } -static void yuv_RGB_to_YV12X2(const uint16_t *bitmap, uint8_t *ptr, const int pitch, \ +static void yuv_RGB_to_YV12X2(const uint16_t *bitmap, uint8_t *ptr, const int pitch, const uint32_t *lookup, const int width, const int height) { /* this one is used when scale==2 */ @@ -641,7 +641,7 @@ static void yuv_RGB_to_YV12X2(const uint16_t *bitmap, uint8_t *ptr, const int pi } } -static void yuv_RGB_to_YUY2(const uint16_t *bitmap, uint8_t *ptr, const int pitch, \ +static void yuv_RGB_to_YUY2(const uint16_t *bitmap, uint8_t *ptr, const int pitch, const uint32_t *lookup, const int width, const int height) { /* this one is used when scale==2 */ @@ -667,7 +667,7 @@ static void yuv_RGB_to_YUY2(const uint16_t *bitmap, uint8_t *ptr, const int pitc } } -static void yuv_RGB_to_YUY2X2(const uint16_t *bitmap, uint8_t *ptr, const int pitch, \ +static void yuv_RGB_to_YUY2X2(const uint16_t *bitmap, uint8_t *ptr, const int pitch, const uint32_t *lookup, const int width, const int height) { /* this one is used when scale==2 */ |