mirror of
https://github.com/godotengine/godot.git
synced 2024-11-22 12:12:28 +00:00
Remove 16× MSAA support due to driver bugs and low performance
In the `master` branch, 16× MSAA caused the entire system to freeze on NVIDIA GPUs. This is likely caused by graphics drivers not actually implementing 16× MSAA, but combining 8× MSAA with 2× SSAA instead. On top of that, modern shader complexity makes 16× MSAA very difficult to use while keeping a good framerate. 8× MSAA is hard enough to use as it is.
This commit is contained in:
parent
24f562bd1e
commit
7192852da3
@ -3788,21 +3788,18 @@
|
||||
<constant name="VIEWPORT_SDF_SCALE_MAX" value="3" enum="ViewportSDFScale">
|
||||
</constant>
|
||||
<constant name="VIEWPORT_MSAA_DISABLED" value="0" enum="ViewportMSAA">
|
||||
Multisample antialiasing is disabled.
|
||||
Multisample antialiasing for 3D is disabled. This is the default value, and also the fastest setting.
|
||||
</constant>
|
||||
<constant name="VIEWPORT_MSAA_2X" value="1" enum="ViewportMSAA">
|
||||
Multisample antialiasing uses 2 samples per pixel.
|
||||
Multisample antialiasing uses 2 samples per pixel for 3D. This has a moderate impact on performance.
|
||||
</constant>
|
||||
<constant name="VIEWPORT_MSAA_4X" value="2" enum="ViewportMSAA">
|
||||
Multisample antialiasing uses 4 samples per pixel.
|
||||
Multisample antialiasing uses 4 samples per pixel for 3D. This has a high impact on performance.
|
||||
</constant>
|
||||
<constant name="VIEWPORT_MSAA_8X" value="3" enum="ViewportMSAA">
|
||||
Multisample antialiasing uses 8 samples per pixel.
|
||||
Multisample antialiasing uses 8 samples per pixel for 3D. This has a very high impact on performance. Likely unsupported on low-end and older hardware.
|
||||
</constant>
|
||||
<constant name="VIEWPORT_MSAA_16X" value="4" enum="ViewportMSAA">
|
||||
Multisample antialiasing uses 16 samples per pixel.
|
||||
</constant>
|
||||
<constant name="VIEWPORT_MSAA_MAX" value="5" enum="ViewportMSAA">
|
||||
<constant name="VIEWPORT_MSAA_MAX" value="4" enum="ViewportMSAA">
|
||||
</constant>
|
||||
<constant name="VIEWPORT_SCREEN_SPACE_AA_DISABLED" value="0" enum="ViewportScreenSpaceAA">
|
||||
</constant>
|
||||
|
@ -307,10 +307,7 @@
|
||||
<constant name="MSAA_8X" value="3" enum="MSAA">
|
||||
Use 8× Multisample Antialiasing. This has a very high performance cost. The difference between 4× and 8× MSAA may not always be visible in real gameplay conditions. Likely unsupported on low-end and older hardware.
|
||||
</constant>
|
||||
<constant name="MSAA_16X" value="4" enum="MSAA">
|
||||
Use 16× Multisample Antialiasing. This has a very high performance cost. The difference between 8× and 16× MSAA may not always be visible in real gameplay conditions. Likely unsupported on medium and low-end hardware.
|
||||
</constant>
|
||||
<constant name="MSAA_MAX" value="5" enum="MSAA">
|
||||
<constant name="MSAA_MAX" value="4" enum="MSAA">
|
||||
Represents the size of the [enum MSAA] enum.
|
||||
</constant>
|
||||
<constant name="SCREEN_SPACE_AA_DISABLED" value="0" enum="ScreenSpaceAA">
|
||||
|
@ -1346,7 +1346,7 @@ SceneTree::SceneTree() {
|
||||
current_scene = nullptr;
|
||||
|
||||
const int msaa_mode = GLOBAL_DEF("rendering/anti_aliasing/quality/msaa", 0);
|
||||
ProjectSettings::get_singleton()->set_custom_property_info("rendering/anti_aliasing/quality/msaa", PropertyInfo(Variant::INT, "rendering/anti_aliasing/quality/msaa", PROPERTY_HINT_ENUM, String::utf8("Disabled (Fastest),2× (Fast),4× (Average),8× (Slow),16× (Slower)")));
|
||||
ProjectSettings::get_singleton()->set_custom_property_info("rendering/anti_aliasing/quality/msaa", PropertyInfo(Variant::INT, "rendering/anti_aliasing/quality/msaa", PROPERTY_HINT_ENUM, String::utf8("Disabled (Fastest),2× (Average),4× (Slow),8× (Slowest)")));
|
||||
root->set_msaa(Viewport::MSAA(msaa_mode));
|
||||
|
||||
const int ssaa_mode = GLOBAL_DEF("rendering/anti_aliasing/quality/screen_space_aa", 0);
|
||||
|
@ -3587,7 +3587,7 @@ void Viewport::_bind_methods() {
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "snap_2d_transforms_to_pixel"), "set_snap_2d_transforms_to_pixel", "is_snap_2d_transforms_to_pixel_enabled");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "snap_2d_vertices_to_pixel"), "set_snap_2d_vertices_to_pixel", "is_snap_2d_vertices_to_pixel_enabled");
|
||||
ADD_GROUP("Rendering", "");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "msaa", PROPERTY_HINT_ENUM, String::utf8("Disabled (Fastest),2× (Fast),4× (Average),8× (Slow),16× (Slower)")), "set_msaa", "get_msaa");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "msaa", PROPERTY_HINT_ENUM, String::utf8("Disabled (Fastest),2× (Average),4× (Slow),8× (Slowest)")), "set_msaa", "get_msaa");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "screen_space_aa", PROPERTY_HINT_ENUM, "Disabled (Fastest),FXAA (Fast)"), "set_screen_space_aa", "get_screen_space_aa");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "use_debanding"), "set_use_debanding", "is_using_debanding");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "use_occlusion_culling"), "set_use_occlusion_culling", "is_using_occlusion_culling");
|
||||
@ -3633,7 +3633,6 @@ void Viewport::_bind_methods() {
|
||||
BIND_ENUM_CONSTANT(MSAA_2X);
|
||||
BIND_ENUM_CONSTANT(MSAA_4X);
|
||||
BIND_ENUM_CONSTANT(MSAA_8X);
|
||||
BIND_ENUM_CONSTANT(MSAA_16X);
|
||||
BIND_ENUM_CONSTANT(MSAA_MAX);
|
||||
|
||||
BIND_ENUM_CONSTANT(SCREEN_SPACE_AA_DISABLED);
|
||||
|
@ -104,7 +104,7 @@ public:
|
||||
MSAA_2X,
|
||||
MSAA_4X,
|
||||
MSAA_8X,
|
||||
MSAA_16X,
|
||||
// 16x MSAA is not supported due to its high cost and driver bugs.
|
||||
MSAA_MAX
|
||||
};
|
||||
|
||||
|
@ -223,7 +223,6 @@ void RenderForwardClustered::RenderBufferDataForwardClustered::configure(RID p_c
|
||||
RD::TEXTURE_SAMPLES_2,
|
||||
RD::TEXTURE_SAMPLES_4,
|
||||
RD::TEXTURE_SAMPLES_8,
|
||||
RD::TEXTURE_SAMPLES_16
|
||||
};
|
||||
|
||||
texture_samples = ts[p_msaa];
|
||||
@ -1163,7 +1162,7 @@ void RenderForwardClustered::_render_scene(RenderDataRD *p_render_data, const Co
|
||||
render_buffer = (RenderBufferDataForwardClustered *)render_buffers_get_data(p_render_data->render_buffers);
|
||||
}
|
||||
RendererSceneEnvironmentRD *env = get_environment(p_render_data->environment);
|
||||
static const int texture_multisamples[RS::VIEWPORT_MSAA_MAX] = { 1, 2, 4, 8, 16 };
|
||||
static const int texture_multisamples[RS::VIEWPORT_MSAA_MAX] = { 1, 2, 4, 8 };
|
||||
|
||||
//first of all, make a new render pass
|
||||
//fill up ubo
|
||||
|
@ -158,7 +158,6 @@ void RenderForwardMobile::RenderBufferDataForwardMobile::configure(RID p_color_b
|
||||
RD::TEXTURE_SAMPLES_2,
|
||||
RD::TEXTURE_SAMPLES_4,
|
||||
RD::TEXTURE_SAMPLES_8,
|
||||
RD::TEXTURE_SAMPLES_16
|
||||
};
|
||||
|
||||
texture_samples = ts[p_msaa];
|
||||
|
@ -2210,7 +2210,6 @@ void RenderingServer::_bind_methods() {
|
||||
BIND_ENUM_CONSTANT(VIEWPORT_MSAA_2X);
|
||||
BIND_ENUM_CONSTANT(VIEWPORT_MSAA_4X);
|
||||
BIND_ENUM_CONSTANT(VIEWPORT_MSAA_8X);
|
||||
BIND_ENUM_CONSTANT(VIEWPORT_MSAA_16X);
|
||||
BIND_ENUM_CONSTANT(VIEWPORT_MSAA_MAX);
|
||||
|
||||
BIND_ENUM_CONSTANT(VIEWPORT_SCREEN_SPACE_AA_DISABLED);
|
||||
|
@ -826,7 +826,6 @@ public:
|
||||
VIEWPORT_MSAA_2X,
|
||||
VIEWPORT_MSAA_4X,
|
||||
VIEWPORT_MSAA_8X,
|
||||
VIEWPORT_MSAA_16X,
|
||||
VIEWPORT_MSAA_MAX,
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user