diff options
Diffstat (limited to 'source/blender/gpu/GPU_material.h')
-rw-r--r-- | source/blender/gpu/GPU_material.h | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/source/blender/gpu/GPU_material.h b/source/blender/gpu/GPU_material.h index 922988bf95a..11500f5af60 100644 --- a/source/blender/gpu/GPU_material.h +++ b/source/blender/gpu/GPU_material.h @@ -117,6 +117,15 @@ typedef enum eGPUMaterialStatus { GPU_MAT_SUCCESS, } eGPUMaterialStatus; +/* GPU_MAT_OPTIMIZATION_SKIP for cases where we do not + * plan to perform optimization on a given material. */ +typedef enum eGPUMaterialOptimizationStatus { + GPU_MAT_OPTIMIZATION_SKIP = 0, + GPU_MAT_OPTIMIZATION_READY, + GPU_MAT_OPTIMIZATION_QUEUED, + GPU_MAT_OPTIMIZATION_SUCCESS, +} eGPUMaterialOptimizationStatus; + typedef enum eGPUDefaultValue { GPU_DEFAULT_0 = 0, GPU_DEFAULT_1, @@ -246,6 +255,15 @@ struct Scene *GPU_material_scene(GPUMaterial *material); struct GPUPass *GPU_material_get_pass(GPUMaterial *material); struct GPUShader *GPU_material_get_shader(GPUMaterial *material); const char *GPU_material_get_name(GPUMaterial *material); + +/** + * Material Optimization. + * \note Compiles optimal version of shader graph, populating mat->optimized_pass. + * This operation should always be deferred until existing compilations have completed. + * Default un-optimized materials will still exist for interactive material editing performance. + */ +void GPU_material_optimize(GPUMaterial *mat); + /** * Return can be NULL if it's a world material. */ @@ -256,6 +274,13 @@ struct Material *GPU_material_get_material(GPUMaterial *material); eGPUMaterialStatus GPU_material_status(GPUMaterial *mat); void GPU_material_status_set(GPUMaterial *mat, eGPUMaterialStatus status); +/** + * Return status for async optimization jobs. + */ +eGPUMaterialOptimizationStatus GPU_material_optimization_status(GPUMaterial *mat); +void GPU_material_optimization_status_set(GPUMaterial *mat, eGPUMaterialOptimizationStatus status); +bool GPU_material_optimization_ready(GPUMaterial *mat); + struct GPUUniformBuf *GPU_material_uniform_buffer_get(GPUMaterial *material); /** * Create dynamic UBO from parameters |