glsl: handle differences between ARB/EXT versions of shader_image_load_store
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:

committed by
Marek Olšák

parent
5db28b0cf7
commit
cd45d09226
@@ -3488,7 +3488,8 @@ apply_image_qualifier_to_variable(const struct ast_type_qualifier *qual,
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (var->data.mode == ir_var_uniform) {
|
if (var->data.mode == ir_var_uniform) {
|
||||||
if (state->es_shader) {
|
if (state->es_shader ||
|
||||||
|
!(state->is_version(420, 310) || state->ARB_shader_image_load_store_enable)) {
|
||||||
_mesa_glsl_error(loc, state, "all image uniforms must have a "
|
_mesa_glsl_error(loc, state, "all image uniforms must have a "
|
||||||
"format layout qualifier");
|
"format layout qualifier");
|
||||||
} else if (!qual->flags.q.write_only) {
|
} else if (!qual->flags.q.write_only) {
|
||||||
|
@@ -674,7 +674,14 @@ static bool
|
|||||||
shader_image_load_store(const _mesa_glsl_parse_state *state)
|
shader_image_load_store(const _mesa_glsl_parse_state *state)
|
||||||
{
|
{
|
||||||
return (state->is_version(420, 310) ||
|
return (state->is_version(420, 310) ||
|
||||||
state->ARB_shader_image_load_store_enable);
|
state->ARB_shader_image_load_store_enable ||
|
||||||
|
state->EXT_shader_image_load_store_enable);
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool
|
||||||
|
shader_image_load_store_ext(const _mesa_glsl_parse_state *state)
|
||||||
|
{
|
||||||
|
return state->EXT_shader_image_load_store_enable;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
@@ -682,6 +689,7 @@ shader_image_atomic(const _mesa_glsl_parse_state *state)
|
|||||||
{
|
{
|
||||||
return (state->is_version(420, 320) ||
|
return (state->is_version(420, 320) ||
|
||||||
state->ARB_shader_image_load_store_enable ||
|
state->ARB_shader_image_load_store_enable ||
|
||||||
|
state->EXT_shader_image_load_store_enable ||
|
||||||
state->OES_shader_image_atomic_enable);
|
state->OES_shader_image_atomic_enable);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1194,6 +1202,7 @@ enum image_function_flags {
|
|||||||
IMAGE_FUNCTION_MS_ONLY = (1 << 7),
|
IMAGE_FUNCTION_MS_ONLY = (1 << 7),
|
||||||
IMAGE_FUNCTION_AVAIL_ATOMIC_EXCHANGE = (1 << 8),
|
IMAGE_FUNCTION_AVAIL_ATOMIC_EXCHANGE = (1 << 8),
|
||||||
IMAGE_FUNCTION_AVAIL_ATOMIC_ADD = (1 << 9),
|
IMAGE_FUNCTION_AVAIL_ATOMIC_ADD = (1 << 9),
|
||||||
|
IMAGE_FUNCTION_EXT_ONLY = (1 << 10),
|
||||||
};
|
};
|
||||||
|
|
||||||
} /* anonymous namespace */
|
} /* anonymous namespace */
|
||||||
@@ -6936,6 +6945,9 @@ get_image_available_predicate(const glsl_type *type, unsigned flags)
|
|||||||
IMAGE_FUNCTION_AVAIL_ATOMIC))
|
IMAGE_FUNCTION_AVAIL_ATOMIC))
|
||||||
return shader_image_atomic;
|
return shader_image_atomic;
|
||||||
|
|
||||||
|
else if (flags & IMAGE_FUNCTION_EXT_ONLY)
|
||||||
|
return shader_image_load_store_ext;
|
||||||
|
|
||||||
else
|
else
|
||||||
return shader_image_load_store;
|
return shader_image_load_store;
|
||||||
}
|
}
|
||||||
|
@@ -725,6 +725,7 @@ static const _mesa_glsl_extension _mesa_glsl_supported_extensions[] = {
|
|||||||
EXT(EXT_shader_framebuffer_fetch),
|
EXT(EXT_shader_framebuffer_fetch),
|
||||||
EXT(EXT_shader_framebuffer_fetch_non_coherent),
|
EXT(EXT_shader_framebuffer_fetch_non_coherent),
|
||||||
EXT(EXT_shader_image_load_formatted),
|
EXT(EXT_shader_image_load_formatted),
|
||||||
|
EXT(EXT_shader_image_load_store),
|
||||||
EXT(EXT_shader_implicit_conversions),
|
EXT(EXT_shader_implicit_conversions),
|
||||||
EXT(EXT_shader_integer_mix),
|
EXT(EXT_shader_integer_mix),
|
||||||
EXT_AEP(EXT_shader_io_blocks),
|
EXT_AEP(EXT_shader_io_blocks),
|
||||||
|
@@ -337,7 +337,9 @@ struct _mesa_glsl_parse_state {
|
|||||||
|
|
||||||
bool has_shader_image_load_store() const
|
bool has_shader_image_load_store() const
|
||||||
{
|
{
|
||||||
return ARB_shader_image_load_store_enable || is_version(420, 310);
|
return ARB_shader_image_load_store_enable ||
|
||||||
|
EXT_shader_image_load_store_enable ||
|
||||||
|
is_version(420, 310);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool has_bindless() const
|
bool has_bindless() const
|
||||||
@@ -836,6 +838,8 @@ struct _mesa_glsl_parse_state {
|
|||||||
bool EXT_shader_framebuffer_fetch_non_coherent_warn;
|
bool EXT_shader_framebuffer_fetch_non_coherent_warn;
|
||||||
bool EXT_shader_image_load_formatted_enable;
|
bool EXT_shader_image_load_formatted_enable;
|
||||||
bool EXT_shader_image_load_formatted_warn;
|
bool EXT_shader_image_load_formatted_warn;
|
||||||
|
bool EXT_shader_image_load_store_enable;
|
||||||
|
bool EXT_shader_image_load_store_warn;
|
||||||
bool EXT_shader_implicit_conversions_enable;
|
bool EXT_shader_implicit_conversions_enable;
|
||||||
bool EXT_shader_implicit_conversions_warn;
|
bool EXT_shader_implicit_conversions_warn;
|
||||||
bool EXT_shader_integer_mix_enable;
|
bool EXT_shader_integer_mix_enable;
|
||||||
|
Reference in New Issue
Block a user