diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2023-05-09 10:46:23 +0200 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2023-05-09 10:46:23 +0200 |
commit | 668cf3c66f42989949399f36e9faa29426e37416 (patch) | |
tree | 371cf6d9a3980ba8e2aee341592bfe8846ab952b /servers/rendering/renderer_rd/cluster_builder_rd.cpp | |
parent | d550fdd7a40818d6271f107b1b1db8f8a4e6ee58 (diff) | |
parent | 646543257059b750938c1ab535bf78348c9407e2 (diff) | |
download | redot-engine-668cf3c66f42989949399f36e9faa29426e37416.tar.gz |
Merge pull request #76832 from RandomShaper/cluster_render_prevail
Save cluster render shader from being optimized out entirely
Diffstat (limited to 'servers/rendering/renderer_rd/cluster_builder_rd.cpp')
-rw-r--r-- | servers/rendering/renderer_rd/cluster_builder_rd.cpp | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/servers/rendering/renderer_rd/cluster_builder_rd.cpp b/servers/rendering/renderer_rd/cluster_builder_rd.cpp index 959a752fba..d2a1a5ab9c 100644 --- a/servers/rendering/renderer_rd/cluster_builder_rd.cpp +++ b/servers/rendering/renderer_rd/cluster_builder_rd.cpp @@ -47,15 +47,29 @@ ClusterBuilderSharedDataRD::ClusterBuilderSharedDataRD() { } { + RD::FramebufferFormatID fb_format; + RD::PipelineColorBlendState blend_state; + String defines; + if (RD::get_singleton()->has_feature(RD::SUPPORTS_FRAGMENT_SHADER_WITH_ONLY_SIDE_EFFECTS)) { + fb_format = RD::get_singleton()->framebuffer_format_create_empty(); + blend_state = RD::PipelineColorBlendState::create_disabled(); + } else { + Vector<RD::AttachmentFormat> afs; + afs.push_back(RD::AttachmentFormat()); + afs.write[0].usage_flags = RD::TEXTURE_USAGE_COLOR_ATTACHMENT_BIT; + fb_format = RD::get_singleton()->framebuffer_format_create(afs); + defines = "\n#define USE_ATTACHMENT\n"; + } + Vector<String> versions; versions.push_back(""); - cluster_render.cluster_render_shader.initialize(versions); + cluster_render.cluster_render_shader.initialize(versions, defines); cluster_render.shader_version = cluster_render.cluster_render_shader.version_create(); cluster_render.shader = cluster_render.cluster_render_shader.version_get_shader(cluster_render.shader_version, 0); - cluster_render.shader_pipelines[ClusterRender::PIPELINE_NORMAL] = RD::get_singleton()->render_pipeline_create(cluster_render.shader, RD::get_singleton()->framebuffer_format_create_empty(), vertex_format, RD::RENDER_PRIMITIVE_TRIANGLES, RD::PipelineRasterizationState(), RD::PipelineMultisampleState(), RD::PipelineDepthStencilState(), RD::PipelineColorBlendState(), 0); + cluster_render.shader_pipelines[ClusterRender::PIPELINE_NORMAL] = RD::get_singleton()->render_pipeline_create(cluster_render.shader, fb_format, vertex_format, RD::RENDER_PRIMITIVE_TRIANGLES, RD::PipelineRasterizationState(), RD::PipelineMultisampleState(), RD::PipelineDepthStencilState(), blend_state, 0); RD::PipelineMultisampleState ms; ms.sample_count = RD::TEXTURE_SAMPLES_4; - cluster_render.shader_pipelines[ClusterRender::PIPELINE_MSAA] = RD::get_singleton()->render_pipeline_create(cluster_render.shader, RD::get_singleton()->framebuffer_format_create_empty(), vertex_format, RD::RENDER_PRIMITIVE_TRIANGLES, RD::PipelineRasterizationState(), ms, RD::PipelineDepthStencilState(), RD::PipelineColorBlendState(), 0); + cluster_render.shader_pipelines[ClusterRender::PIPELINE_MSAA] = RD::get_singleton()->render_pipeline_create(cluster_render.shader, fb_format, vertex_format, RD::RENDER_PRIMITIVE_TRIANGLES, RD::PipelineRasterizationState(), ms, RD::PipelineDepthStencilState(), blend_state, 0); } { Vector<String> versions; |