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:
committed by
Clément Foucault
parent
266f4305a7
commit
fdf9750df9
@@ -113,23 +113,21 @@ bNodeTree *LookdevWorldNodeTree::nodetree_get(const LookdevParameters ¶meter
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -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){};
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user