3636#include " servers/rendering/renderer_rd/shaders/effects/copy.glsl.gen.h"
3737#include " servers/rendering/renderer_rd/shaders/effects/copy_to_fb.glsl.gen.h"
3838#include " servers/rendering/renderer_rd/shaders/effects/cube_to_dp.glsl.gen.h"
39- #include " servers/rendering/renderer_rd/shaders/effects/cubemap_downsampler.glsl.gen.h"
40- #include " servers/rendering/renderer_rd/shaders/effects/cubemap_downsampler_raster.glsl.gen.h"
41- #include " servers/rendering/renderer_rd/shaders/effects/cubemap_filter.glsl.gen.h"
42- #include " servers/rendering/renderer_rd/shaders/effects/cubemap_filter_raster.glsl.gen.h"
43- #include " servers/rendering/renderer_rd/shaders/effects/cubemap_roughness.glsl.gen.h"
44- #include " servers/rendering/renderer_rd/shaders/effects/cubemap_roughness_raster.glsl.gen.h"
39+ #include " servers/rendering/renderer_rd/shaders/effects/cube_to_octmap.glsl.gen.h"
40+ #include " servers/rendering/renderer_rd/shaders/effects/octmap_downsampler.glsl.gen.h"
41+ #include " servers/rendering/renderer_rd/shaders/effects/octmap_downsampler_raster.glsl.gen.h"
42+ #include " servers/rendering/renderer_rd/shaders/effects/octmap_filter.glsl.gen.h"
43+ #include " servers/rendering/renderer_rd/shaders/effects/octmap_filter_raster.glsl.gen.h"
44+ #include " servers/rendering/renderer_rd/shaders/effects/octmap_roughness.glsl.gen.h"
45+ #include " servers/rendering/renderer_rd/shaders/effects/octmap_roughness_raster.glsl.gen.h"
4546#include " servers/rendering/renderer_rd/shaders/effects/specular_merge.glsl.gen.h"
4647#include " servers/rendering/renderer_scene_render.h"
4748
5051namespace RendererRD {
5152
5253class CopyEffects {
54+ public:
55+ enum RasterEffects {
56+ RASTER_EFFECT_COPY = 1 << 0 ,
57+ RASTER_EFFECT_GAUSSIAN_BLUR = 1 << 1 ,
58+ RASTER_EFFECT_OCTMAP = 1 << 2 ,
59+ };
60+
5361private:
54- bool prefer_raster_effects ;
62+ BitField<RasterEffects> raster_effects ;
5563
5664 // Blur raster shader
5765
@@ -115,8 +123,8 @@ class CopyEffects {
115123 COPY_MODE_SET_COLOR_8BIT,
116124 COPY_MODE_MIPMAP,
117125 COPY_MODE_LINEARIZE_DEPTH,
118- COPY_MODE_CUBE_TO_PANORAMA ,
119- COPY_MODE_CUBE_ARRAY_TO_PANORAMA ,
126+ COPY_MODE_OCTMAP_TO_PANORAMA ,
127+ COPY_MODE_OCTMAP_ARRAY_TO_PANORAMA ,
120128 COPY_MODE_MAX,
121129
122130 };
@@ -152,7 +160,8 @@ class CopyEffects {
152160 // DOF.
153161 float camera_z_far;
154162 float camera_z_near;
155- uint32_t pad2[2 ];
163+ // Octmap.
164+ float octmap_border_size[2 ];
156165 // SET color
157166 float set_color[4 ];
158167 };
@@ -224,40 +233,66 @@ class CopyEffects {
224233 PipelineCacheRD pipeline;
225234 } cube_to_dp;
226235
227- // Cubemap effects
236+ // Copy to Octmap
228237
229- struct CubemapDownsamplerPushConstant {
230- uint32_t face_size;
231- uint32_t face_id;
232- float pad[2 ];
238+ struct CopyToOctmapPushConstant {
239+ float border_size;
240+ float pad[3 ];
233241 };
234242
235- struct CubemapDownsampler {
236- CubemapDownsamplerPushConstant push_constant;
237- CubemapDownsamplerShaderRD compute_shader;
238- CubemapDownsamplerRasterShaderRD raster_shader;
243+ struct CopyToOctmap {
244+ CopyToOctmapPushConstant push_constant;
245+ CubeToOctmapShaderRD shader;
239246 RID shader_version;
240- PipelineDeferredRD compute_pipeline;
241- PipelineCacheRD raster_pipeline;
242- } cubemap_downsampler;
247+ PipelineCacheRD pipeline;
248+ } cube_to_octmap;
249+
250+ // Octmap effects
251+
252+ struct OctmapDownsamplerPushConstant {
253+ float border_size;
254+ uint32_t size;
255+ uint32_t pad[2 ];
256+ };
243257
244- enum CubemapFilterMode {
258+ enum OctmapDownsamplerMode {
259+ DOWNSAMPLER_MODE_LOW_QUALITY,
260+ DOWNSAMPLER_MODE_HIGH_QUALITY,
261+ DOWNSAMPLER_MODE_MAX
262+ };
263+
264+ struct OctmapDownsampler {
265+ OctmapDownsamplerPushConstant push_constant;
266+ OctmapDownsamplerShaderRD compute_shader;
267+ OctmapDownsamplerRasterShaderRD raster_shader;
268+ RID shader_version;
269+ PipelineDeferredRD compute_pipelines[DOWNSAMPLER_MODE_MAX];
270+ PipelineCacheRD raster_pipelines[DOWNSAMPLER_MODE_MAX];
271+ } octmap_downsampler;
272+
273+ enum OctmapFilterMode {
245274 FILTER_MODE_HIGH_QUALITY,
246275 FILTER_MODE_LOW_QUALITY,
247276 FILTER_MODE_HIGH_QUALITY_ARRAY,
248277 FILTER_MODE_LOW_QUALITY_ARRAY,
249278 FILTER_MODE_MAX,
250279 };
251280
252- struct CubemapFilterRasterPushConstant {
281+ struct OctmapFilterPushConstant {
282+ float border_size[2 ];
283+ uint32_t size;
284+ uint32_t pad;
285+ };
286+
287+ struct OctmapFilterRasterPushConstant {
288+ float border_size[2 ];
253289 uint32_t mip_level;
254- uint32_t face_id;
255- float pad[2 ];
290+ uint32_t pad;
256291 };
257292
258- struct CubemapFilter {
259- CubemapFilterShaderRD compute_shader;
260- CubemapFilterRasterShaderRD raster_shader;
293+ struct OctmapFilter {
294+ OctmapFilterShaderRD compute_shader;
295+ OctmapFilterRasterShaderRD raster_shader;
261296 RID shader_version;
262297 PipelineDeferredRD compute_pipelines[FILTER_MODE_MAX];
263298 PipelineCacheRD raster_pipelines[FILTER_MODE_MAX];
@@ -269,19 +304,21 @@ class CopyEffects {
269304
270305 } filter;
271306
272- struct CubemapRoughnessPushConstant {
273- uint32_t face_id;
307+ struct OctmapRoughnessPushConstant {
274308 uint32_t sample_count;
275309 float roughness;
310+ uint32_t source_size;
311+ uint32_t dest_size;
312+
313+ float border_size[2 ];
276314 uint32_t use_direct_write;
277- float face_size;
278- float pad[3 ];
315+ uint32_t pad;
279316 };
280317
281- struct CubemapRoughness {
282- CubemapRoughnessPushConstant push_constant;
283- CubemapRoughnessShaderRD compute_shader;
284- CubemapRoughnessRasterShaderRD raster_shader;
318+ struct OctmapRoughness {
319+ OctmapRoughnessPushConstant push_constant;
320+ OctmapRoughnessShaderRD compute_shader;
321+ OctmapRoughnessRasterShaderRD raster_shader;
285322 RID shader_version;
286323 PipelineDeferredRD compute_pipeline;
287324 PipelineCacheRD raster_pipeline;
@@ -319,18 +356,18 @@ class CopyEffects {
319356public:
320357 static CopyEffects *get_singleton ();
321358
322- CopyEffects (bool p_prefer_raster_effects );
359+ CopyEffects (BitField<RasterEffects> p_raster_effects );
323360 ~CopyEffects ();
324361
325- bool get_prefer_raster_effects () { return prefer_raster_effects ; }
362+ BitField<RasterEffects> get_raster_effects () { return raster_effects ; }
326363
327364 void copy_to_rect (RID p_source_rd_texture, RID p_dest_texture, const Rect2i &p_rect, bool p_flip_y = false , bool p_force_luminance = false , bool p_all_source = false , bool p_8_bit_dst = false , bool p_alpha_to_one = false , bool p_sanitize_inf_nan = false );
328- void copy_cubemap_to_panorama (RID p_source_cube , RID p_dest_panorama, const Size2i &p_panorama_size, float p_lod, bool p_is_array);
365+ void copy_octmap_to_panorama (RID p_source_octmap , RID p_dest_panorama, const Size2i &p_panorama_size, float p_lod, bool p_is_array, const Size2 &p_source_octmap_border_size );
329366 void copy_depth_to_rect (RID p_source_rd_texture, RID p_dest_framebuffer, const Rect2i &p_rect, bool p_flip_y = false );
330367 void copy_depth_to_rect_and_linearize (RID p_source_rd_texture, RID p_dest_texture, const Rect2i &p_rect, bool p_flip_y, float p_z_near, float p_z_far);
331- void copy_to_fb_rect (RID p_source_rd_texture, RID p_dest_framebuffer, const Rect2i &p_rect, bool p_flip_y = false , bool p_force_luminance = false , bool p_alpha_to_zero = false , bool p_srgb = false , RID p_secondary = RID(), bool p_multiview = false, bool alpha_to_one = false, bool p_linear = false, bool p_normal = false, const Rect2 &p_src_rect = Rect2());
368+ void copy_to_fb_rect (RID p_source_rd_texture, RID p_dest_framebuffer, const Rect2i &p_rect, bool p_flip_y = false , bool p_force_luminance = false , bool p_alpha_to_zero = false , bool p_srgb = false , RID p_secondary = RID(), bool p_multiview = false, bool alpha_to_one = false, bool p_linear = false, bool p_normal = false, const Rect2 &p_src_rect = Rect2(), float p_linear_luminance_multiplier = 1.0 );
332369 void copy_to_atlas_fb (RID p_source_rd_texture, RID p_dest_framebuffer, const Rect2 &p_uv_rect, RD::DrawListID p_draw_list, bool p_flip_y = false , bool p_panorama = false );
333- void copy_to_drawlist (RD::DrawListID p_draw_list, RD::FramebufferFormatID p_fb_format, RID p_source_rd_texture, bool p_linear = false );
370+ void copy_to_drawlist (RD::DrawListID p_draw_list, RD::FramebufferFormatID p_fb_format, RID p_source_rd_texture, bool p_linear = false , float p_linear_luminance_multiplier = 1.0 );
334371 void copy_raster (RID p_source_texture, RID p_dest_framebuffer);
335372
336373 void gaussian_blur (RID p_source_rd_texture, RID p_texture, const Rect2i &p_region, const Size2i &p_size, bool p_8bit_dst = false );
@@ -346,13 +383,13 @@ class CopyEffects {
346383 void set_color_raster (RID p_dest_texture, const Color &p_color, const Rect2i &p_region);
347384
348385 void copy_cubemap_to_dp (RID p_source_rd_texture, RID p_dst_framebuffer, const Rect2 &p_rect, const Vector2 &p_dst_size, float p_z_near, float p_z_far, bool p_dp_flip);
349- void cubemap_downsample (RID p_source_cubemap , RID p_dest_cubemap, const Size2i &p_size );
350- void cubemap_downsample_raster (RID p_source_cubemap , RID p_dest_framebuffer, uint32_t p_face_id, const Size2i &p_size);
351- void cubemap_filter (RID p_source_cubemap, Vector< RID> p_dest_cubemap, bool p_use_array );
352- void cubemap_filter_raster (RID p_source_cubemap, RID p_dest_framebuffer, uint32_t p_face_id, uint32_t p_mip_level );
353-
354- void cubemap_roughness (RID p_source_rd_texture, RID p_dest_texture, uint32_t p_face_id, uint32_t p_sample_count, float p_roughness , float p_size );
355- void cubemap_roughness_raster (RID p_source_rd_texture, RID p_dest_framebuffer, uint32_t p_face_id, uint32_t p_sample_count, float p_roughness , float p_size );
386+ void copy_cubemap_to_octmap (RID p_source_rd_texture , RID p_dst_framebuffer, float p_border_size );
387+ void octmap_downsample (RID p_source_octmap , RID p_dest_octmap, const Size2i &p_size, bool p_use_filter_quality, float p_border_size );
388+ void octmap_downsample_raster (RID p_source_octmap, RID p_dest_framebuffer, const Size2i &p_size, bool p_use_filter_quality, float p_border_size );
389+ void octmap_filter (RID p_source_octmap, const Vector< RID> &p_dest_octmap, bool p_use_array, float p_border_size );
390+ void octmap_filter_raster (RID p_source_octmap, RID p_dest_framebuffer, uint32_t p_mip_level, float p_border_size);
391+ void octmap_roughness (RID p_source_rd_texture, RID p_dest_texture, uint32_t p_sample_count, float p_roughness, uint32_t p_source_size, uint32_t p_dest_size , float p_border_size );
392+ void octmap_roughness_raster (RID p_source_rd_texture, RID p_dest_framebuffer, uint32_t p_sample_count, float p_roughness, uint32_t p_source_size, uint32_t p_dest_size , float p_border_size );
356393
357394 void merge_specular (RID p_dest_framebuffer, RID p_specular, RID p_base, RID p_reflection, uint32_t p_view_count);
358395};
0 commit comments