feat: modules moved and engine moved to submodule
This commit is contained in:
parent
dfb5e645cd
commit
c33d2130cc
5136 changed files with 225275 additions and 64485 deletions
|
|
@ -28,8 +28,7 @@
|
|||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/**************************************************************************/
|
||||
|
||||
#ifndef FORWARD_ID_STORAGE_H
|
||||
#define FORWARD_ID_STORAGE_H
|
||||
#pragma once
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
|
|
@ -64,5 +63,3 @@ public:
|
|||
};
|
||||
|
||||
} // namespace RendererRD
|
||||
|
||||
#endif // FORWARD_ID_STORAGE_H
|
||||
|
|
|
|||
|
|
@ -643,7 +643,7 @@ void LightStorage::update_light_buffers(RenderDataRD *p_render_data, const Paged
|
|||
if (RendererSceneRenderRD::get_singleton()->is_using_physical_light_units()) {
|
||||
light_data.energy *= light->param[RS::LIGHT_PARAM_INTENSITY];
|
||||
} else {
|
||||
light_data.energy *= Math_PI;
|
||||
light_data.energy *= Math::PI;
|
||||
}
|
||||
|
||||
if (p_render_data->camera_attributes.is_valid()) {
|
||||
|
|
@ -714,7 +714,9 @@ void LightStorage::update_light_buffers(RenderDataRD *p_render_data, const Paged
|
|||
light_data.shadow_split_offsets[j] = split;
|
||||
float bias_scale = light_instance->shadow_transform[j].bias_scale * light_data.soft_shadow_scale;
|
||||
light_data.shadow_bias[j] = light->param[RS::LIGHT_PARAM_SHADOW_BIAS] / 100.0 * bias_scale;
|
||||
light_data.shadow_normal_bias[j] = light->param[RS::LIGHT_PARAM_SHADOW_NORMAL_BIAS] * light_instance->shadow_transform[j].shadow_texel_size;
|
||||
// Use lower shadow normal bias for distant splits, relative to the share taken by the split.
|
||||
// This helps reduce peter-panning at a distance.
|
||||
light_data.shadow_normal_bias[j] = light->param[RS::LIGHT_PARAM_SHADOW_NORMAL_BIAS] * light_instance->shadow_transform[j].shadow_texel_size * light_data.shadow_split_offsets[0] / split;
|
||||
light_data.shadow_transmittance_bias[j] = light->param[RS::LIGHT_PARAM_TRANSMITTANCE_BIAS] / 100.0 * bias_scale;
|
||||
light_data.shadow_z_range[j] = light_instance->shadow_transform[j].farplane;
|
||||
light_data.shadow_range_begin[j] = light_instance->shadow_transform[j].range_begin;
|
||||
|
|
@ -864,14 +866,14 @@ void LightStorage::update_light_buffers(RenderDataRD *p_render_data, const Paged
|
|||
|
||||
// Convert from Luminous Power to Luminous Intensity
|
||||
if (type == RS::LIGHT_OMNI) {
|
||||
energy *= 1.0 / (Math_PI * 4.0);
|
||||
energy *= 1.0 / (Math::PI * 4.0);
|
||||
} else {
|
||||
// Spot Lights are not physically accurate, Luminous Intensity should change in relation to the cone angle.
|
||||
// We make this assumption to keep them easy to control.
|
||||
energy *= 1.0 / Math_PI;
|
||||
energy *= 1.0 / Math::PI;
|
||||
}
|
||||
} else {
|
||||
energy *= Math_PI;
|
||||
energy *= Math::PI;
|
||||
}
|
||||
|
||||
if (p_render_data->camera_attributes.is_valid()) {
|
||||
|
|
@ -1998,7 +2000,7 @@ void LightStorage::lightmap_tap_sh_light(RID p_lightmap, const Vector3 &p_point,
|
|||
return; //nothing could be done
|
||||
}
|
||||
|
||||
node = ABS(node) - 1;
|
||||
node = Math::abs(node) - 1;
|
||||
|
||||
uint32_t *tetrahedron = (uint32_t *)&lm->tetrahedra[node * 4];
|
||||
Vector3 points[4] = { lm->points[tetrahedron[0]], lm->points[tetrahedron[1]], lm->points[tetrahedron[2]], lm->points[tetrahedron[3]] };
|
||||
|
|
|
|||
|
|
@ -28,8 +28,7 @@
|
|||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/**************************************************************************/
|
||||
|
||||
#ifndef LIGHT_STORAGE_RD_H
|
||||
#define LIGHT_STORAGE_RD_H
|
||||
#pragma once
|
||||
|
||||
#include "core/templates/local_vector.h"
|
||||
#include "core/templates/paged_array.h"
|
||||
|
|
@ -1164,5 +1163,3 @@ public:
|
|||
};
|
||||
|
||||
} // namespace RendererRD
|
||||
|
||||
#endif // LIGHT_STORAGE_RD_H
|
||||
|
|
|
|||
|
|
@ -1137,7 +1137,7 @@ bool MaterialStorage::MaterialData::update_parameters_uniform_set(const HashMap<
|
|||
update_textures(p_parameters, p_default_texture_params, p_texture_uniforms, texture_cache.ptrw(), p_use_linear_color, p_3d_material);
|
||||
}
|
||||
|
||||
if (p_ubo_size == 0 && (p_texture_uniforms.size() == 0)) {
|
||||
if (p_ubo_size == 0 && (p_texture_uniforms.is_empty())) {
|
||||
// This material does not require an uniform set, so don't create it.
|
||||
return false;
|
||||
}
|
||||
|
|
@ -1705,7 +1705,7 @@ void MaterialStorage::global_shader_parameters_load_settings(bool p_load_texture
|
|||
|
||||
for (const PropertyInfo &E : settings) {
|
||||
if (E.name.begins_with("shader_globals/")) {
|
||||
StringName name = E.name.get_slice("/", 1);
|
||||
StringName name = E.name.get_slicec('/', 1);
|
||||
Dictionary d = GLOBAL_GET(E.name);
|
||||
|
||||
ERR_CONTINUE(!d.has("type"));
|
||||
|
|
|
|||
|
|
@ -28,8 +28,7 @@
|
|||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/**************************************************************************/
|
||||
|
||||
#ifndef MATERIAL_STORAGE_RD_H
|
||||
#define MATERIAL_STORAGE_RD_H
|
||||
#pragma once
|
||||
|
||||
#include "texture_storage.h"
|
||||
|
||||
|
|
@ -469,5 +468,3 @@ public:
|
|||
};
|
||||
|
||||
} // namespace RendererRD
|
||||
|
||||
#endif // MATERIAL_STORAGE_RD_H
|
||||
|
|
|
|||
|
|
@ -28,8 +28,7 @@
|
|||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/**************************************************************************/
|
||||
|
||||
#ifndef MESH_STORAGE_RD_H
|
||||
#define MESH_STORAGE_RD_H
|
||||
#pragma once
|
||||
|
||||
#include "../../rendering_server_globals.h"
|
||||
#include "core/templates/local_vector.h"
|
||||
|
|
@ -799,5 +798,3 @@ public:
|
|||
};
|
||||
|
||||
} // namespace RendererRD
|
||||
|
||||
#endif // MESH_STORAGE_RD_H
|
||||
|
|
|
|||
|
|
@ -80,9 +80,9 @@ ParticlesStorage::ParticlesStorage() {
|
|||
}
|
||||
actions.renames["TRANSFORM"] = "PARTICLE.xform";
|
||||
actions.renames["TIME"] = "frame_history.data[0].time";
|
||||
actions.renames["PI"] = _MKSTR(Math_PI);
|
||||
actions.renames["TAU"] = _MKSTR(Math_TAU);
|
||||
actions.renames["E"] = _MKSTR(Math_E);
|
||||
actions.renames["PI"] = String::num(Math::PI);
|
||||
actions.renames["TAU"] = String::num(Math::TAU);
|
||||
actions.renames["E"] = String::num(Math::E);
|
||||
actions.renames["LIFETIME"] = "params.lifetime";
|
||||
actions.renames["DELTA"] = "local_delta";
|
||||
actions.renames["NUMBER"] = "particle_number";
|
||||
|
|
@ -765,7 +765,8 @@ void ParticlesStorage::_particles_process(Particles *p_particles, double p_delta
|
|||
MaterialStorage *material_storage = MaterialStorage::get_singleton();
|
||||
|
||||
if (p_particles->particles_material_uniform_set.is_null() || !RD::get_singleton()->uniform_set_is_valid(p_particles->particles_material_uniform_set)) {
|
||||
Vector<RD::Uniform> uniforms;
|
||||
thread_local LocalVector<RD::Uniform> uniforms;
|
||||
uniforms.clear();
|
||||
|
||||
{
|
||||
RD::Uniform u;
|
||||
|
|
@ -814,7 +815,7 @@ void ParticlesStorage::_particles_process(Particles *p_particles, double p_delta
|
|||
p_particles->particles_material_uniform_set = RD::get_singleton()->uniform_set_create(uniforms, particles_shader.default_shader_rd, 1);
|
||||
}
|
||||
|
||||
double new_phase = Math::fmod((double)p_particles->phase + (p_delta / p_particles->lifetime) * p_particles->speed_scale, 1.0);
|
||||
double new_phase = Math::fmod((double)p_particles->phase + (p_delta / p_particles->lifetime), 1.0);
|
||||
|
||||
//move back history (if there is any)
|
||||
for (uint32_t i = p_particles->frame_history.size() - 1; i > 0; i--) {
|
||||
|
|
@ -839,7 +840,7 @@ void ParticlesStorage::_particles_process(Particles *p_particles, double p_delta
|
|||
p_particles->phase = new_phase;
|
||||
|
||||
frame_params.time = RendererCompositorRD::get_singleton()->get_total_time();
|
||||
frame_params.delta = p_delta * p_particles->speed_scale;
|
||||
frame_params.delta = p_delta;
|
||||
frame_params.random_seed = p_particles->random_seed;
|
||||
frame_params.explosiveness = p_particles->explosiveness;
|
||||
frame_params.randomness = p_particles->randomness;
|
||||
|
|
@ -1071,7 +1072,8 @@ void ParticlesStorage::_particles_process(Particles *p_particles, double p_delta
|
|||
RD::get_singleton()->free(p_particles->collision_textures_uniform_set);
|
||||
}
|
||||
|
||||
Vector<RD::Uniform> uniforms;
|
||||
thread_local LocalVector<RD::Uniform> uniforms;
|
||||
uniforms.clear();
|
||||
|
||||
{
|
||||
RD::Uniform u;
|
||||
|
|
@ -1158,6 +1160,10 @@ void ParticlesStorage::_particles_process(Particles *p_particles, double p_delta
|
|||
//fill the trail params
|
||||
for (uint32_t i = 0; i < p_particles->trail_params.size(); i++) {
|
||||
uint32_t src_idx = i * p_particles->frame_history.size() / p_particles->trail_params.size();
|
||||
if (p_particles->speed_scale <= 0.0) {
|
||||
// Stop trails.
|
||||
src_idx = 0;
|
||||
}
|
||||
p_particles->trail_params[i] = p_particles->frame_history[src_idx];
|
||||
}
|
||||
} else {
|
||||
|
|
@ -1529,7 +1535,6 @@ void ParticlesStorage::update_particles() {
|
|||
}
|
||||
}
|
||||
|
||||
bool zero_time_scale = Engine::get_singleton()->get_time_scale() <= 0.0;
|
||||
double todo = particles->request_process_time;
|
||||
if (particles->clear) {
|
||||
todo += particles->pre_process_time;
|
||||
|
|
@ -1554,37 +1559,26 @@ void ParticlesStorage::update_particles() {
|
|||
particles->speed_scale = tmp_scale;
|
||||
}
|
||||
|
||||
double time_scale = MAX(particles->speed_scale, 0.0);
|
||||
|
||||
if (fixed_fps > 0) {
|
||||
double frame_time;
|
||||
double decr;
|
||||
if (zero_time_scale) {
|
||||
frame_time = 0.0;
|
||||
decr = 1.0 / fixed_fps;
|
||||
} else {
|
||||
frame_time = 1.0 / fixed_fps;
|
||||
decr = frame_time;
|
||||
}
|
||||
double frame_time = 1.0 / fixed_fps;
|
||||
double delta = RendererCompositorRD::get_singleton()->get_frame_delta_time();
|
||||
if (delta > 0.1) { //avoid recursive stalls if fps goes below 10
|
||||
delta = 0.1;
|
||||
} else if (delta <= 0.0) { //unlikely but..
|
||||
delta = 0.001;
|
||||
}
|
||||
todo = particles->frame_remainder + delta;
|
||||
todo = particles->frame_remainder + delta * time_scale;
|
||||
|
||||
while (todo >= frame_time || particles->clear) {
|
||||
_particles_process(particles, frame_time);
|
||||
todo -= decr;
|
||||
todo -= frame_time;
|
||||
}
|
||||
|
||||
particles->frame_remainder = todo;
|
||||
|
||||
} else {
|
||||
if (zero_time_scale) {
|
||||
_particles_process(particles, 0.0);
|
||||
} else {
|
||||
_particles_process(particles, RendererCompositorRD::get_singleton()->get_frame_delta_time());
|
||||
}
|
||||
_particles_process(particles, RendererCompositorRD::get_singleton()->get_frame_delta_time() * time_scale);
|
||||
}
|
||||
|
||||
// Ensure that memory is initialized (the code above should ensure that _particles_process is always called at least once upon clearing).
|
||||
|
|
|
|||
|
|
@ -28,8 +28,7 @@
|
|||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/**************************************************************************/
|
||||
|
||||
#ifndef PARTICLES_STORAGE_RD_H
|
||||
#define PARTICLES_STORAGE_RD_H
|
||||
#pragma once
|
||||
|
||||
#include "core/templates/local_vector.h"
|
||||
#include "core/templates/rid_owner.h"
|
||||
|
|
@ -597,5 +596,3 @@ public:
|
|||
};
|
||||
|
||||
} // namespace RendererRD
|
||||
|
||||
#endif // PARTICLES_STORAGE_RD_H
|
||||
|
|
|
|||
|
|
@ -28,8 +28,7 @@
|
|||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/**************************************************************************/
|
||||
|
||||
#ifndef RENDER_BUFFER_CUSTOM_DATA_RD_H
|
||||
#define RENDER_BUFFER_CUSTOM_DATA_RD_H
|
||||
#pragma once
|
||||
|
||||
#include "core/object/ref_counted.h"
|
||||
|
||||
|
|
@ -44,5 +43,3 @@ public:
|
|||
|
||||
private:
|
||||
};
|
||||
|
||||
#endif // RENDER_BUFFER_CUSTOM_DATA_RD_H
|
||||
|
|
|
|||
|
|
@ -28,8 +28,7 @@
|
|||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/**************************************************************************/
|
||||
|
||||
#ifndef RENDER_DATA_RD_H
|
||||
#define RENDER_DATA_RD_H
|
||||
#pragma once
|
||||
|
||||
#include "servers/rendering/renderer_rd/storage_rd/render_scene_buffers_rd.h"
|
||||
#include "servers/rendering/renderer_rd/storage_rd/render_scene_data_rd.h"
|
||||
|
|
@ -96,5 +95,3 @@ public:
|
|||
|
||||
uint32_t voxel_gi_count = 0;
|
||||
};
|
||||
|
||||
#endif // RENDER_DATA_RD_H
|
||||
|
|
|
|||
|
|
@ -325,9 +325,7 @@ RID RenderSceneBuffersRD::create_texture_from_format(const StringName &p_context
|
|||
named_texture.is_unique = p_unique;
|
||||
named_texture.texture = RD::get_singleton()->texture_create(p_texture_format, p_view);
|
||||
|
||||
Array arr;
|
||||
arr.push_back(p_context);
|
||||
arr.push_back(p_texture_name);
|
||||
Array arr = { p_context, p_texture_name };
|
||||
RD::get_singleton()->set_resource_name(named_texture.texture, String("RenderBuffer {0}/{1}").format(arr));
|
||||
|
||||
update_sizes(named_texture);
|
||||
|
|
@ -366,9 +364,7 @@ RID RenderSceneBuffersRD::create_texture_view(const StringName &p_context, const
|
|||
|
||||
view_texture.texture = RD::get_singleton()->texture_create_shared(p_view, named_texture.texture);
|
||||
|
||||
Array arr;
|
||||
arr.push_back(p_context);
|
||||
arr.push_back(p_view_name);
|
||||
Array arr = { p_context, p_view_name };
|
||||
RD::get_singleton()->set_resource_name(view_texture.texture, String("RenderBuffer View {0}/{1}").format(arr));
|
||||
|
||||
update_sizes(named_texture);
|
||||
|
|
@ -446,18 +442,19 @@ RID RenderSceneBuffersRD::get_texture_slice_view(const StringName &p_context, co
|
|||
RID &slice = named_texture.slices[slice_key];
|
||||
slice = RD::get_singleton()->texture_create_shared_from_slice(p_view, named_texture.texture, p_layer, p_mipmap, p_mipmaps, p_layers > 1 ? RD::TEXTURE_SLICE_2D_ARRAY : RD::TEXTURE_SLICE_2D, p_layers);
|
||||
|
||||
Array arr;
|
||||
arr.push_back(p_context);
|
||||
arr.push_back(p_texture_name);
|
||||
arr.push_back(itos(p_layer));
|
||||
arr.push_back(itos(p_layers));
|
||||
arr.push_back(itos(p_mipmap));
|
||||
arr.push_back(itos(p_mipmaps));
|
||||
arr.push_back(itos(p_view.format_override));
|
||||
arr.push_back(itos(p_view.swizzle_r));
|
||||
arr.push_back(itos(p_view.swizzle_g));
|
||||
arr.push_back(itos(p_view.swizzle_b));
|
||||
arr.push_back(itos(p_view.swizzle_a));
|
||||
Array arr = {
|
||||
p_context,
|
||||
p_texture_name,
|
||||
itos(p_layer),
|
||||
itos(p_layers),
|
||||
itos(p_mipmap),
|
||||
itos(p_mipmaps),
|
||||
itos(p_view.format_override),
|
||||
itos(p_view.swizzle_r),
|
||||
itos(p_view.swizzle_g),
|
||||
itos(p_view.swizzle_b),
|
||||
itos(p_view.swizzle_a)
|
||||
};
|
||||
RD::get_singleton()->set_resource_name(slice, String("RenderBuffer {0}/{1}, layer {2}/{3}, mipmap {4}/{5}, view {6}/{7}/{8}/{9}/{10}").format(arr));
|
||||
|
||||
// and return our slice
|
||||
|
|
@ -756,9 +753,9 @@ uint32_t RenderSceneBuffersRD::get_velocity_usage_bits(bool p_resolve, bool p_ms
|
|||
}
|
||||
|
||||
RD::DataFormat RenderSceneBuffersRD::get_vrs_format() {
|
||||
return RD::DATA_FORMAT_R8_UINT;
|
||||
return RD::get_singleton()->vrs_get_format();
|
||||
}
|
||||
|
||||
uint32_t RenderSceneBuffersRD::get_vrs_usage_bits() {
|
||||
return RD::TEXTURE_USAGE_COLOR_ATTACHMENT_BIT | RD::TEXTURE_USAGE_VRS_ATTACHMENT_BIT | RD::TEXTURE_USAGE_SAMPLING_BIT | RD::TEXTURE_USAGE_STORAGE_BIT;
|
||||
return RD::TEXTURE_USAGE_COLOR_ATTACHMENT_BIT | RD::TEXTURE_USAGE_SAMPLING_BIT | RD::TEXTURE_USAGE_STORAGE_BIT | RD::TEXTURE_USAGE_VRS_ATTACHMENT_BIT;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,8 +28,7 @@
|
|||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/**************************************************************************/
|
||||
|
||||
#ifndef RENDER_SCENE_BUFFERS_RD_H
|
||||
#define RENDER_SCENE_BUFFERS_RD_H
|
||||
#pragma once
|
||||
|
||||
#ifdef METAL_ENABLED
|
||||
#include "../effects/metal_fx.h"
|
||||
|
|
@ -451,5 +450,3 @@ public:
|
|||
// 2 full size, 2 half size
|
||||
WeightBuffers weight_buffers[4]; // Only used in raster
|
||||
};
|
||||
|
||||
#endif // RENDER_SCENE_BUFFERS_RD_H
|
||||
|
|
|
|||
|
|
@ -28,8 +28,7 @@
|
|||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/**************************************************************************/
|
||||
|
||||
#ifndef RENDER_SCENE_DATA_RD_H
|
||||
#define RENDER_SCENE_DATA_RD_H
|
||||
#pragma once
|
||||
|
||||
#include "servers/rendering/renderer_scene_render.h"
|
||||
#include "servers/rendering/storage/render_scene_data.h"
|
||||
|
|
@ -174,5 +173,3 @@ private:
|
|||
UBO prev_ubo;
|
||||
};
|
||||
};
|
||||
|
||||
#endif // RENDER_SCENE_DATA_RD_H
|
||||
|
|
|
|||
|
|
@ -482,17 +482,15 @@ TextureStorage::TextureStorage() {
|
|||
}
|
||||
}
|
||||
|
||||
{ //create default VRS
|
||||
|
||||
{
|
||||
// Create default VRS texture.
|
||||
bool vrs_supported = RD::get_singleton()->has_feature(RD::SUPPORTS_ATTACHMENT_VRS);
|
||||
RD::TextureFormat tformat;
|
||||
tformat.format = RD::DATA_FORMAT_R8_UINT;
|
||||
tformat.format = vrs_supported ? RD::get_singleton()->vrs_get_format() : RD::DATA_FORMAT_R8_UINT;
|
||||
tformat.width = 4;
|
||||
tformat.height = 4;
|
||||
tformat.usage_bits = RD::TEXTURE_USAGE_COLOR_ATTACHMENT_BIT | RD::TEXTURE_USAGE_SAMPLING_BIT | RD::TEXTURE_USAGE_STORAGE_BIT | RD::TEXTURE_USAGE_CAN_UPDATE_BIT | RD::TEXTURE_USAGE_VRS_ATTACHMENT_BIT;
|
||||
tformat.usage_bits = RD::TEXTURE_USAGE_COLOR_ATTACHMENT_BIT | RD::TEXTURE_USAGE_SAMPLING_BIT | RD::TEXTURE_USAGE_STORAGE_BIT | RD::TEXTURE_USAGE_CAN_UPDATE_BIT | (vrs_supported ? RD::TEXTURE_USAGE_VRS_ATTACHMENT_BIT : 0);
|
||||
tformat.texture_type = RD::TEXTURE_TYPE_2D;
|
||||
if (!RD::get_singleton()->has_feature(RD::SUPPORTS_ATTACHMENT_VRS)) {
|
||||
tformat.usage_bits = RD::TEXTURE_USAGE_COLOR_ATTACHMENT_BIT | RD::TEXTURE_USAGE_SAMPLING_BIT | RD::TEXTURE_USAGE_CAN_UPDATE_BIT;
|
||||
}
|
||||
|
||||
Vector<uint8_t> pv;
|
||||
pv.resize(4 * 4);
|
||||
|
|
@ -1275,15 +1273,21 @@ RID TextureStorage::texture_create_from_native_handle(RS::TextureType p_type, Im
|
|||
break;
|
||||
|
||||
case Image::FORMAT_ASTC_4x4:
|
||||
case Image::FORMAT_ASTC_4x4_HDR:
|
||||
format = RD::DATA_FORMAT_ASTC_4x4_UNORM_BLOCK;
|
||||
break;
|
||||
|
||||
case Image::FORMAT_ASTC_4x4_HDR:
|
||||
format = RD::DATA_FORMAT_ASTC_4x4_SFLOAT_BLOCK;
|
||||
break;
|
||||
|
||||
case Image::FORMAT_ASTC_8x8:
|
||||
case Image::FORMAT_ASTC_8x8_HDR:
|
||||
format = RD::DATA_FORMAT_ASTC_8x8_UNORM_BLOCK;
|
||||
break;
|
||||
|
||||
case Image::FORMAT_ASTC_8x8_HDR:
|
||||
format = RD::DATA_FORMAT_ASTC_8x8_SFLOAT_BLOCK;
|
||||
break;
|
||||
|
||||
default:
|
||||
// Arbitrary fallback.
|
||||
format = RD::DATA_FORMAT_R8G8B8A8_UNORM;
|
||||
|
|
@ -1639,8 +1643,8 @@ void TextureStorage::texture_debug_usage(List<RS::TextureInfo> *r_info) {
|
|||
List<RID> textures;
|
||||
texture_owner.get_owned_list(&textures);
|
||||
|
||||
for (List<RID>::Element *E = textures.front(); E; E = E->next()) {
|
||||
Texture *t = texture_owner.get_or_null(E->get());
|
||||
for (const RID &rid : textures) {
|
||||
Texture *t = texture_owner.get_or_null(rid);
|
||||
if (!t) {
|
||||
continue;
|
||||
}
|
||||
|
|
@ -2197,24 +2201,16 @@ Ref<Image> TextureStorage::_validate_texture_format(const Ref<Image> &p_image, T
|
|||
r_format.swizzle_b = RD::TEXTURE_SWIZZLE_ZERO;
|
||||
r_format.swizzle_a = RD::TEXTURE_SWIZZLE_ONE;
|
||||
} break;
|
||||
case Image::FORMAT_ASTC_4x4:
|
||||
case Image::FORMAT_ASTC_4x4_HDR: {
|
||||
case Image::FORMAT_ASTC_4x4: {
|
||||
if (RD::get_singleton()->texture_is_format_supported_for_usage(RD::DATA_FORMAT_ASTC_4x4_UNORM_BLOCK, RD::TEXTURE_USAGE_SAMPLING_BIT | RD::TEXTURE_USAGE_CAN_UPDATE_BIT)) {
|
||||
r_format.format = RD::DATA_FORMAT_ASTC_4x4_UNORM_BLOCK;
|
||||
if (p_image->get_format() == Image::FORMAT_ASTC_4x4) {
|
||||
r_format.format_srgb = RD::DATA_FORMAT_ASTC_4x4_SRGB_BLOCK;
|
||||
}
|
||||
r_format.format_srgb = RD::DATA_FORMAT_ASTC_4x4_SRGB_BLOCK;
|
||||
} else {
|
||||
//not supported, reconvert
|
||||
image->decompress();
|
||||
if (p_image->get_format() == Image::FORMAT_ASTC_4x4) {
|
||||
r_format.format = RD::DATA_FORMAT_R8G8B8A8_UNORM;
|
||||
r_format.format_srgb = RD::DATA_FORMAT_R8G8B8A8_SRGB;
|
||||
image->convert(Image::FORMAT_RGBA8);
|
||||
} else {
|
||||
r_format.format = RD::DATA_FORMAT_R16G16B16A16_SFLOAT;
|
||||
image->convert(Image::FORMAT_RGBAH);
|
||||
}
|
||||
r_format.format = RD::DATA_FORMAT_R8G8B8A8_UNORM;
|
||||
r_format.format_srgb = RD::DATA_FORMAT_R8G8B8A8_SRGB;
|
||||
image->convert(Image::FORMAT_RGBA8);
|
||||
}
|
||||
r_format.swizzle_r = RD::TEXTURE_SWIZZLE_R;
|
||||
r_format.swizzle_g = RD::TEXTURE_SWIZZLE_G;
|
||||
|
|
@ -2222,24 +2218,31 @@ Ref<Image> TextureStorage::_validate_texture_format(const Ref<Image> &p_image, T
|
|||
r_format.swizzle_a = RD::TEXTURE_SWIZZLE_A;
|
||||
|
||||
} break; // astc 4x4
|
||||
case Image::FORMAT_ASTC_8x8:
|
||||
case Image::FORMAT_ASTC_8x8_HDR: {
|
||||
if (RD::get_singleton()->texture_is_format_supported_for_usage(RD::DATA_FORMAT_ASTC_8x8_UNORM_BLOCK, RD::TEXTURE_USAGE_SAMPLING_BIT | RD::TEXTURE_USAGE_CAN_UPDATE_BIT)) {
|
||||
r_format.format = RD::DATA_FORMAT_ASTC_8x8_UNORM_BLOCK;
|
||||
if (p_image->get_format() == Image::FORMAT_ASTC_8x8) {
|
||||
r_format.format_srgb = RD::DATA_FORMAT_ASTC_8x8_SRGB_BLOCK;
|
||||
}
|
||||
case Image::FORMAT_ASTC_4x4_HDR: {
|
||||
if (RD::get_singleton()->texture_is_format_supported_for_usage(RD::DATA_FORMAT_ASTC_4x4_SFLOAT_BLOCK, RD::TEXTURE_USAGE_SAMPLING_BIT | RD::TEXTURE_USAGE_CAN_UPDATE_BIT)) {
|
||||
r_format.format = RD::DATA_FORMAT_ASTC_4x4_SFLOAT_BLOCK;
|
||||
} else {
|
||||
//not supported, reconvert
|
||||
image->decompress();
|
||||
if (p_image->get_format() == Image::FORMAT_ASTC_8x8) {
|
||||
r_format.format = RD::DATA_FORMAT_R8G8B8A8_UNORM;
|
||||
r_format.format_srgb = RD::DATA_FORMAT_R8G8B8A8_SRGB;
|
||||
image->convert(Image::FORMAT_RGBA8);
|
||||
} else {
|
||||
r_format.format = RD::DATA_FORMAT_R16G16B16A16_SFLOAT;
|
||||
image->convert(Image::FORMAT_RGBAH);
|
||||
}
|
||||
r_format.format = RD::DATA_FORMAT_R16G16B16A16_SFLOAT;
|
||||
image->convert(Image::FORMAT_RGBAH);
|
||||
}
|
||||
r_format.swizzle_r = RD::TEXTURE_SWIZZLE_R;
|
||||
r_format.swizzle_g = RD::TEXTURE_SWIZZLE_G;
|
||||
r_format.swizzle_b = RD::TEXTURE_SWIZZLE_B;
|
||||
r_format.swizzle_a = RD::TEXTURE_SWIZZLE_A;
|
||||
|
||||
} break; // astc 4x4 HDR
|
||||
case Image::FORMAT_ASTC_8x8: {
|
||||
if (RD::get_singleton()->texture_is_format_supported_for_usage(RD::DATA_FORMAT_ASTC_8x8_UNORM_BLOCK, RD::TEXTURE_USAGE_SAMPLING_BIT | RD::TEXTURE_USAGE_CAN_UPDATE_BIT)) {
|
||||
r_format.format = RD::DATA_FORMAT_ASTC_8x8_UNORM_BLOCK;
|
||||
r_format.format_srgb = RD::DATA_FORMAT_ASTC_8x8_SRGB_BLOCK;
|
||||
} else {
|
||||
//not supported, reconvert
|
||||
image->decompress();
|
||||
r_format.format = RD::DATA_FORMAT_R8G8B8A8_UNORM;
|
||||
r_format.format_srgb = RD::DATA_FORMAT_R8G8B8A8_SRGB;
|
||||
image->convert(Image::FORMAT_RGBA8);
|
||||
}
|
||||
r_format.swizzle_r = RD::TEXTURE_SWIZZLE_R;
|
||||
r_format.swizzle_g = RD::TEXTURE_SWIZZLE_G;
|
||||
|
|
@ -2247,6 +2250,21 @@ Ref<Image> TextureStorage::_validate_texture_format(const Ref<Image> &p_image, T
|
|||
r_format.swizzle_a = RD::TEXTURE_SWIZZLE_A;
|
||||
|
||||
} break; // astc 8x8
|
||||
case Image::FORMAT_ASTC_8x8_HDR: {
|
||||
if (RD::get_singleton()->texture_is_format_supported_for_usage(RD::DATA_FORMAT_ASTC_8x8_SFLOAT_BLOCK, RD::TEXTURE_USAGE_SAMPLING_BIT | RD::TEXTURE_USAGE_CAN_UPDATE_BIT)) {
|
||||
r_format.format = RD::DATA_FORMAT_ASTC_8x8_SFLOAT_BLOCK;
|
||||
} else {
|
||||
//not supported, reconvert
|
||||
image->decompress();
|
||||
r_format.format = RD::DATA_FORMAT_R16G16B16A16_SFLOAT;
|
||||
image->convert(Image::FORMAT_RGBAH);
|
||||
}
|
||||
r_format.swizzle_r = RD::TEXTURE_SWIZZLE_R;
|
||||
r_format.swizzle_g = RD::TEXTURE_SWIZZLE_G;
|
||||
r_format.swizzle_b = RD::TEXTURE_SWIZZLE_B;
|
||||
r_format.swizzle_a = RD::TEXTURE_SWIZZLE_A;
|
||||
|
||||
} break; // astc 8x8 HDR
|
||||
|
||||
default: {
|
||||
}
|
||||
|
|
@ -2589,7 +2607,7 @@ void TextureStorage::_texture_format_from_rd(RD::DataFormat p_rd_format, Texture
|
|||
r_format.swizzle_a = RD::TEXTURE_SWIZZLE_A;
|
||||
} break;
|
||||
case RD::DATA_FORMAT_ASTC_4x4_SRGB_BLOCK: {
|
||||
r_format.image_format = Image::FORMAT_ASTC_4x4_HDR;
|
||||
r_format.image_format = Image::FORMAT_ASTC_4x4;
|
||||
r_format.rd_format = RD::DATA_FORMAT_ASTC_4x4_UNORM_BLOCK;
|
||||
r_format.rd_format_srgb = RD::DATA_FORMAT_ASTC_4x4_SRGB_BLOCK;
|
||||
r_format.swizzle_r = RD::TEXTURE_SWIZZLE_R;
|
||||
|
|
@ -2597,6 +2615,14 @@ void TextureStorage::_texture_format_from_rd(RD::DataFormat p_rd_format, Texture
|
|||
r_format.swizzle_b = RD::TEXTURE_SWIZZLE_B;
|
||||
r_format.swizzle_a = RD::TEXTURE_SWIZZLE_A;
|
||||
|
||||
} break;
|
||||
case RD::DATA_FORMAT_ASTC_4x4_SFLOAT_BLOCK: {
|
||||
r_format.image_format = Image::FORMAT_ASTC_4x4_HDR;
|
||||
r_format.rd_format = RD::DATA_FORMAT_ASTC_4x4_SFLOAT_BLOCK;
|
||||
r_format.swizzle_r = RD::TEXTURE_SWIZZLE_R;
|
||||
r_format.swizzle_g = RD::TEXTURE_SWIZZLE_G;
|
||||
r_format.swizzle_b = RD::TEXTURE_SWIZZLE_B;
|
||||
r_format.swizzle_a = RD::TEXTURE_SWIZZLE_A;
|
||||
} break; // astc 4x4
|
||||
case RD::DATA_FORMAT_ASTC_8x8_UNORM_BLOCK: {
|
||||
// Q: Do we do as we do below, just create the sRGB variant?
|
||||
|
|
@ -2608,14 +2634,21 @@ void TextureStorage::_texture_format_from_rd(RD::DataFormat p_rd_format, Texture
|
|||
r_format.swizzle_a = RD::TEXTURE_SWIZZLE_A;
|
||||
} break;
|
||||
case RD::DATA_FORMAT_ASTC_8x8_SRGB_BLOCK: {
|
||||
r_format.image_format = Image::FORMAT_ASTC_8x8_HDR;
|
||||
r_format.image_format = Image::FORMAT_ASTC_8x8;
|
||||
r_format.rd_format = RD::DATA_FORMAT_ASTC_8x8_UNORM_BLOCK;
|
||||
r_format.rd_format_srgb = RD::DATA_FORMAT_ASTC_8x8_SRGB_BLOCK;
|
||||
r_format.swizzle_r = RD::TEXTURE_SWIZZLE_R;
|
||||
r_format.swizzle_g = RD::TEXTURE_SWIZZLE_G;
|
||||
r_format.swizzle_b = RD::TEXTURE_SWIZZLE_B;
|
||||
r_format.swizzle_a = RD::TEXTURE_SWIZZLE_A;
|
||||
|
||||
} break;
|
||||
case RD::DATA_FORMAT_ASTC_8x8_SFLOAT_BLOCK: {
|
||||
r_format.image_format = Image::FORMAT_ASTC_8x8_HDR;
|
||||
r_format.rd_format = RD::DATA_FORMAT_ASTC_8x8_SFLOAT_BLOCK;
|
||||
r_format.swizzle_r = RD::TEXTURE_SWIZZLE_R;
|
||||
r_format.swizzle_g = RD::TEXTURE_SWIZZLE_G;
|
||||
r_format.swizzle_b = RD::TEXTURE_SWIZZLE_B;
|
||||
r_format.swizzle_a = RD::TEXTURE_SWIZZLE_A;
|
||||
} break; // astc 8x8
|
||||
|
||||
default: {
|
||||
|
|
@ -3684,7 +3717,7 @@ RID TextureStorage::render_target_get_rd_texture_slice(RID p_render_target, uint
|
|||
return rt->color;
|
||||
} else {
|
||||
ERR_FAIL_UNSIGNED_INDEX_V(p_layer, rt->view_count, RID());
|
||||
if (rt->color_slices.size() == 0) {
|
||||
if (rt->color_slices.is_empty()) {
|
||||
for (uint32_t v = 0; v < rt->view_count; v++) {
|
||||
RID slice = RD::get_singleton()->texture_create_shared_from_slice(RD::TextureView(), rt->color, v, 0);
|
||||
rt->color_slices.push_back(slice);
|
||||
|
|
|
|||
|
|
@ -28,8 +28,7 @@
|
|||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/**************************************************************************/
|
||||
|
||||
#ifndef TEXTURE_STORAGE_RD_H
|
||||
#define TEXTURE_STORAGE_RD_H
|
||||
#pragma once
|
||||
|
||||
#include "core/templates/paged_array.h"
|
||||
#include "core/templates/rid_owner.h"
|
||||
|
|
@ -820,5 +819,3 @@ public:
|
|||
};
|
||||
|
||||
} // namespace RendererRD
|
||||
|
||||
#endif // TEXTURE_STORAGE_RD_H
|
||||
|
|
|
|||
|
|
@ -286,6 +286,10 @@ bool Utilities::has_os_feature(const String &p_feature) const {
|
|||
return true;
|
||||
}
|
||||
|
||||
if (p_feature == "astc_hdr" && RD::get_singleton()->texture_is_format_supported_for_usage(RD::DATA_FORMAT_ASTC_4x4_SFLOAT_BLOCK, RD::TEXTURE_USAGE_SAMPLING_BIT)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -28,8 +28,7 @@
|
|||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/**************************************************************************/
|
||||
|
||||
#ifndef UTILITIES_RD_H
|
||||
#define UTILITIES_RD_H
|
||||
#pragma once
|
||||
|
||||
#include "core/templates/rid_owner.h"
|
||||
#include "servers/rendering/storage/utilities.h"
|
||||
|
|
@ -122,5 +121,3 @@ public:
|
|||
};
|
||||
|
||||
} // namespace RendererRD
|
||||
|
||||
#endif // UTILITIES_RD_H
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue