From 43b43351fa88e2f989eda79e7692e761ebc58bb6 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Wed, 23 Sep 2020 09:32:42 +0200 Subject: [PATCH] Start making gfx_display_blend_begin and gfx_display_blend_end unnecessary --- gfx/gfx_display.c | 8 ++++-- gfx/gfx_thumbnail.c | 8 ++++-- gfx/gfx_widgets.c | 46 +++++++++++++++++++++--------- menu/drivers/ozone/ozone.c | 34 +++++++++++++++------- menu/drivers/ozone/ozone_display.c | 13 +++++++-- menu/drivers/ozone/ozone_entries.c | 32 +++++++++++++++------ menu/drivers/ozone/ozone_sidebar.c | 14 ++++++--- 7 files changed, 112 insertions(+), 43 deletions(-) diff --git a/gfx/gfx_display.c b/gfx/gfx_display.c index f966d25e8f..3ab3317c79 100644 --- a/gfx/gfx_display.c +++ b/gfx/gfx_display.c @@ -1639,6 +1639,8 @@ void gfx_display_draw_keyboard( { unsigned i; int ptr_width, ptr_height; + gfx_display_t *p_disp = disp_get_ptr(); + gfx_display_ctx_driver_t *dispctx = p_disp->dispctx; static float white[16] = { 1.00, 1.00, 1.00, 1.00, @@ -1678,7 +1680,8 @@ void gfx_display_draw_keyboard( if (i == id) { - gfx_display_blend_begin(userdata); + if (dispctx && dispctx->blend_begin) + dispctx->blend_begin(userdata); gfx_display_draw_texture( userdata, @@ -1693,7 +1696,8 @@ void gfx_display_draw_keyboard( &white[0], hover_texture); - gfx_display_blend_end(userdata); + if (dispctx && dispctx->blend_end) + dispctx->blend_end(userdata); color = text_color; } diff --git a/gfx/gfx_thumbnail.c b/gfx/gfx_thumbnail.c index e599e1c17d..bf17cae075 100644 --- a/gfx/gfx_thumbnail.c +++ b/gfx/gfx_thumbnail.c @@ -720,6 +720,8 @@ void gfx_thumbnail_draw( float draw_height; float draw_x; float draw_y; + gfx_display_t *p_disp = disp_get_ptr(); + gfx_display_ctx_driver_t *dispctx = p_disp->dispctx; float thumbnail_alpha = thumbnail->alpha * alpha; float thumbnail_color[16] = { 1.0f, 1.0f, 1.0f, 1.0f, @@ -739,7 +741,8 @@ void gfx_thumbnail_draw( thumbnail, width, height, scale_factor, &draw_width, &draw_height); - gfx_display_blend_begin(userdata); + if (dispctx && dispctx->blend_begin) + dispctx->blend_begin(userdata); /* Perform 'rotation' step * > Note that rotation does not actually work... @@ -879,6 +882,7 @@ void gfx_thumbnail_draw( /* Draw thumbnail */ gfx_display_draw(&draw, userdata, video_width, video_height); - gfx_display_blend_end(userdata); + if (dispctx && dispctx->blend_end) + dispctx->blend_end(userdata); } } diff --git a/gfx/gfx_widgets.c b/gfx/gfx_widgets.c index 888420847d..c2a39cfa1c 100644 --- a/gfx/gfx_widgets.c +++ b/gfx/gfx_widgets.c @@ -661,6 +661,8 @@ static void gfx_widgets_draw_icon_blend( gfx_display_ctx_draw_t draw; struct video_coords coords; math_matrix_4x4 mymat; + gfx_display_t *p_disp = disp_get_ptr(); + gfx_display_ctx_driver_t *dispctx = p_disp->dispctx; if (!texture) return; @@ -692,10 +694,12 @@ static void gfx_widgets_draw_icon_blend( draw.prim_type = GFX_DISPLAY_PRIM_TRIANGLESTRIP; draw.pipeline_id = 0; - gfx_display_blend_begin(userdata); + if (dispctx && dispctx->blend_begin) + dispctx->blend_begin(userdata); gfx_display_draw(&draw, userdata, video_width, video_height); - gfx_display_blend_end(userdata); + if (dispctx && dispctx->blend_end) + dispctx->blend_end(userdata); } #endif @@ -935,6 +939,8 @@ static int gfx_widgets_draw_indicator( enum msg_hash_enums msg) { unsigned width; + gfx_display_t *p_disp = disp_get_ptr(); + gfx_display_ctx_driver_t *dispctx = p_disp->dispctx; gfx_display_set_alpha(gfx_widgets_backdrop_orig, DEFAULT_BACKDROP); @@ -953,7 +959,8 @@ static int gfx_widgets_draw_indicator( gfx_display_set_alpha(gfx_widgets_pure_white, 1.0f); - gfx_display_blend_begin(userdata); + if (dispctx && dispctx->blend_begin) + dispctx->blend_begin(userdata); gfx_widgets_draw_icon( userdata, video_width, @@ -962,7 +969,8 @@ static int gfx_widgets_draw_indicator( icon, top_right_x_advance - width, y, 0, 1, gfx_widgets_pure_white ); - gfx_display_blend_end(userdata); + if (dispctx && dispctx->blend_end) + dispctx->blend_end(userdata); } else { @@ -1014,9 +1022,11 @@ static void gfx_widgets_draw_task_msg( float *msg_queue_current_background; float *msg_queue_current_bar; - bool draw_msg_new = false; - unsigned task_percentage_offset = 0; - char task_percentage[256] = {0}; + bool draw_msg_new = false; + unsigned task_percentage_offset = 0; + char task_percentage[256] = {0}; + gfx_display_t *p_disp = disp_get_ptr(); + gfx_display_ctx_driver_t *dispctx = p_disp->dispctx; if (msg->msg_new) draw_msg_new = !string_is_equal(msg->msg_new, msg->msg); @@ -1086,7 +1096,8 @@ static void gfx_widgets_draw_task_msg( /* Icon */ gfx_display_set_alpha(gfx_widgets_pure_white, msg->alpha); - gfx_display_blend_begin(userdata); + if (dispctx && dispctx->blend_begin) + dispctx->blend_begin(userdata); gfx_widgets_draw_icon( userdata, video_width, @@ -1101,7 +1112,8 @@ static void gfx_widgets_draw_task_msg( video_height - msg->offset_y, msg->task_finished ? 0 : msg->hourglass_rotation, 1, gfx_widgets_pure_white); - gfx_display_blend_end(userdata); + if (dispctx && dispctx->blend_end) + dispctx->blend_end(userdata); /* Text */ text_y_base = video_height @@ -1169,7 +1181,9 @@ static void gfx_widgets_draw_regular_msg( { unsigned bar_width; unsigned text_color; - uintptr_t icon = 0; + uintptr_t icon = 0; + gfx_display_t *p_disp = disp_get_ptr(); + gfx_display_ctx_driver_t *dispctx = p_disp->dispctx; if (!icon) icon = p_dispwidget->gfx_widgets_icons_textures[ @@ -1199,7 +1213,8 @@ static void gfx_widgets_draw_regular_msg( if (p_dispwidget->msg_queue_has_icons) { - gfx_display_blend_begin(userdata); + if (dispctx && dispctx->blend_begin) + dispctx->blend_begin(userdata); /* (int) cast is to be consistent with the rect drawing * and prevent alignment issues, don't remove it */ gfx_widgets_draw_icon( @@ -1213,7 +1228,8 @@ static void gfx_widgets_draw_regular_msg( (int)(video_height - msg->offset_y - p_dispwidget->msg_queue_icon_offset_y), 0, 1, msg_queue_background); - gfx_display_blend_end(userdata); + if (dispctx && dispctx->blend_end) + dispctx->blend_end(userdata); } /* Background */ @@ -1256,7 +1272,8 @@ static void gfx_widgets_draw_regular_msg( if (p_dispwidget->msg_queue_has_icons) { - gfx_display_blend_begin(userdata); + if (dispctx && dispctx->blend_begin) + dispctx->blend_begin(userdata); gfx_widgets_draw_icon( userdata, @@ -1289,7 +1306,8 @@ static void gfx_widgets_draw_regular_msg( video_height - msg->offset_y - p_dispwidget->msg_queue_icon_offset_y + p_dispwidget->msg_queue_internal_icon_offset, 0, 1, gfx_widgets_pure_white); - gfx_display_blend_end(userdata); + if (dispctx && dispctx->blend_end) + dispctx->blend_end(userdata); } } diff --git a/menu/drivers/ozone/ozone.c b/menu/drivers/ozone/ozone.c index c6af807420..3c85dfbfe0 100644 --- a/menu/drivers/ozone/ozone.c +++ b/menu/drivers/ozone/ozone.c @@ -1945,6 +1945,8 @@ static void ozone_draw_header(ozone_handle_t *ozone, unsigned seperator_margin = 30 * scale_factor; enum gfx_animation_ticker_type menu_ticker_type = (enum gfx_animation_ticker_type)settings->uints.menu_ticker_type; + gfx_display_t *p_disp = disp_get_ptr(); + gfx_display_ctx_driver_t *dispctx = p_disp->dispctx; /* Initial ticker configuration */ if (use_smooth_ticker) @@ -2014,7 +2016,8 @@ static void ozone_draw_header(ozone_handle_t *ozone, false); /* Icon */ - gfx_display_blend_begin(userdata); + if (dispctx && dispctx->blend_begin) + dispctx->blend_begin(userdata); #if 0 if (discord_avatar_is_ready()) ozone_draw_icon( @@ -2043,7 +2046,8 @@ static void ozone_draw_header(ozone_handle_t *ozone, video_width, video_height, 0, 1, ozone->theme->entries_icon); - gfx_display_blend_end(userdata); + if (dispctx && dispctx->blend_end) + dispctx->blend_end(userdata); /* Battery */ if (battery_level_enable) @@ -2077,7 +2081,8 @@ static void ozone_draw_header(ozone_handle_t *ozone, 1.0f, false); - gfx_display_blend_begin(userdata); + if (dispctx && dispctx->blend_begin) + dispctx->blend_begin(userdata); ozone_draw_icon( userdata, video_width, @@ -2090,7 +2095,8 @@ static void ozone_draw_header(ozone_handle_t *ozone, video_width, video_height, 0, 1, ozone->theme->entries_icon); - gfx_display_blend_end(userdata); + if (dispctx && dispctx->blend_end) + dispctx->blend_end(userdata); } } @@ -2124,7 +2130,8 @@ static void ozone_draw_header(ozone_handle_t *ozone, 1.0f, false); - gfx_display_blend_begin(userdata); + if (dispctx && dispctx->blend_begin) + dispctx->blend_begin(userdata); ozone_draw_icon( userdata, video_width, @@ -2137,7 +2144,8 @@ static void ozone_draw_header(ozone_handle_t *ozone, video_width, video_height, 0, 1, ozone->theme->entries_icon); - gfx_display_blend_end(userdata); + if (dispctx && dispctx->blend_end) + dispctx->blend_end(userdata); } } @@ -2195,6 +2203,8 @@ static void ozone_draw_footer(ozone_handle_t *ozone, ozone->footer_labels.fullscreen_thumbs.width - icon_size - (2.0f * icon_padding); float metadata_toggle_x = fullscreen_thumbs_x - ozone->footer_labels.metadata_toggle.width - icon_size - (2.0f * icon_padding); + gfx_display_t *p_disp = disp_get_ptr(); + gfx_display_ctx_driver_t *dispctx = p_disp->dispctx; /* Separator */ gfx_display_draw_quad( @@ -2212,7 +2222,8 @@ static void ozone_draw_footer(ozone_handle_t *ozone, /* Buttons */ /* Draw icons */ - gfx_display_blend_begin(userdata); + if (dispctx && dispctx->blend_begin) + dispctx->blend_begin(userdata); gfx_display_set_alpha(ozone->theme_dynamic.entries_icon, 1.0f); /* > ok */ @@ -2287,7 +2298,8 @@ static void ozone_draw_footer(ozone_handle_t *ozone, video_width,video_height, 0, 1, ozone->theme_dynamic.entries_icon); - gfx_display_blend_end(userdata); + if (dispctx && dispctx->blend_end) + dispctx->blend_end(userdata); /* Draw labels */ @@ -2451,7 +2463,8 @@ static void ozone_draw_footer(ozone_handle_t *ozone, } else { - gfx_display_blend_begin(userdata); + if (dispctx && dispctx->blend_begin) + dispctx->blend_begin(userdata); ozone_draw_icon( userdata, video_width, @@ -2466,7 +2479,8 @@ static void ozone_draw_footer(ozone_handle_t *ozone, 0, 1, NULL); - gfx_display_blend_end(userdata); + if (dispctx && dispctx->blend_end) + dispctx->blend_end(userdata); } } diff --git a/menu/drivers/ozone/ozone_display.c b/menu/drivers/ozone/ozone_display.c index 468d3d2e28..ab8ead4110 100644 --- a/menu/drivers/ozone/ozone_display.c +++ b/menu/drivers/ozone/ozone_display.c @@ -95,11 +95,14 @@ static void ozone_draw_cursor_slice( int slice_y = (int)y + 8 * scale_factor; unsigned slice_new_w = width + (24 + 1) * scale_factor; unsigned slice_new_h = height + 20 * scale_factor; + gfx_display_t *p_disp = disp_get_ptr(); + gfx_display_ctx_driver_t *dispctx = p_disp->dispctx; gfx_display_set_alpha(ozone->theme_dynamic.cursor_alpha, alpha); gfx_display_set_alpha(ozone->theme_dynamic.cursor_border, alpha); - gfx_display_blend_begin(userdata); + if (dispctx && dispctx->blend_begin) + dispctx->blend_begin(userdata); /* Cursor without border */ gfx_display_draw_texture_slice( @@ -133,7 +136,8 @@ static void ozone_draw_cursor_slice( ozone->textures[OZONE_TEXTURE_CURSOR_BORDER] ); - gfx_display_blend_end(userdata); + if (dispctx && dispctx->blend_end) + dispctx->blend_end(userdata); } static void ozone_draw_cursor_fallback( @@ -530,6 +534,8 @@ void ozone_draw_messagebox( float scale_factor = 0.0f; unsigned width = video_width; unsigned height = video_height; + gfx_display_t *p_disp = disp_get_ptr(); + gfx_display_ctx_driver_t *dispctx = p_disp->dispctx; wrapped_message[0] = '\0'; @@ -585,7 +591,8 @@ void ozone_draw_messagebox( gfx_display_set_alpha(ozone->theme_dynamic.message_background, ozone->animations.messagebox_alpha); - gfx_display_blend_begin(userdata); + if (dispctx && dispctx->blend_begin) + dispctx->blend_begin(userdata); /* Avoid drawing a black box if there's no assets */ if (ozone->has_all_assets) diff --git a/menu/drivers/ozone/ozone_entries.c b/menu/drivers/ozone/ozone_entries.c index daf51118ca..f35f3a6535 100644 --- a/menu/drivers/ozone/ozone_entries.c +++ b/menu/drivers/ozone/ozone_entries.c @@ -58,6 +58,8 @@ static void ozone_draw_entry_value( bool switch_is_on = true; bool do_draw_text = false; float scale_factor = ozone->last_scale_factor; + gfx_display_t *p_disp = disp_get_ptr(); + gfx_display_ctx_driver_t *dispctx = p_disp->dispctx; if (!entry->checked && string_is_empty(value)) return; @@ -65,7 +67,8 @@ static void ozone_draw_entry_value( /* check icon */ if (entry->checked) { - gfx_display_blend_begin(userdata); + if (dispctx && dispctx->blend_begin) + dispctx->blend_begin(userdata); ozone_draw_icon( userdata, video_width, @@ -80,7 +83,8 @@ static void ozone_draw_entry_value( 0, 1, ozone->theme_dynamic.entries_checkmark); - gfx_display_blend_end(userdata); + if (dispctx && dispctx->blend_end) + dispctx->blend_end(userdata); return; } @@ -176,8 +180,11 @@ static void ozone_draw_no_thumbnail_available(ozone_handle_t *ozone, { unsigned icon = OZONE_ENTRIES_ICONS_TEXTURE_CORE_INFO; unsigned icon_size = (unsigned)((float)ozone->dimensions.sidebar_entry_icon_size * 1.5f); + gfx_display_t *p_disp = disp_get_ptr(); + gfx_display_ctx_driver_t *dispctx = p_disp->dispctx; - gfx_display_blend_begin(userdata); + if (dispctx && dispctx->blend_begin) + dispctx->blend_begin(userdata); ozone_draw_icon( userdata, video_width, @@ -190,7 +197,8 @@ static void ozone_draw_no_thumbnail_available(ozone_handle_t *ozone, video_width, video_height, 0, 1, ozone->theme->entries_icon); - gfx_display_blend_end(userdata); + if (dispctx && dispctx->blend_end) + dispctx->blend_end(userdata); gfx_display_draw_text( ozone->fonts.footer.font, @@ -491,6 +499,8 @@ void ozone_draw_entries( size_t old_selection_y = 0; int entry_padding = ozone_get_entries_padding(ozone, old_list); float scale_factor = ozone->last_scale_factor; + gfx_display_t *p_disp = disp_get_ptr(); + gfx_display_ctx_driver_t *dispctx = p_disp->dispctx; menu_entries_ctl(MENU_ENTRIES_CTL_START_GET, &i); @@ -781,7 +791,8 @@ border_iterate: gfx_display_set_alpha(icon_color, alpha); - gfx_display_blend_begin(userdata); + if (dispctx && dispctx->blend_begin) + dispctx->blend_begin(userdata); ozone_draw_icon( userdata, video_width, @@ -799,7 +810,8 @@ border_iterate: 0, 1, icon_color); - gfx_display_blend_end(userdata); + if (dispctx && dispctx->blend_end) + dispctx->blend_end(userdata); if (icon_color == ozone_pure_white) gfx_display_set_alpha(icon_color, 1.0f); @@ -916,6 +928,8 @@ void ozone_draw_thumbnail_bar(ozone_handle_t *ozone, float scale_factor = ozone->last_scale_factor; enum gfx_thumbnail_alignment right_thumbnail_alignment; enum gfx_thumbnail_alignment left_thumbnail_alignment; + gfx_display_t *p_disp = disp_get_ptr(); + gfx_display_ctx_driver_t *dispctx = p_disp->dispctx; /* Background */ if (!libretro_running || (menu_framebuffer_opacity >= 1.0f)) @@ -1309,7 +1323,8 @@ void ozone_draw_thumbnail_bar(ozone_handle_t *ozone, /* Draw icon in the bottom right corner of * the thumbnail bar */ - gfx_display_blend_begin(userdata); + if (dispctx && dispctx->blend_begin) + dispctx->blend_begin(userdata); ozone_draw_icon( userdata, video_width, @@ -1322,7 +1337,8 @@ void ozone_draw_thumbnail_bar(ozone_handle_t *ozone, video_width, video_height, 0, 1, ozone->theme_dynamic.entries_icon); - gfx_display_blend_end(userdata); + if (dispctx && dispctx->blend_end) + dispctx->blend_end(userdata); } } } diff --git a/menu/drivers/ozone/ozone_sidebar.c b/menu/drivers/ozone/ozone_sidebar.c index a5933cb1b6..6c11b28a98 100644 --- a/menu/drivers/ozone/ozone_sidebar.c +++ b/menu/drivers/ozone/ozone_sidebar.c @@ -185,6 +185,8 @@ void ozone_draw_sidebar( unsigned selection_y = 0; unsigned selection_old_y = 0; unsigned horizontal_list_size = 0; + gfx_display_t *p_disp = disp_get_ptr(); + gfx_display_ctx_driver_t *dispctx = p_disp->dispctx; if (!ozone->draw_sidebar) return; @@ -310,7 +312,8 @@ void ozone_draw_sidebar( /* Menu tabs */ y = ozone->dimensions.header_height + ozone->dimensions.spacer_1px + ozone->dimensions.sidebar_padding_vertical; - gfx_display_blend_begin(userdata); + if (dispctx && dispctx->blend_begin) + dispctx->blend_begin(userdata); for (i = 0; i < (unsigned)(ozone->system_tab_end+1); i++) { @@ -364,7 +367,8 @@ void ozone_draw_sidebar( y += ozone->dimensions.sidebar_entry_height + ozone->dimensions.sidebar_entry_padding_vertical; } - gfx_display_blend_end(userdata); + if (dispctx && dispctx->blend_end) + dispctx->blend_end(userdata); /* Console tabs */ if (horizontal_list_size > 0) @@ -383,7 +387,8 @@ void ozone_draw_sidebar( y += ozone->dimensions.sidebar_entry_padding_vertical + ozone->dimensions.spacer_1px; - gfx_display_blend_begin(userdata); + if (dispctx && dispctx->blend_begin) + dispctx->blend_begin(userdata); for (i = 0; i < horizontal_list_size; i++) { @@ -463,7 +468,8 @@ console_iterate: y += ozone->dimensions.sidebar_entry_height + ozone->dimensions.sidebar_entry_padding_vertical; } - gfx_display_blend_end(userdata); + if (dispctx && dispctx->blend_end) + dispctx->blend_end(userdata); } ozone_font_flush(video_width, video_height, &ozone->fonts.sidebar);