From 2a3bd8b8d0b99316e18f5685767d76afb788a6d5 Mon Sep 17 00:00:00 2001 From: ImJezze Date: Sat, 7 Nov 2015 12:03:13 +0100 Subject: [PATCH] Cleanup - removed duplicate prescale fields - made visibility of HLSL options depending on screen type - disabled scanlines for LCD screen type --- hlsl/post.fx | 5 +- src/osd/modules/render/d3d/d3dhlsl.c | 206 ++++++++++++++------------- src/osd/modules/render/d3d/d3dhlsl.h | 13 +- 3 files changed, 116 insertions(+), 108 deletions(-) diff --git a/hlsl/post.fx b/hlsl/post.fx index 70b374179c4..b457b9687e2 100644 --- a/hlsl/post.fx +++ b/hlsl/post.fx @@ -87,6 +87,7 @@ uniform bool RotationSwapXY = false; // swapped default screen orientation due t uniform bool PrepareBloom = false; // disables some effects for rendering bloom textures uniform bool PrepareVector = false; +uniform bool PrepareRaster = false; VS_OUTPUT vs_main(VS_INPUT Input) { @@ -204,8 +205,8 @@ float4 ps_main(PS_INPUT Input) : COLOR // Scanline Simulation (may not affect bloom) if (!PrepareBloom) { - // Scanline Simulation (disabled for vector) - if (!PrepareVector) + // Scanline Simulation (only for raster screen) + if (PrepareRaster) { float InnerSine = BaseCoord.y * ScanlineScale * SourceDims.y; float ScanJitter = ScanlineOffset * SourceDims.y; diff --git a/src/osd/modules/render/d3d/d3dhlsl.c b/src/osd/modules/render/d3d/d3dhlsl.c index 00603e45e82..35922e8ec35 100644 --- a/src/osd/modules/render/d3d/d3dhlsl.c +++ b/src/osd/modules/render/d3d/d3dhlsl.c @@ -182,10 +182,8 @@ shaders::shaders() { master_enable = false; vector_enable = true; - prescale_size_x = 1; - prescale_size_y = 1; - prescale_force_x = 0; - prescale_force_y = 0; + hlsl_prescale_x = 1; + hlsl_prescale_x = 1; preset = -1; shadow_texture = NULL; options = NULL; @@ -754,29 +752,25 @@ void shaders::init(base *d3dintf, running_machine *machine, d3d::renderer *rende this->machine = machine; this->d3d = renderer; - master_enable = downcast(machine->options()).d3d_hlsl_enable(); - prescale_size_x = 1; - prescale_size_y = 1; - preset = downcast(machine->options()).d3d_hlsl_preset(); + windows_options &winoptions = downcast(machine->options()); + + master_enable = winoptions.d3d_hlsl_enable(); + hlsl_prescale_x = winoptions.d3d_hlsl_prescale_x(); + hlsl_prescale_y = winoptions.d3d_hlsl_prescale_y(); + snap_width = winoptions.d3d_snap_width(); + snap_height = winoptions.d3d_snap_height(); + preset = winoptions.d3d_hlsl_preset(); + if (preset < -1 || preset > 3) { preset = -1; } - snap_width = downcast(machine->options()).d3d_snap_width(); - snap_height = downcast(machine->options()).d3d_snap_height(); - prescale_force_x = 0; - prescale_force_y = 0; - - windows_options &winoptions = downcast(machine->options()); - options = (hlsl_options*)global_alloc_clear(hlsl_options); - options->params_dirty = true; - strcpy(options->shadow_mask_texture, downcast(machine->options()).screen_shadow_mask_texture()); // unsafe + // unsafe + strcpy(options->shadow_mask_texture, winoptions.screen_shadow_mask_texture()); - prescale_force_x = winoptions.d3d_hlsl_prescale_x(); - prescale_force_y = winoptions.d3d_hlsl_prescale_y(); if (preset == -1) { options->shadow_mask_alpha = winoptions.screen_shadow_mask_alpha(); @@ -1456,7 +1450,9 @@ int shaders::post_pass(render_target *rt, int source_index, poly_info *poly, int texture_info *texture = poly->get_texture(); bool prepare_vector = - PRIMFLAG_GET_VECTORBUF(poly->get_flags()) && vector_enable; + (machine->first_screen()->screen_type() & SCREEN_TYPE_VECTOR) == SCREEN_TYPE_VECTOR; + bool prepare_raster = + (machine->first_screen()->screen_type() & SCREEN_TYPE_RASTER) == SCREEN_TYPE_RASTER; bool orientation_swap_xy = (d3d->window().machine().system().flags & ORIENTATION_SWAP_XY) == ORIENTATION_SWAP_XY; bool rotation_swap_xy = @@ -1481,6 +1477,7 @@ int shaders::post_pass(render_target *rt, int source_index, poly_info *poly, int curr_effect->set_int("RotationType", rotation_type); // backward compatibility curr_effect->set_bool("PrepareBloom", prepare_bloom); curr_effect->set_bool("PrepareVector", prepare_vector); + curr_effect->set_bool("PrepareRaster", prepare_raster); next_index = rt->next_index(next_index); blit(prepare_bloom ? rt->native_target[next_index] : rt->prescale_target[next_index], true, poly->get_type(), vertnum, poly->get_count()); @@ -1493,7 +1490,7 @@ int shaders::downsample_pass(render_target *rt, int source_index, poly_info *pol int next_index = source_index; bool prepare_vector = - PRIMFLAG_GET_VECTORBUF(poly->get_flags()) && vector_enable; + (machine->first_screen()->screen_type() & SCREEN_TYPE_VECTOR) == SCREEN_TYPE_VECTOR; float bloom_rescale = options->bloom_scale; // skip downsample if no influencing settings @@ -1697,7 +1694,8 @@ int shaders::screen_pass(render_target *rt, int source_index, poly_info *poly, i { int next_index = source_index; - bool prepare_vector = PRIMFLAG_GET_VECTORBUF(poly->get_flags()) && vector_enable; + bool prepare_vector = + (machine->first_screen()->screen_type() & SCREEN_TYPE_VECTOR) == SCREEN_TYPE_VECTOR; curr_effect = default_effect; curr_effect->update_uniforms(); @@ -2058,9 +2056,6 @@ bool shaders::register_texture(texture_info *texture) enumerate_screens(); - hlsl_prescale_x = prescale_force_x; - hlsl_prescale_y = prescale_force_y; - // Find the nearest prescale factor that is over our screen size if (hlsl_prescale_x == 0) { @@ -2776,81 +2771,81 @@ static INT32 slider_bloom_lvl10_scale(running_machine &machine, void *arg, std:: shaders::slider_desc shaders::s_sliders[] = { - { "Shadow Mask Darkness", 0, 0, 100, 1, slider_shadow_mask_alpha }, - { "Shadow Mask X Count", 1, 6, 1024, 1, slider_shadow_mask_x_count }, - { "Shadow Mask Y Count", 1, 6, 1024, 1, slider_shadow_mask_y_count }, - { "Shadow Mask Pixel Count X", 1, 6, 64, 1, slider_shadow_mask_usize }, - { "Shadow Mask Pixel Count Y", 1, 6, 64, 1, slider_shadow_mask_vsize }, - { "Shadow Mask Offset X", -100, 0, 100, 1, slider_shadow_mask_uoffset }, - { "Shadow Mask Offset Y", -100, 0, 100, 1, slider_shadow_mask_voffset }, - { "Screen Curvature", 0, 0, 100, 1, slider_curvature }, - { "Screen Round Corner", 0, 0, 100, 1, slider_round_corner }, - { "Screen Smooth Border", 0, 0, 100, 1, slider_smooth_border }, - { "Screen Reflection", 0, 0, 100, 1, slider_reflection }, - { "Image Vignetting", 0, 0, 100, 1, slider_vignetting }, - { "Scanline Darkness", 0, 100, 100, 1, slider_scanline_alpha }, - { "Scanline Screen Height", 1, 20, 80, 1, slider_scanline_scale }, - { "Scanline Indiv. Height", 1, 20, 80, 1, slider_scanline_height }, - { "Scanline Brightness", 0, 20, 40, 1, slider_scanline_bright_scale }, - { "Scanline Brightness Overdrive", 0, 0, 20, 1, slider_scanline_bright_offset }, - { "Scanline Jitter", 0, 0, 40, 1, slider_scanline_offset }, - { "Defocus X", 0, 0, 64, 1, slider_defocus_x }, - { "Defocus Y", 0, 0, 64, 1, slider_defocus_y }, - { "Red Position Offset X", -1500, 3, 1500, 1, slider_red_converge_x }, - { "Red Position Offset Y", -1500, 0, 1500, 1, slider_red_converge_y }, - { "Green Position Offset X", -1500, 0, 1500, 1, slider_green_converge_x }, - { "Green Position Offset Y", -1500, 3, 1500, 1, slider_green_converge_y }, - { "Blue Position Offset X", -1500, 3, 1500, 1, slider_blue_converge_x }, - { "Blue Position Offset Y", -1500, 3, 1500, 1, slider_blue_converge_y }, - { "Red Convergence X", -1500, 0, 1500, 1, slider_red_radial_converge_x }, - { "Red Convergence Y", -1500, 0, 1500, 1, slider_red_radial_converge_y }, - { "Green Convergence X", -1500, 0, 1500, 1, slider_green_radial_converge_x }, - { "Green Convergence Y", -1500, 0, 1500, 1, slider_green_radial_converge_y }, - { "Blue Convergence X", -1500, 0, 1500, 1, slider_blue_radial_converge_x }, - { "Blue Convergence Y", -1500, 0, 1500, 1, slider_blue_radial_converge_y }, - { "Red Output from Red Input", -400, 0, 400, 5, slider_red_from_r }, - { "Red Output from Green Input", -400, 0, 400, 5, slider_red_from_g }, - { "Red Output from Blue Input", -400, 0, 400, 5, slider_red_from_b }, - { "Green Output from Red Input", -400, 0, 400, 5, slider_green_from_r }, - { "Green Output from Green Input", -400, 0, 400, 5, slider_green_from_g }, - { "Green Output from Blue Input", -400, 0, 400, 5, slider_green_from_b }, - { "Blue Output from Red Input", -400, 0, 400, 5, slider_blue_from_r }, - { "Blue Output from Green Input", -400, 0, 400, 5, slider_blue_from_g }, - { "Blue Output from Blue Input", -400, 0, 400, 5, slider_blue_from_b }, - { "Saturation", 0, 140, 400, 1, slider_saturation }, - { "Red DC Offset", -100, 0, 100, 1, slider_red_offset }, - { "Green DC Offset", -100, 0, 100, 1, slider_green_offset }, - { "Blue DC Offset", -100, 0, 100, 1, slider_blue_offset }, - { "Red Scale", -200, 95, 200, 1, slider_red_scale }, - { "Green Scale", -200, 95, 200, 1, slider_green_scale }, - { "Blue Scale", -200, 95, 200, 1, slider_blue_scale }, - { "Red Gamma", -80, 16, 80, 1, slider_red_power }, - { "Green Gamma", -80, 16, 80, 1, slider_green_power }, - { "Blue Gamma", -80, 16, 80, 1, slider_blue_power }, - { "Red Floor", 0, 5, 100, 1, slider_red_floor }, - { "Green Floor", 0, 5, 100, 1, slider_green_floor }, - { "Blue Floor", 0, 5, 100, 1, slider_blue_floor }, - { "Red Phosphor Life", 0, 40, 100, 1, slider_red_phosphor_life }, - { "Green Phosphor Life", 0, 40, 100, 1, slider_green_phosphor_life }, - { "Blue Phosphor Life", 0, 40, 100, 1, slider_blue_phosphor_life }, - { "Vector Length Attenuation", 0, 80, 100, 1, slider_vector_attenuation }, - { "Vector Attenuation Length Limit", 1, 500, 1000, 1, slider_vector_length_max }, - { "Bloom Scale", 0, 250, 2000, 5, slider_bloom_scale }, - { "Bloom Red Overdrive", 0, 250, 2000, 5, slider_bloom_red_overdrive }, - { "Bloom Green Overdrive", 0, 250, 2000, 5, slider_bloom_green_overdrive }, - { "Bloom Blue Overdrive", 0, 250, 2000, 5, slider_bloom_blue_overdrive }, - { "Bloom Level 0 Scale", 0, 100, 100, 1, slider_bloom_lvl0_scale }, - { "Bloom Level 1 Scale", 0, 21, 100, 1, slider_bloom_lvl1_scale }, - { "Bloom Level 2 Scale", 0, 19, 100, 1, slider_bloom_lvl2_scale }, - { "Bloom Level 3 Scale", 0, 17, 100, 1, slider_bloom_lvl3_scale }, - { "Bloom Level 4 Scale", 0, 15, 100, 1, slider_bloom_lvl4_scale }, - { "Bloom Level 5 Scale", 0, 14, 100, 1, slider_bloom_lvl5_scale }, - { "Bloom Level 6 Scale", 0, 13, 100, 1, slider_bloom_lvl6_scale }, - { "Bloom Level 7 Scale", 0, 12, 100, 1, slider_bloom_lvl7_scale }, - { "Bloom Level 8 Scale", 0, 11, 100, 1, slider_bloom_lvl8_scale }, - { "Bloom Level 9 Scale", 0, 10, 100, 1, slider_bloom_lvl9_scale }, - { "Bloom Level 10 Scale", 0, 9, 100, 1, slider_bloom_lvl10_scale }, - { NULL, 0, 0, 0, 0, NULL }, + { "Vector Length Attenuation", 0, 80, 100, 1, 2, slider_vector_attenuation }, + { "Vector Attenuation Length Limit", 1, 500, 1000, 1, 2, slider_vector_length_max }, + { "Shadow Mask Darkness", 0, 0, 100, 1, 7, slider_shadow_mask_alpha }, + { "Shadow Mask X Count", 1, 6, 1024, 1, 7, slider_shadow_mask_x_count }, + { "Shadow Mask Y Count", 1, 6, 1024, 1, 7, slider_shadow_mask_y_count }, + { "Shadow Mask Pixel Count X", 1, 6, 64, 1, 7, slider_shadow_mask_usize }, + { "Shadow Mask Pixel Count Y", 1, 6, 64, 1, 7, slider_shadow_mask_vsize }, + { "Shadow Mask Offset X", -100, 0, 100, 1, 7, slider_shadow_mask_uoffset }, + { "Shadow Mask Offset Y", -100, 0, 100, 1, 7, slider_shadow_mask_voffset }, + { "Screen Curvature", 0, 0, 100, 1, 7, slider_curvature }, + { "Screen Round Corner", 0, 0, 100, 1, 7, slider_round_corner }, + { "Screen Smooth Border", 0, 0, 100, 1, 7, slider_smooth_border }, + { "Screen Reflection", 0, 0, 100, 1, 7, slider_reflection }, + { "Image Vignetting", 0, 0, 100, 1, 7, slider_vignetting }, + { "Scanline Darkness", 0, 100, 100, 1, 1, slider_scanline_alpha }, + { "Scanline Screen Height", 1, 20, 80, 1, 1, slider_scanline_scale }, + { "Scanline Indiv. Height", 1, 20, 80, 1, 1, slider_scanline_height }, + { "Scanline Brightness", 0, 20, 40, 1, 1, slider_scanline_bright_scale }, + { "Scanline Brightness Overdrive", 0, 0, 20, 1, 1, slider_scanline_bright_offset }, + { "Scanline Jitter", 0, 0, 40, 1, 1, slider_scanline_offset }, + { "Defocus X", 0, 0, 64, 1, 3, slider_defocus_x }, + { "Defocus Y", 0, 0, 64, 1, 3, slider_defocus_y }, + { "Red Position Offset X", -1500, 3, 1500, 1, 3, slider_red_converge_x }, + { "Red Position Offset Y", -1500, 0, 1500, 1, 3, slider_red_converge_y }, + { "Green Position Offset X", -1500, 0, 1500, 1, 3, slider_green_converge_x }, + { "Green Position Offset Y", -1500, 3, 1500, 1, 3, slider_green_converge_y }, + { "Blue Position Offset X", -1500, 3, 1500, 1, 3, slider_blue_converge_x }, + { "Blue Position Offset Y", -1500, 3, 1500, 1, 3, slider_blue_converge_y }, + { "Red Convergence X", -1500, 0, 1500, 1, 3, slider_red_radial_converge_x }, + { "Red Convergence Y", -1500, 0, 1500, 1, 3, slider_red_radial_converge_y }, + { "Green Convergence X", -1500, 0, 1500, 1, 3, slider_green_radial_converge_x }, + { "Green Convergence Y", -1500, 0, 1500, 1, 3, slider_green_radial_converge_y }, + { "Blue Convergence X", -1500, 0, 1500, 1, 3, slider_blue_radial_converge_x }, + { "Blue Convergence Y", -1500, 0, 1500, 1, 3, slider_blue_radial_converge_y }, + { "Red Output from Red Input", -400, 0, 400, 5, 7, slider_red_from_r }, + { "Red Output from Green Input", -400, 0, 400, 5, 7, slider_red_from_g }, + { "Red Output from Blue Input", -400, 0, 400, 5, 7, slider_red_from_b }, + { "Green Output from Red Input", -400, 0, 400, 5, 7, slider_green_from_r }, + { "Green Output from Green Input", -400, 0, 400, 5, 7, slider_green_from_g }, + { "Green Output from Blue Input", -400, 0, 400, 5, 7, slider_green_from_b }, + { "Blue Output from Red Input", -400, 0, 400, 5, 7, slider_blue_from_r }, + { "Blue Output from Green Input", -400, 0, 400, 5, 7, slider_blue_from_g }, + { "Blue Output from Blue Input", -400, 0, 400, 5, 7, slider_blue_from_b }, + { "Saturation", 0, 140, 400, 1, 7, slider_saturation }, + { "Red DC Offset", -100, 0, 100, 1, 7, slider_red_offset }, + { "Green DC Offset", -100, 0, 100, 1, 7, slider_green_offset }, + { "Blue DC Offset", -100, 0, 100, 1, 7, slider_blue_offset }, + { "Red Scale", -200, 95, 200, 1, 7, slider_red_scale }, + { "Green Scale", -200, 95, 200, 1, 7, slider_green_scale }, + { "Blue Scale", -200, 95, 200, 1, 7, slider_blue_scale }, + { "Red Gamma", -80, 16, 80, 1, 7, slider_red_power }, + { "Green Gamma", -80, 16, 80, 1, 7, slider_green_power }, + { "Blue Gamma", -80, 16, 80, 1, 7, slider_blue_power }, + { "Red Floor", 0, 5, 100, 1, 7, slider_red_floor }, + { "Green Floor", 0, 5, 100, 1, 7, slider_green_floor }, + { "Blue Floor", 0, 5, 100, 1, 7, slider_blue_floor }, + { "Red Phosphor Life", 0, 40, 100, 1, 7, slider_red_phosphor_life }, + { "Green Phosphor Life", 0, 40, 100, 1, 7, slider_green_phosphor_life }, + { "Blue Phosphor Life", 0, 40, 100, 1, 7, slider_blue_phosphor_life }, + { "Bloom Scale", 0, 250, 2000, 5, 7, slider_bloom_scale }, + { "Bloom Red Overdrive", 0, 250, 2000, 5, 7, slider_bloom_red_overdrive }, + { "Bloom Green Overdrive", 0, 250, 2000, 5, 7, slider_bloom_green_overdrive }, + { "Bloom Blue Overdrive", 0, 250, 2000, 5, 7, slider_bloom_blue_overdrive }, + { "Bloom Level 0 Scale", 0, 100, 100, 1, 7, slider_bloom_lvl0_scale }, + { "Bloom Level 1 Scale", 0, 21, 100, 1, 7, slider_bloom_lvl1_scale }, + { "Bloom Level 2 Scale", 0, 19, 100, 1, 7, slider_bloom_lvl2_scale }, + { "Bloom Level 3 Scale", 0, 17, 100, 1, 7, slider_bloom_lvl3_scale }, + { "Bloom Level 4 Scale", 0, 15, 100, 1, 7, slider_bloom_lvl4_scale }, + { "Bloom Level 5 Scale", 0, 14, 100, 1, 7, slider_bloom_lvl5_scale }, + { "Bloom Level 6 Scale", 0, 13, 100, 1, 7, slider_bloom_lvl6_scale }, + { "Bloom Level 7 Scale", 0, 12, 100, 1, 7, slider_bloom_lvl7_scale }, + { "Bloom Level 8 Scale", 0, 11, 100, 1, 7, slider_bloom_lvl8_scale }, + { "Bloom Level 9 Scale", 0, 10, 100, 1, 7, slider_bloom_lvl9_scale }, + { "Bloom Level 10 Scale", 0, 9, 100, 1, 7, slider_bloom_lvl10_scale }, + { NULL, 0, 0, 0, 0, 0, NULL }, }; slider_state *shaders::init_slider_list() @@ -2867,8 +2862,15 @@ slider_state *shaders::init_slider_list() for (int index = 0; s_sliders[index].name != NULL; index++) { slider_desc *slider = &s_sliders[index]; - *tailptr = slider_alloc(*machine, slider->name, slider->minval, slider->defval, slider->maxval, slider->step, slider->adjustor, (void*)options); - tailptr = &(*tailptr)->next; + + int screen_type = machine->first_screen()->screen_type(); + if ((screen_type == SCREEN_TYPE_VECTOR && (slider->screen_type & SLIDER_SCREEN_TYPE_VECTOR) == SLIDER_SCREEN_TYPE_VECTOR) || + (screen_type == SCREEN_TYPE_RASTER && (slider->screen_type & SLIDER_SCREEN_TYPE_RASTER) == SLIDER_SCREEN_TYPE_RASTER) || + (screen_type == SCREEN_TYPE_LCD && (slider->screen_type & SLIDER_SCREEN_TYPE_LCD) == SLIDER_SCREEN_TYPE_LCD)) + { + *tailptr = slider_alloc(*machine, slider->name, slider->minval, slider->defval, slider->maxval, slider->step, slider->adjustor, (void*)options); + tailptr = &(*tailptr)->next; + } } return listhead; diff --git a/src/osd/modules/render/d3d/d3dhlsl.h b/src/osd/modules/render/d3d/d3dhlsl.h index 6c9c14faaf5..2f514e84cf0 100644 --- a/src/osd/modules/render/d3d/d3dhlsl.h +++ b/src/osd/modules/render/d3d/d3dhlsl.h @@ -307,6 +307,14 @@ public: // slider-related functions slider_state *init_slider_list(); + enum slider_screen_type + { + SLIDER_SCREEN_TYPE_NONE = 0, + SLIDER_SCREEN_TYPE_RASTER = 1, + SLIDER_SCREEN_TYPE_VECTOR = 2, + SLIDER_SCREEN_TYPE_LCD = 4 + }; + struct slider_desc { const char * name; @@ -314,6 +322,7 @@ public: int defval; int maxval; int step; + int screen_type; INT32(*adjustor)(running_machine &, void *, std::string *, INT32); }; @@ -360,10 +369,6 @@ private: int lastidx; // index of the last-encountered target bool write_ini; // enable external ini saving bool read_ini; // enable external ini loading - int prescale_force_x; // prescale force x - int prescale_force_y; // prescale force y - int prescale_size_x; // prescale size x - int prescale_size_y; // prescale size y int hlsl_prescale_x; // hlsl prescale x int hlsl_prescale_y; // hlsl prescale y float bloom_dims[11][2]; // bloom texture dimensions