Polish rendering driver refactor further
Mainly: - Make `max_descriptors_per_pool` project setting Vulkan-specific. - Use a common, render driver agnostic magic FourCC for shader binary data. - Downgrade spirv_reflect to Vulkan-only dependency. - Add a `RENDER_DRIVER_*` macro to GLSL shader code for per-driver customizations.
This commit is contained in:
parent
0c23a2cfe3
commit
24ff292999
|
@ -182,8 +182,8 @@ opts.Add(BoolVariable("deprecated", "Enable compatibility code for deprecated an
|
||||||
opts.Add(EnumVariable("float", "Floating-point precision", "32", ("32", "64")))
|
opts.Add(EnumVariable("float", "Floating-point precision", "32", ("32", "64")))
|
||||||
opts.Add(BoolVariable("minizip", "Enable ZIP archive support using minizip", True))
|
opts.Add(BoolVariable("minizip", "Enable ZIP archive support using minizip", True))
|
||||||
opts.Add(BoolVariable("xaudio2", "Enable the XAudio2 audio driver", False))
|
opts.Add(BoolVariable("xaudio2", "Enable the XAudio2 audio driver", False))
|
||||||
opts.Add(BoolVariable("vulkan", "Enable the vulkan video driver", True))
|
opts.Add(BoolVariable("vulkan", "Enable the vulkan rendering driver", True))
|
||||||
opts.Add(BoolVariable("opengl3", "Enable the OpenGL/GLES3 video driver", True))
|
opts.Add(BoolVariable("opengl3", "Enable the OpenGL/GLES3 rendering driver", True))
|
||||||
opts.Add(BoolVariable("openxr", "Enable the OpenXR driver", True))
|
opts.Add(BoolVariable("openxr", "Enable the OpenXR driver", True))
|
||||||
opts.Add(BoolVariable("use_volk", "Use the volk library to load the Vulkan loader dynamically", True))
|
opts.Add(BoolVariable("use_volk", "Use the volk library to load the Vulkan loader dynamically", True))
|
||||||
opts.Add("custom_modules", "A list of comma-separated directory paths containing custom modules to build.", "")
|
opts.Add("custom_modules", "A list of comma-separated directory paths containing custom modules to build.", "")
|
||||||
|
|
|
@ -2097,8 +2097,6 @@
|
||||||
<member name="rendering/renderer/rendering_method.web" type="String" setter="" getter="" default=""gl_compatibility"">
|
<member name="rendering/renderer/rendering_method.web" type="String" setter="" getter="" default=""gl_compatibility"">
|
||||||
Override for [member rendering/renderer/rendering_method] on web.
|
Override for [member rendering/renderer/rendering_method] on web.
|
||||||
</member>
|
</member>
|
||||||
<member name="rendering/rendering_device/descriptor_pools/max_descriptors_per_pool" type="int" setter="" getter="" default="64">
|
|
||||||
</member>
|
|
||||||
<member name="rendering/rendering_device/driver" type="String" setter="" getter="" default=""vulkan"">
|
<member name="rendering/rendering_device/driver" type="String" setter="" getter="" default=""vulkan"">
|
||||||
Sets the driver to be used by the renderer when using a RenderingDevice-based renderer like the clustered renderer or the mobile renderer. This property can not be edited directly, instead, set the driver using the platform-specific overrides.
|
Sets the driver to be used by the renderer when using a RenderingDevice-based renderer like the clustered renderer or the mobile renderer. This property can not be edited directly, instead, set the driver using the platform-specific overrides.
|
||||||
</member>
|
</member>
|
||||||
|
@ -2123,6 +2121,8 @@
|
||||||
</member>
|
</member>
|
||||||
<member name="rendering/rendering_device/staging_buffer/texture_upload_region_size_px" type="int" setter="" getter="" default="64">
|
<member name="rendering/rendering_device/staging_buffer/texture_upload_region_size_px" type="int" setter="" getter="" default="64">
|
||||||
</member>
|
</member>
|
||||||
|
<member name="rendering/rendering_device/vulkan/max_descriptors_per_pool" type="int" setter="" getter="" default="64">
|
||||||
|
</member>
|
||||||
<member name="rendering/scaling_3d/fsr_sharpness" type="float" setter="" getter="" default="0.2">
|
<member name="rendering/scaling_3d/fsr_sharpness" type="float" setter="" getter="" default="0.2">
|
||||||
Determines how sharp the upscaled image will be when using the FSR upscaling mode. Sharpness halves with every whole number. Values go from 0.0 (sharpest) to 2.0. Values above 2.0 won't make a visible difference.
|
Determines how sharp the upscaled image will be when using the FSR upscaling mode. Sharpness halves with every whole number. Values go from 0.0 (sharpest) to 2.0. Values above 2.0 won't make a visible difference.
|
||||||
</member>
|
</member>
|
||||||
|
|
|
@ -24,6 +24,7 @@ SConscript("winmidi/SCsub")
|
||||||
|
|
||||||
# Graphics drivers
|
# Graphics drivers
|
||||||
if env["vulkan"]:
|
if env["vulkan"]:
|
||||||
|
SConscript("spirv-reflect/SCsub")
|
||||||
SConscript("vulkan/SCsub")
|
SConscript("vulkan/SCsub")
|
||||||
if env["opengl3"]:
|
if env["opengl3"]:
|
||||||
SConscript("gl_context/SCsub")
|
SConscript("gl_context/SCsub")
|
||||||
|
@ -31,7 +32,6 @@ if env["opengl3"]:
|
||||||
|
|
||||||
# Core dependencies
|
# Core dependencies
|
||||||
SConscript("png/SCsub")
|
SConscript("png/SCsub")
|
||||||
SConscript("spirv-reflect/SCsub")
|
|
||||||
|
|
||||||
env.add_source_files(env.drivers_sources, "*.cpp")
|
env.add_source_files(env.drivers_sources, "*.cpp")
|
||||||
|
|
||||||
|
|
|
@ -5172,9 +5172,9 @@ Vector<uint8_t> RenderingDeviceVulkan::shader_compile_binary_from_spirv(const Ve
|
||||||
uint32_t offset = 0;
|
uint32_t offset = 0;
|
||||||
uint8_t *binptr = ret.ptrw();
|
uint8_t *binptr = ret.ptrw();
|
||||||
binptr[0] = 'G';
|
binptr[0] = 'G';
|
||||||
binptr[1] = 'V';
|
binptr[1] = 'S';
|
||||||
binptr[2] = 'B';
|
binptr[2] = 'B';
|
||||||
binptr[3] = 'D'; // Godot vulkan binary data.
|
binptr[3] = 'D'; // Godot Shader Binary Data.
|
||||||
offset += 4;
|
offset += 4;
|
||||||
encode_uint32(SHADER_BINARY_VERSION, binptr + offset);
|
encode_uint32(SHADER_BINARY_VERSION, binptr + offset);
|
||||||
offset += sizeof(uint32_t);
|
offset += sizeof(uint32_t);
|
||||||
|
@ -5235,7 +5235,7 @@ RID RenderingDeviceVulkan::shader_create_from_bytecode(const Vector<uint8_t> &p_
|
||||||
uint32_t read_offset = 0;
|
uint32_t read_offset = 0;
|
||||||
// Consistency check.
|
// Consistency check.
|
||||||
ERR_FAIL_COND_V(binsize < sizeof(uint32_t) * 3 + sizeof(RenderingDeviceVulkanShaderBinaryData), RID());
|
ERR_FAIL_COND_V(binsize < sizeof(uint32_t) * 3 + sizeof(RenderingDeviceVulkanShaderBinaryData), RID());
|
||||||
ERR_FAIL_COND_V(binptr[0] != 'G' || binptr[1] != 'V' || binptr[2] != 'B' || binptr[3] != 'D', RID());
|
ERR_FAIL_COND_V(binptr[0] != 'G' || binptr[1] != 'S' || binptr[2] != 'B' || binptr[3] != 'D', RID());
|
||||||
|
|
||||||
uint32_t bin_version = decode_uint32(binptr + 4);
|
uint32_t bin_version = decode_uint32(binptr + 4);
|
||||||
ERR_FAIL_COND_V(bin_version != SHADER_BINARY_VERSION, RID());
|
ERR_FAIL_COND_V(bin_version != SHADER_BINARY_VERSION, RID());
|
||||||
|
@ -9393,7 +9393,7 @@ void RenderingDeviceVulkan::initialize(VulkanContext *p_context, bool p_local_de
|
||||||
ERR_CONTINUE(err != OK);
|
ERR_CONTINUE(err != OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
max_descriptors_per_pool = GLOBAL_DEF("rendering/rendering_device/descriptor_pools/max_descriptors_per_pool", 64);
|
max_descriptors_per_pool = GLOBAL_DEF("rendering/rendering_device/vulkan/max_descriptors_per_pool", 64);
|
||||||
|
|
||||||
// Check to make sure DescriptorPoolKey is good.
|
// Check to make sure DescriptorPoolKey is good.
|
||||||
static_assert(sizeof(uint64_t) * 3 >= UNIFORM_TYPE_MAX * sizeof(uint16_t));
|
static_assert(sizeof(uint64_t) * 3 >= UNIFORM_TYPE_MAX * sizeof(uint16_t));
|
||||||
|
|
|
@ -180,6 +180,7 @@ void ShaderRD::_build_variant_code(StringBuilder &builder, uint32_t p_variant, c
|
||||||
#if defined(MACOS_ENABLED) || defined(IOS_ENABLED)
|
#if defined(MACOS_ENABLED) || defined(IOS_ENABLED)
|
||||||
builder.append("#define MOLTENVK_USED\n");
|
builder.append("#define MOLTENVK_USED\n");
|
||||||
#endif
|
#endif
|
||||||
|
builder.append(String("#define RENDER_DRIVER_") + OS::get_singleton()->get_current_rendering_driver_name().to_upper() + "\n");
|
||||||
} break;
|
} break;
|
||||||
case StageTemplate::Chunk::TYPE_MATERIAL_UNIFORMS: {
|
case StageTemplate::Chunk::TYPE_MATERIAL_UNIFORMS: {
|
||||||
builder.append(p_version->uniforms.get_data()); //uniforms (same for vertex and fragment)
|
builder.append(p_version->uniforms.get_data()); //uniforms (same for vertex and fragment)
|
||||||
|
|
|
@ -2868,12 +2868,13 @@ void RenderingServer::init() {
|
||||||
|
|
||||||
GLOBAL_DEF("rendering/2d/shadow_atlas/size", 2048);
|
GLOBAL_DEF("rendering/2d/shadow_atlas/size", 2048);
|
||||||
|
|
||||||
// Already defined in RenderingDeviceVulkan::initialize which runs before this code.
|
// Already defined in some RenderingDevice*::initialize, which run before this code.
|
||||||
// We re-define them here just for doctool's sake. Make sure to keep default values in sync.
|
// We re-define them here just for doctool's sake. Make sure to keep default values in sync.
|
||||||
GLOBAL_DEF("rendering/rendering_device/staging_buffer/block_size_kb", 256);
|
GLOBAL_DEF("rendering/rendering_device/staging_buffer/block_size_kb", 256);
|
||||||
GLOBAL_DEF("rendering/rendering_device/staging_buffer/max_size_mb", 128);
|
GLOBAL_DEF("rendering/rendering_device/staging_buffer/max_size_mb", 128);
|
||||||
GLOBAL_DEF("rendering/rendering_device/staging_buffer/texture_upload_region_size_px", 64);
|
GLOBAL_DEF("rendering/rendering_device/staging_buffer/texture_upload_region_size_px", 64);
|
||||||
GLOBAL_DEF("rendering/rendering_device/descriptor_pools/max_descriptors_per_pool", 64);
|
// Vulkan-specific.
|
||||||
|
GLOBAL_DEF("rendering/rendering_device/vulkan/max_descriptors_per_pool", 64);
|
||||||
|
|
||||||
GLOBAL_DEF("rendering/shader_compiler/shader_cache/enabled", true);
|
GLOBAL_DEF("rendering/shader_compiler/shader_cache/enabled", true);
|
||||||
GLOBAL_DEF("rendering/shader_compiler/shader_cache/compress", true);
|
GLOBAL_DEF("rendering/shader_compiler/shader_cache/compress", true);
|
||||||
|
|
Loading…
Reference in New Issue