mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-27 10:30:08 +01:00
glsl: buffer variables can be readonly and writeonly
In GLSL ES 3.10 session 4.9 [Memory Access Qualifiers], it has the following description: "A variable could be qualified as both readonly and writeonly, disallowing both read and write, but still be passed to imageSize() to have the size queried.". This is for image variable, but not for buffer variables. According to https://github.com/KhronosGroup/OpenGL-API/issues/7 Khronos intent is to allow both readonly and writeonly in buffer variables, and as such it will update the GLSL specification. This commit address this issue, and fixes: KHR-GL{43,44,45}.shader_storage_buffer_object.basic-readonly-writeonly KHR-GLES31.core.shader_storage_buffer_object.basic-readonly-writeonly v2: set correctly fields[i] memory flags (Samuel Pitoiset). Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
This commit is contained in:
parent
1746671a76
commit
c408c92d28
1 changed files with 3 additions and 11 deletions
|
|
@ -7254,11 +7254,6 @@ ast_process_struct_or_iface_block_members(exec_list *instructions,
|
|||
validate_matrix_layout_for_type(state, &loc, decl_type, NULL);
|
||||
}
|
||||
|
||||
if (qual->flags.q.read_only && qual->flags.q.write_only) {
|
||||
_mesa_glsl_error(&loc, state, "buffer variable can't be both "
|
||||
"readonly and writeonly.");
|
||||
}
|
||||
|
||||
foreach_list_typed (ast_declaration, decl, link,
|
||||
&decl_list->declarations) {
|
||||
YYLTYPE loc = decl->get_location();
|
||||
|
|
@ -7434,12 +7429,9 @@ ast_process_struct_or_iface_block_members(exec_list *instructions,
|
|||
/* For readonly and writeonly qualifiers the field definition,
|
||||
* if set, overwrites the layout qualifier.
|
||||
*/
|
||||
if (qual->flags.q.read_only) {
|
||||
fields[i].memory_read_only = true;
|
||||
fields[i].memory_write_only = false;
|
||||
} else if (qual->flags.q.write_only) {
|
||||
fields[i].memory_read_only = false;
|
||||
fields[i].memory_write_only = true;
|
||||
if (qual->flags.q.read_only || qual->flags.q.write_only) {
|
||||
fields[i].memory_read_only = qual->flags.q.read_only;
|
||||
fields[i].memory_write_only = qual->flags.q.write_only;
|
||||
} else {
|
||||
fields[i].memory_read_only =
|
||||
layout ? layout->flags.q.read_only : 0;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue