mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-21 04:38:09 +02:00
mesa: Report GL_SHADER_BINARY_FORMAT_SPIR_V as supported
GL_ARB_gl_spirv introduced it, but its corresponding format was never listed in GL_SHADER_BINARY_FORMATS. Fixes:5bc03d25("mesa: implement SPIR-V loading in glShaderBinary") Closes: #7644 Reviewed-by: Marek Olšák <marek.olsak@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19559> (cherry picked from commitc0c911d9ba)
This commit is contained in:
parent
e65d574613
commit
826be8bafe
8 changed files with 33 additions and 7 deletions
|
|
@ -6799,7 +6799,7 @@
|
|||
"description": "mesa: Report GL_SHADER_BINARY_FORMAT_SPIR_V as supported",
|
||||
"nominated": true,
|
||||
"nomination_type": 1,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"main_sha": null,
|
||||
"because_sha": "5bc03d250861df6836f9c9fe37e0609c1777a87b"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -936,6 +936,9 @@ struct gl_constants
|
|||
/** GL_ARB_get_program_binary */
|
||||
GLuint NumProgramBinaryFormats;
|
||||
|
||||
/** GL_ARB_gl_spirv */
|
||||
GLuint NumShaderBinaryFormats;
|
||||
|
||||
/** GL_NV_conservative_raster */
|
||||
GLuint MaxSubpixelPrecisionBiasBits;
|
||||
|
||||
|
|
|
|||
|
|
@ -584,6 +584,13 @@ EXTRA_EXT(ARB_spirv_extensions);
|
|||
EXTRA_EXT(NV_viewport_swizzle);
|
||||
EXTRA_EXT(ARB_sparse_texture);
|
||||
|
||||
static const int extra_ARB_gl_spirv_or_es2_compat[] = {
|
||||
EXT(ARB_gl_spirv),
|
||||
EXT(ARB_ES2_compatibility),
|
||||
EXTRA_API_ES2,
|
||||
EXTRA_END
|
||||
};
|
||||
|
||||
static const int
|
||||
extra_ARB_color_buffer_float_or_glcore[] = {
|
||||
EXT(ARB_color_buffer_float),
|
||||
|
|
@ -1303,6 +1310,14 @@ find_custom_value(struct gl_context *ctx, const struct value_desc *d, union valu
|
|||
v->value_int_n.ints[0] = GL_PROGRAM_BINARY_FORMAT_MESA;
|
||||
}
|
||||
break;
|
||||
/* GL_ARB_gl_spirv */
|
||||
case GL_SHADER_BINARY_FORMATS:
|
||||
assert(ctx->Const.NumShaderBinaryFormats <= 1);
|
||||
v->value_int_n.n = MIN2(ctx->Const.NumShaderBinaryFormats, 1);
|
||||
if (ctx->Const.NumShaderBinaryFormats > 0) {
|
||||
v->value_int_n.ints[0] = GL_SHADER_BINARY_FORMAT_SPIR_V;
|
||||
}
|
||||
break;
|
||||
/* ARB_spirv_extensions */
|
||||
case GL_NUM_SPIR_V_EXTENSIONS:
|
||||
v->value_int = _mesa_get_spirv_extension_count(ctx);
|
||||
|
|
|
|||
|
|
@ -343,8 +343,10 @@ descriptor=[
|
|||
[ "MAX_VARYING_VECTORS", "CONTEXT_INT(Const.MaxVarying), extra_ARB_ES2_compatibility_api_es2" ],
|
||||
[ "MAX_VERTEX_UNIFORM_VECTORS", "LOC_CUSTOM, TYPE_INT, 0, extra_ARB_ES2_compatibility_api_es2" ],
|
||||
[ "MAX_FRAGMENT_UNIFORM_VECTORS", "LOC_CUSTOM, TYPE_INT, 0, extra_ARB_ES2_compatibility_api_es2" ],
|
||||
[ "NUM_SHADER_BINARY_FORMATS", "CONST(0), extra_ARB_ES2_compatibility_api_es2" ],
|
||||
[ "SHADER_BINARY_FORMATS", "LOC_CUSTOM, TYPE_INVALID, 0, extra_ARB_ES2_compatibility_api_es2" ],
|
||||
|
||||
# GL_ARB_ES2_compatibility / GL_ARB_gl_spirv
|
||||
[ "NUM_SHADER_BINARY_FORMATS", "CONTEXT_UINT(Const.NumShaderBinaryFormats), extra_ARB_gl_spirv_or_es2_compat" ],
|
||||
[ "SHADER_BINARY_FORMATS", "LOC_CUSTOM, TYPE_INT_N, 0, extra_ARB_gl_spirv_or_es2_compat" ],
|
||||
|
||||
# GL_ARB_get_program_binary / GL_OES_get_program_binary
|
||||
[ "NUM_PROGRAM_BINARY_FORMATS", "CONTEXT_UINT(Const.NumProgramBinaryFormats), NO_EXTRA" ],
|
||||
|
|
|
|||
|
|
@ -663,7 +663,7 @@ st_create_context_priv(struct gl_context *ctx, struct pipe_context *pipe,
|
|||
PIPE_CAP_MAX_TEXTURE_UPLOAD_MEMORY_BUDGET));
|
||||
|
||||
/* GL limits and extensions */
|
||||
st_init_limits(screen, &ctx->Const, &ctx->Extensions);
|
||||
st_init_limits(screen, &ctx->Const, &ctx->Extensions, ctx->API);
|
||||
st_init_extensions(screen, &ctx->Const,
|
||||
&ctx->Extensions, &st->options, ctx->API);
|
||||
|
||||
|
|
|
|||
|
|
@ -79,7 +79,8 @@ static int _clamp(int a, int min, int max)
|
|||
* Note that we have to limit/clamp against Mesa's internal limits too.
|
||||
*/
|
||||
void st_init_limits(struct pipe_screen *screen,
|
||||
struct gl_constants *c, struct gl_extensions *extensions)
|
||||
struct gl_constants *c, struct gl_extensions *extensions,
|
||||
gl_api api)
|
||||
{
|
||||
int supported_irs;
|
||||
unsigned sh;
|
||||
|
|
@ -491,6 +492,10 @@ void st_init_limits(struct pipe_screen *screen,
|
|||
/* GL_ARB_get_program_binary */
|
||||
if (screen->get_disk_shader_cache && screen->get_disk_shader_cache(screen))
|
||||
c->NumProgramBinaryFormats = 1;
|
||||
/* GL_ARB_gl_spirv */
|
||||
if (screen->get_param(screen, PIPE_CAP_GL_SPIRV) &&
|
||||
(api == API_OPENGL_CORE || api == API_OPENGL_COMPAT))
|
||||
c->NumShaderBinaryFormats = 1;
|
||||
|
||||
c->MaxAtomicBufferBindings =
|
||||
MAX2(c->Program[MESA_SHADER_FRAGMENT].MaxAtomicBuffers,
|
||||
|
|
|
|||
|
|
@ -35,7 +35,8 @@ struct pipe_screen;
|
|||
|
||||
extern void st_init_limits(struct pipe_screen *screen,
|
||||
struct gl_constants *c,
|
||||
struct gl_extensions *extensions);
|
||||
struct gl_extensions *extensions,
|
||||
gl_api api);
|
||||
|
||||
extern void st_init_extensions(struct pipe_screen *screen,
|
||||
struct gl_constants *consts,
|
||||
|
|
|
|||
|
|
@ -1431,7 +1431,7 @@ get_version(struct pipe_screen *screen,
|
|||
_mesa_init_constants(&consts, api);
|
||||
_mesa_init_extensions(&extensions);
|
||||
|
||||
st_init_limits(screen, &consts, &extensions);
|
||||
st_init_limits(screen, &consts, &extensions, api);
|
||||
st_init_extensions(screen, &consts, &extensions, options, api);
|
||||
version = _mesa_get_version(&extensions, &consts, api);
|
||||
free(consts.SpirVExtensions);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue