From 7ba64547ae2766ab7b0bdd9cf864e441dbdc91bf Mon Sep 17 00:00:00 2001 From: Qiang Yu Date: Mon, 10 Feb 2025 21:28:53 +0800 Subject: [PATCH] mesa: implement EXT_mesh_shader glGetActive* values MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-by: Marek Olšák Part-of: --- src/mesa/main/shader_query.cpp | 19 +++++++++++++++---- src/mesa/main/uniforms.c | 12 ++++++++++++ 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/mesa/main/shader_query.cpp b/src/mesa/main/shader_query.cpp index 0d40f9e0866..209e9472941 100644 --- a/src/mesa/main/shader_query.cpp +++ b/src/mesa/main/shader_query.cpp @@ -1247,6 +1247,10 @@ stage_from_enum(GLenum ref) return MESA_SHADER_FRAGMENT; case GL_REFERENCED_BY_COMPUTE_SHADER: return MESA_SHADER_COMPUTE; + case GL_REFERENCED_BY_TASK_SHADER_EXT: + return MESA_SHADER_TASK; + case GL_REFERENCED_BY_MESH_SHADER_EXT: + return MESA_SHADER_MESH; default: assert(!"shader stage not supported"); return MESA_SHADER_MESH_STAGES; @@ -1549,15 +1553,22 @@ _mesa_program_resource_prop(struct gl_shader_program *shProg, case GL_NUM_ACTIVE_VARIABLES: case GL_ACTIVE_VARIABLES: return get_buffer_property(shProg, res, prop, val, glthread, caller); - case GL_REFERENCED_BY_COMPUTE_SHADER: - if (!_mesa_has_compute_shaders(ctx)) - goto invalid_enum; - FALLTHROUGH; case GL_REFERENCED_BY_VERTEX_SHADER: case GL_REFERENCED_BY_TESS_CONTROL_SHADER: case GL_REFERENCED_BY_TESS_EVALUATION_SHADER: case GL_REFERENCED_BY_GEOMETRY_SHADER: case GL_REFERENCED_BY_FRAGMENT_SHADER: + case GL_REFERENCED_BY_COMPUTE_SHADER: + case GL_REFERENCED_BY_TASK_SHADER_EXT: + case GL_REFERENCED_BY_MESH_SHADER_EXT: + if (prop == GL_REFERENCED_BY_COMPUTE_SHADER) { + if (!_mesa_has_compute_shaders(ctx)) + goto invalid_enum; + } else if (prop == GL_REFERENCED_BY_TASK_SHADER_EXT || + prop == GL_REFERENCED_BY_MESH_SHADER_EXT) { + if (!_mesa_has_EXT_mesh_shader(ctx)) + goto invalid_enum; + } switch (res->Type) { case GL_UNIFORM: case GL_PROGRAM_INPUT: diff --git a/src/mesa/main/uniforms.c b/src/mesa/main/uniforms.c index 112cdf8605a..cabcbbc762d 100644 --- a/src/mesa/main/uniforms.c +++ b/src/mesa/main/uniforms.c @@ -1308,6 +1308,18 @@ mesa_bufferiv(struct gl_shader_program *shProg, GLenum type, GL_REFERENCED_BY_COMPUTE_SHADER, params, false, caller); return; + case GL_UNIFORM_BLOCK_REFERENCED_BY_TASK_SHADER_EXT: + case GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TASK_SHADER_EXT: + _mesa_program_resource_prop(shProg, res, index, + GL_REFERENCED_BY_TASK_SHADER_EXT, params, + false, caller); + return; + case GL_UNIFORM_BLOCK_REFERENCED_BY_MESH_SHADER_EXT: + case GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_MESH_SHADER_EXT: + _mesa_program_resource_prop(shProg, res, index, + GL_REFERENCED_BY_MESH_SHADER_EXT, params, + false, caller); + return; default: _mesa_error(ctx, GL_INVALID_ENUM, "%s(pname 0x%x (%s))", caller, pname,