glsl: add EXT_shader_image_load_store new image functions

This extension has 2 functions that are missing from the ARB versions:
- imageAtomicIncWrap
- imageAtomicDecWrap

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
Pierre-Eric Pelloux-Prayer
2019-07-12 16:38:44 +02:00
committed by Marek Olšák
parent 70a47fb032
commit fc0a2e5d01
3 changed files with 22 additions and 0 deletions

View File

@@ -4423,6 +4423,18 @@ builtin_builder::add_image_functions(bool glsl)
flags | IMAGE_FUNCTION_SUPPORTS_FLOAT_DATA_TYPE |
IMAGE_FUNCTION_MS_ONLY,
ir_intrinsic_image_samples);
/* EXT_shader_image_load_store */
add_image_function(glsl ? "imageAtomicIncWrap" : "__intrinsic_image_atomic_inc_wrap",
"__intrinsic_image_atomic_inc_wrap",
&builtin_builder::_image_prototype, 1,
(atom_flags | IMAGE_FUNCTION_EXT_ONLY),
ir_intrinsic_image_atomic_inc_wrap);
add_image_function(glsl ? "imageAtomicDecWrap" : "__intrinsic_image_atomic_dec_wrap",
"__intrinsic_image_atomic_dec_wrap",
&builtin_builder::_image_prototype, 1,
(atom_flags | IMAGE_FUNCTION_EXT_ONLY),
ir_intrinsic_image_atomic_dec_wrap);
}
ir_variable *

View File

@@ -1106,6 +1106,8 @@ enum ir_intrinsic_id {
ir_intrinsic_image_atomic_comp_swap,
ir_intrinsic_image_size,
ir_intrinsic_image_samples,
ir_intrinsic_image_atomic_inc_wrap,
ir_intrinsic_image_atomic_dec_wrap,
ir_intrinsic_ssbo_load,
ir_intrinsic_ssbo_store = MAKE_INTRINSIC_FOR_TYPE(store, ssbo),

View File

@@ -3938,6 +3938,12 @@ glsl_to_tgsi_visitor::visit_image_intrinsic(ir_call *ir)
case ir_intrinsic_image_atomic_comp_swap:
opcode = TGSI_OPCODE_ATOMCAS;
break;
case ir_intrinsic_image_atomic_inc_wrap:
opcode = TGSI_OPCODE_ATOMINC_WRAP;
break;
case ir_intrinsic_image_atomic_dec_wrap:
opcode = TGSI_OPCODE_ATOMDEC_WRAP;
break;
default:
assert(!"Unexpected intrinsic");
return;
@@ -4063,6 +4069,8 @@ glsl_to_tgsi_visitor::visit(ir_call *ir)
case ir_intrinsic_image_atomic_comp_swap:
case ir_intrinsic_image_size:
case ir_intrinsic_image_samples:
case ir_intrinsic_image_atomic_inc_wrap:
case ir_intrinsic_image_atomic_dec_wrap:
visit_image_intrinsic(ir);
return;