feat: updated godot version
This commit is contained in:
parent
0c508b0831
commit
42b028dbb5
4694 changed files with 236470 additions and 401376 deletions
|
|
@ -31,9 +31,9 @@
|
|||
#include "rendering_shader_container.h"
|
||||
|
||||
#include "core/io/compression.h"
|
||||
#include "servers/rendering/renderer_rd/shader_rd.h"
|
||||
|
||||
#include <thirdparty/spirv-reflect/spirv_reflect.h>
|
||||
#include "servers/rendering/renderer_rd/shader_rd.h"
|
||||
#include "thirdparty/spirv-reflect/spirv_reflect.h"
|
||||
|
||||
static inline uint32_t aligned_to(uint32_t p_size, uint32_t p_alignment) {
|
||||
if (p_size % p_alignment) {
|
||||
|
|
@ -242,38 +242,12 @@ Error RenderingShaderContainer::reflect_spirv(const String &p_shader_name, Span<
|
|||
LocalVector<ReflectShaderStage> &r_refl = r_shader.shader_stages;
|
||||
r_refl.resize(spirv_size);
|
||||
|
||||
bool pipeline_type_detected = false;
|
||||
for (uint32_t i = 0; i < spirv_size; i++) {
|
||||
RDC::ShaderStage stage = p_spirv[i].shader_stage;
|
||||
RDC::ShaderStage stage_flag = (RDC::ShaderStage)(1 << stage);
|
||||
r_refl[i].shader_stage = stage;
|
||||
r_refl[i]._spirv_data = p_spirv[i].spirv;
|
||||
|
||||
if (!pipeline_type_detected) {
|
||||
switch (stage) {
|
||||
case RDC::SHADER_STAGE_VERTEX:
|
||||
case RDC::SHADER_STAGE_FRAGMENT:
|
||||
case RDC::SHADER_STAGE_TESSELATION_CONTROL:
|
||||
case RDC::SHADER_STAGE_TESSELATION_EVALUATION:
|
||||
r_shader.pipeline_type = RDC::PIPELINE_TYPE_RASTERIZATION;
|
||||
break;
|
||||
case RDC::SHADER_STAGE_COMPUTE:
|
||||
r_shader.pipeline_type = RDC::PIPELINE_TYPE_COMPUTE;
|
||||
break;
|
||||
case RDC::SHADER_STAGE_RAYGEN:
|
||||
case RDC::SHADER_STAGE_ANY_HIT:
|
||||
case RDC::SHADER_STAGE_CLOSEST_HIT:
|
||||
case RDC::SHADER_STAGE_MISS:
|
||||
case RDC::SHADER_STAGE_INTERSECTION:
|
||||
r_shader.pipeline_type = RDC::PIPELINE_TYPE_RAYTRACING;
|
||||
break;
|
||||
default:
|
||||
DEV_ASSERT(false && "Unknown shader stage.");
|
||||
}
|
||||
|
||||
pipeline_type_detected = true;
|
||||
}
|
||||
|
||||
const Vector<uint64_t> &dynamic_buffers = p_spirv[i].dynamic_buffers;
|
||||
|
||||
if (stage == RDC::SHADER_STAGE_COMPUTE) {
|
||||
|
|
@ -281,7 +255,7 @@ Error RenderingShaderContainer::reflect_spirv(const String &p_shader_name, Span<
|
|||
"Compute shaders can only receive one stage, dedicated to compute.");
|
||||
}
|
||||
ERR_FAIL_COND_V_MSG(reflection.stages_bits.has_flag(stage_flag), FAILED,
|
||||
"Stage " + String(RDC::SHADER_STAGE_NAMES[stage]) + " submitted more than once.");
|
||||
"Stage " + String(RDC::SHADER_STAGE_NAMES[p_spirv[i].shader_stage]) + " submitted more than once.");
|
||||
reflection.stages_bits.set_flag(stage_flag);
|
||||
|
||||
{
|
||||
|
|
@ -396,7 +370,8 @@ Error RenderingShaderContainer::reflect_spirv(const String &p_shader_name, Span<
|
|||
is_image = true;
|
||||
} break;
|
||||
case SPV_REFLECT_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR: {
|
||||
uniform.type = RDC::UNIFORM_TYPE_ACCELERATION_STRUCTURE;
|
||||
ERR_PRINT("Acceleration structure not supported.");
|
||||
continue;
|
||||
} break;
|
||||
}
|
||||
|
||||
|
|
@ -492,31 +467,22 @@ Error RenderingShaderContainer::reflect_spirv(const String &p_shader_name, Span<
|
|||
SpvReflectSpecializationConstant *spc = spec_constants[j];
|
||||
sconst.set_spv_reflect(stage, spc);
|
||||
|
||||
if (spc->default_value_size != 4) {
|
||||
ERR_FAIL_V_MSG(FAILED, vformat("Reflection of SPIR-V shader stage '%s' failed because the specialization constant #%d's default value is not 4 bytes long (%d) and is currently not supported.", RDC::SHADER_STAGE_NAMES[p_spirv[i].shader_stage], spc->constant_id, spc->default_value_size));
|
||||
}
|
||||
|
||||
sconst.constant_id = spc->constant_id;
|
||||
sconst.int_value = 0; // Clear previous value JIC.
|
||||
|
||||
switch (spc->type_description->op) {
|
||||
case SpvOpTypeBool:
|
||||
switch (spc->constant_type) {
|
||||
case SPV_REFLECT_SPECIALIZATION_CONSTANT_BOOL: {
|
||||
sconst.type = RDC::PIPELINE_SPECIALIZATION_CONSTANT_TYPE_BOOL;
|
||||
sconst.bool_value = *(uint32_t *)(spc->default_value);
|
||||
break;
|
||||
case SpvOpTypeInt:
|
||||
sconst.bool_value = spc->default_value.int_bool_value != 0;
|
||||
} break;
|
||||
case SPV_REFLECT_SPECIALIZATION_CONSTANT_INT: {
|
||||
sconst.type = RDC::PIPELINE_SPECIALIZATION_CONSTANT_TYPE_INT;
|
||||
sconst.int_value = *(uint32_t *)(spc->default_value);
|
||||
break;
|
||||
case SpvOpTypeFloat:
|
||||
sconst.int_value = spc->default_value.int_bool_value;
|
||||
} break;
|
||||
case SPV_REFLECT_SPECIALIZATION_CONSTANT_FLOAT: {
|
||||
sconst.type = RDC::PIPELINE_SPECIALIZATION_CONSTANT_TYPE_FLOAT;
|
||||
sconst.float_value = *(float *)(spc->default_value);
|
||||
break;
|
||||
default:
|
||||
ERR_FAIL_V_MSG(FAILED, vformat("Reflection of SPIR-V shader stage '%s' failed because the specialization constant #%d does not use a known operation (%d).", RDC::SHADER_STAGE_NAMES[p_spirv[i].shader_stage], spc->constant_id, spc->type_description->op));
|
||||
break;
|
||||
sconst.float_value = spc->default_value.float_value;
|
||||
} break;
|
||||
}
|
||||
|
||||
sconst.stages.set_flag(stage_flag);
|
||||
|
||||
for (uint32_t k = 0; k < reflection.specialization_constants.size(); k++) {
|
||||
|
|
@ -645,7 +611,7 @@ void RenderingShaderContainer::set_from_shader_reflection(const ReflectShader &p
|
|||
reflection_data.vertex_input_mask = p_reflection.vertex_input_mask;
|
||||
reflection_data.fragment_output_mask = p_reflection.fragment_output_mask;
|
||||
reflection_data.specialization_constants_count = p_reflection.specialization_constants.size();
|
||||
reflection_data.pipeline_type = p_reflection.pipeline_type;
|
||||
reflection_data.is_compute = p_reflection.is_compute();
|
||||
reflection_data.has_multiview = p_reflection.has_multiview;
|
||||
reflection_data.has_dynamic_buffers = p_reflection.has_dynamic_buffers;
|
||||
reflection_data.compute_local_size[0] = p_reflection.compute_local_size[0];
|
||||
|
|
@ -702,7 +668,7 @@ RenderingDeviceCommons::ShaderReflection RenderingShaderContainer::get_shader_re
|
|||
shader_refl.push_constant_stages = reflection_data.push_constant_stages_mask;
|
||||
shader_refl.vertex_input_mask = reflection_data.vertex_input_mask;
|
||||
shader_refl.fragment_output_mask = reflection_data.fragment_output_mask;
|
||||
shader_refl.pipeline_type = reflection_data.pipeline_type;
|
||||
shader_refl.is_compute = reflection_data.is_compute;
|
||||
shader_refl.has_multiview = reflection_data.has_multiview;
|
||||
shader_refl.has_dynamic_buffers = reflection_data.has_dynamic_buffers;
|
||||
shader_refl.compute_local_size[0] = reflection_data.compute_local_size[0];
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue