glsl: allow bindless samplers/images inside interface blocks
From section 4.3.7 of the ARB_bindless_texture spec: "(remove the following bullet from the last list on p. 39, thereby permitting sampler types in interface blocks; image types are also permitted in blocks by this extension)" * sampler types are not allowed v3: - update the spec comment - update the glsl error message Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com> Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
This commit is contained in:
@@ -6965,9 +6965,19 @@ ast_process_struct_or_iface_block_members(exec_list *instructions,
|
|||||||
assert(decl_type);
|
assert(decl_type);
|
||||||
|
|
||||||
if (is_interface) {
|
if (is_interface) {
|
||||||
if (decl_type->contains_opaque()) {
|
/* From section 4.3.7 of the ARB_bindless_texture spec:
|
||||||
|
*
|
||||||
|
* "(remove the following bullet from the last list on p. 39,
|
||||||
|
* thereby permitting sampler types in interface blocks; image
|
||||||
|
* types are also permitted in blocks by this extension)"
|
||||||
|
*
|
||||||
|
* * sampler types are not allowed
|
||||||
|
*/
|
||||||
|
if (decl_type->contains_atomic() ||
|
||||||
|
(!state->has_bindless() && decl_type->contains_opaque())) {
|
||||||
_mesa_glsl_error(&loc, state, "uniform/buffer in non-default "
|
_mesa_glsl_error(&loc, state, "uniform/buffer in non-default "
|
||||||
"interface block contains opaque variable");
|
"interface block contains %s variable",
|
||||||
|
state->has_bindless() ? "atomic" : "opaque");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (decl_type->contains_atomic()) {
|
if (decl_type->contains_atomic()) {
|
||||||
|
Reference in New Issue
Block a user