EEVEE-Next: Cleanup Lookdev as its shaders are never deferred compiled

Code assumed that lookdev shaders could be deferred compiled, but
that is never the case. This PR cleans up some related code and
mechanisms that were introduced because we thought it was the case.

Pull Request: https://projects.blender.org/blender/blender/pulls/114368
This commit is contained in:
Jeroen Bakker
2023-11-22 14:44:57 +01:00
committed by Clément Foucault
parent 266f4305a7
commit fdf9750df9
4 changed files with 15 additions and 31 deletions

View File

@@ -113,23 +113,21 @@ bNodeTree *LookdevWorldNodeTree::nodetree_get(const LookdevParameters &parameter
LookdevModule::~LookdevModule()
{
GPU_material_free(&gpu_materials_);
gpu_material_ = nullptr;
}
bool LookdevModule::sync_world()
{
/* Check based on the v3d if the world is overridden. */
LookdevParameters new_parameters(inst_.v3d);
bool parameters_changed = parameters_ != new_parameters;
if (parameters_changed) {
if (parameters_.gpu_parameters_changed(new_parameters)) {
GPU_material_free(&gpu_materials_);
gpu_material_ = nullptr;
}
const bool parameters_changed = parameters_ != new_parameters;
const bool gpu_parameters_changed = parameters_.gpu_parameters_changed(new_parameters);
if (gpu_parameters_changed) {
GPU_material_free(&gpu_materials_);
}
if (parameters_changed) {
parameters_ = new_parameters;
inst_.sampling.reset();
gpu_status_ = GPU_MAT_CREATED;
}
if (parameters_.show_scene_world) {
@@ -137,25 +135,15 @@ bool LookdevModule::sync_world()
}
::bNodeTree *node_tree = world_override_tree.nodetree_get(parameters_);
gpu_material_ = inst_.shaders.material_shader_get("EEVEE Lookdev Background",
gpu_materials_,
node_tree,
MAT_PIPE_DEFERRED,
MAT_GEOM_WORLD,
true);
GPUMaterial *gpu_material = inst_.shaders.material_shader_get(
"EEVEE Lookdev Background", gpu_materials_, node_tree, MAT_PIPE_DEFERRED, MAT_GEOM_WORLD);
if (assign_if_different(gpu_status_, GPU_material_status(gpu_material_)) &&
gpu_status_ == GPU_MAT_SUCCESS)
{
if (gpu_parameters_changed) {
inst_.reflection_probes.sync_world_lookdev();
}
else if (gpu_status_ == GPU_MAT_QUEUED) {
inst_.sampling.reset();
DRW_viewport_request_redraw();
}
inst_.pipelines.world.sync(gpu_material_);
inst_.pipelines.background.sync(gpu_material_, parameters_.background_opacity);
inst_.pipelines.world.sync(gpu_material);
inst_.pipelines.background.sync(gpu_material, parameters_.background_opacity);
return true;
}

View File

@@ -79,8 +79,6 @@ class LookdevModule {
LookdevParameters parameters_;
ListBase gpu_materials_ = {nullptr, nullptr};
GPUMaterial *gpu_material_ = nullptr;
eGPUMaterialStatus gpu_status_ = GPU_MAT_CREATED;
public:
LookdevModule(Instance &inst) : inst_(inst){};

View File

@@ -687,8 +687,7 @@ GPUMaterial *ShaderModule::material_shader_get(const char *name,
ListBase &materials,
bNodeTree *nodetree,
eMaterialPipeline pipeline_type,
eMaterialGeometry geometry_type,
bool is_lookdev)
eMaterialGeometry geometry_type)
{
uint64_t shader_uuid = shader_uuid_from_material_type(pipeline_type, geometry_type);
@@ -701,10 +700,10 @@ GPUMaterial *ShaderModule::material_shader_get(const char *name,
name,
shader_uuid,
is_volume,
is_lookdev,
false,
codegen_callback,
this);
GPU_material_status_set(gpumat, GPU_MAT_QUEUED);
GPU_material_status_set(gpumat, GPU_MAT_CREATED);
GPU_material_compile(gpumat);
/* Queue deferred material optimization. */
DRW_shader_queue_optimize_material(gpumat);

View File

@@ -173,8 +173,7 @@ class ShaderModule {
ListBase &materials,
bNodeTree *nodetree,
eMaterialPipeline pipeline_type,
eMaterialGeometry geometry_type,
bool is_lookdev);
eMaterialGeometry geometry_type);
void material_create_info_ammend(GPUMaterial *mat, GPUCodegenOutput *codegen);