Validate shader stages.
342{
343 const bool has_mesh = config.mesh_shader != nullptr;
344
345 if (has_mesh) {
346 if (config.mesh_shader->get_stage() != vk::ShaderStageFlagBits::eMeshEXT) {
348 "Mesh shader must have stage eMeshEXT");
349 return false;
350 }
351 if (config.task_shader && config.task_shader->get_stage() != vk::ShaderStageFlagBits::eTaskEXT) {
353 "Task shader must have stage eTaskEXT");
354 return false;
355 }
356
357 if (config.vertex_shader || config.geometry_shader || config.tess_control_shader || config.tess_evaluation_shader) {
359 "Mesh shading pipeline cannot contain vertex/geometry/tessellation shaders");
360 return false;
361 }
362 return true;
363 }
364
365 if (!config.vertex_shader) {
367 "Graphics pipeline requires a vertex shader");
368 return false;
369 }
370
371 if (!config.vertex_shader->is_valid()) {
373 "Vertex shader is not valid");
374 return false;
375 }
376
377 if (config.vertex_shader->get_stage() != vk::ShaderStageFlagBits::eVertex) {
379 "Vertex shader has wrong stage: {}", vk::to_string(config.vertex_shader->get_stage()));
380 return false;
381 }
382
383 if (config.fragment_shader && config.fragment_shader->get_stage() != vk::ShaderStageFlagBits::eFragment) {
385 "Fragment shader has wrong stage: {}", vk::to_string(config.fragment_shader->get_stage()));
386 return false;
387 }
388
389 if (config.geometry_shader && config.geometry_shader->get_stage() != vk::ShaderStageFlagBits::eGeometry) {
391 "Geometry shader has wrong stage");
392 return false;
393 }
394
395 if (config.tess_control_shader && config.tess_control_shader->get_stage() != vk::ShaderStageFlagBits::eTessellationControl) {
397 "Tessellation control shader has wrong stage");
398 return false;
399 }
400
401 if (config.tess_evaluation_shader && config.tess_evaluation_shader->get_stage() != vk::ShaderStageFlagBits::eTessellationEvaluation) {
403 "Tessellation evaluation shader has wrong stage");
404 return false;
405 }
406
407 return true;
408}
#define MF_ERROR(comp, ctx,...)
@ GraphicsBackend
Graphics/visual rendering backend (Vulkan, OpenGL)
@ Core
Core engine, backend, subsystems.