mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 15:38:09 +02:00
mesa: implement KHR_shader_subgroup Get* values
Signed-off-by: Qiang Yu <yuq825@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30610>
This commit is contained in:
parent
34f4b5e0ea
commit
d5bc014493
4 changed files with 46 additions and 0 deletions
|
|
@ -1018,6 +1018,12 @@ struct gl_constants
|
|||
|
||||
/** Whether pipe_context::draw_vertex_state is supported. */
|
||||
bool HasDrawVertexState;
|
||||
|
||||
/** GL_KHR_shader_subgroup */
|
||||
GLuint ShaderSubgroupSize;
|
||||
GLuint ShaderSubgroupSupportedStages;
|
||||
GLuint ShaderSubgroupSupportedFeatures;
|
||||
bool ShaderSubgroupQuadAllStages;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -591,6 +591,7 @@ EXTRA_EXT(AMD_framebuffer_multisample_advanced);
|
|||
EXTRA_EXT(ARB_spirv_extensions);
|
||||
EXTRA_EXT(NV_viewport_swizzle);
|
||||
EXTRA_EXT(ARB_sparse_texture);
|
||||
EXTRA_EXT(KHR_shader_subgroup);
|
||||
|
||||
static const int extra_ARB_gl_spirv_or_es2_compat[] = {
|
||||
EXT(ARB_gl_spirv),
|
||||
|
|
|
|||
|
|
@ -696,6 +696,12 @@ descriptor=[
|
|||
[ "VIEWPORT_SWIZZLE_Y_NV", "LOC_CUSTOM, TYPE_ENUM, 0, extra_NV_viewport_swizzle" ],
|
||||
[ "VIEWPORT_SWIZZLE_Z_NV", "LOC_CUSTOM, TYPE_ENUM, 0, extra_NV_viewport_swizzle" ],
|
||||
[ "VIEWPORT_SWIZZLE_W_NV", "LOC_CUSTOM, TYPE_ENUM, 0, extra_NV_viewport_swizzle" ],
|
||||
|
||||
# GL_KHR_shader_subgroup
|
||||
[ "SUBGROUP_SIZE_KHR", "CONTEXT_INT(Const.ShaderSubgroupSize), extra_KHR_shader_subgroup" ],
|
||||
[ "SUBGROUP_SUPPORTED_STAGES_KHR", "CONTEXT_INT(Const.ShaderSubgroupSupportedStages), extra_KHR_shader_subgroup" ],
|
||||
[ "SUBGROUP_SUPPORTED_FEATURES_KHR", "CONTEXT_INT(Const.ShaderSubgroupSupportedFeatures), extra_KHR_shader_subgroup" ],
|
||||
[ "SUBGROUP_QUAD_ALL_STAGES_KHR", "CONTEXT_BOOL(Const.ShaderSubgroupQuadAllStages), extra_KHR_shader_subgroup" ],
|
||||
]},
|
||||
|
||||
# Enums in OpenGL and ES 3.2
|
||||
|
|
|
|||
|
|
@ -73,6 +73,30 @@ static int _clamp(int a, int min, int max)
|
|||
return a;
|
||||
}
|
||||
|
||||
static unsigned mesa_to_gl_stages(unsigned stages)
|
||||
{
|
||||
unsigned ret = 0;
|
||||
|
||||
if (stages & BITFIELD_BIT(MESA_SHADER_VERTEX))
|
||||
ret |= GL_VERTEX_SHADER_BIT;
|
||||
|
||||
if (stages & BITFIELD_BIT(MESA_SHADER_TESS_CTRL))
|
||||
ret |= GL_TESS_CONTROL_SHADER_BIT;
|
||||
|
||||
if (stages & BITFIELD_BIT(MESA_SHADER_TESS_EVAL))
|
||||
ret |= GL_TESS_EVALUATION_SHADER_BIT;
|
||||
|
||||
if (stages & BITFIELD_BIT(MESA_SHADER_GEOMETRY))
|
||||
ret |= GL_GEOMETRY_SHADER_BIT;
|
||||
|
||||
if (stages & BITFIELD_BIT(MESA_SHADER_FRAGMENT))
|
||||
ret |= GL_FRAGMENT_SHADER_BIT;
|
||||
|
||||
if (stages & BITFIELD_BIT(MESA_SHADER_COMPUTE))
|
||||
ret |= GL_COMPUTE_SHADER_BIT;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Query driver to get implementation limits.
|
||||
|
|
@ -624,6 +648,15 @@ void st_init_limits(struct pipe_screen *screen,
|
|||
|
||||
c->HasDrawVertexState =
|
||||
screen->get_param(screen, PIPE_CAP_DRAW_VERTEX_STATE);
|
||||
|
||||
c->ShaderSubgroupSize =
|
||||
screen->get_param(screen, PIPE_CAP_SHADER_SUBGROUP_SIZE);
|
||||
c->ShaderSubgroupSupportedStages =
|
||||
mesa_to_gl_stages(screen->get_param(screen, PIPE_CAP_SHADER_SUBGROUP_SUPPORTED_STAGES));
|
||||
c->ShaderSubgroupSupportedFeatures =
|
||||
screen->get_param(screen, PIPE_CAP_SHADER_SUBGROUP_SUPPORTED_FEATURES);
|
||||
c->ShaderSubgroupQuadAllStages =
|
||||
screen->get_param(screen, PIPE_CAP_SHADER_SUBGROUP_QUAD_ALL_STAGES);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue