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:

committed by
Marek Olšák

parent
70a47fb032
commit
fc0a2e5d01
@@ -4423,6 +4423,18 @@ builtin_builder::add_image_functions(bool glsl)
|
|||||||
flags | IMAGE_FUNCTION_SUPPORTS_FLOAT_DATA_TYPE |
|
flags | IMAGE_FUNCTION_SUPPORTS_FLOAT_DATA_TYPE |
|
||||||
IMAGE_FUNCTION_MS_ONLY,
|
IMAGE_FUNCTION_MS_ONLY,
|
||||||
ir_intrinsic_image_samples);
|
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 *
|
ir_variable *
|
||||||
|
@@ -1106,6 +1106,8 @@ enum ir_intrinsic_id {
|
|||||||
ir_intrinsic_image_atomic_comp_swap,
|
ir_intrinsic_image_atomic_comp_swap,
|
||||||
ir_intrinsic_image_size,
|
ir_intrinsic_image_size,
|
||||||
ir_intrinsic_image_samples,
|
ir_intrinsic_image_samples,
|
||||||
|
ir_intrinsic_image_atomic_inc_wrap,
|
||||||
|
ir_intrinsic_image_atomic_dec_wrap,
|
||||||
|
|
||||||
ir_intrinsic_ssbo_load,
|
ir_intrinsic_ssbo_load,
|
||||||
ir_intrinsic_ssbo_store = MAKE_INTRINSIC_FOR_TYPE(store, ssbo),
|
ir_intrinsic_ssbo_store = MAKE_INTRINSIC_FOR_TYPE(store, ssbo),
|
||||||
|
@@ -3938,6 +3938,12 @@ glsl_to_tgsi_visitor::visit_image_intrinsic(ir_call *ir)
|
|||||||
case ir_intrinsic_image_atomic_comp_swap:
|
case ir_intrinsic_image_atomic_comp_swap:
|
||||||
opcode = TGSI_OPCODE_ATOMCAS;
|
opcode = TGSI_OPCODE_ATOMCAS;
|
||||||
break;
|
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:
|
default:
|
||||||
assert(!"Unexpected intrinsic");
|
assert(!"Unexpected intrinsic");
|
||||||
return;
|
return;
|
||||||
@@ -4063,6 +4069,8 @@ glsl_to_tgsi_visitor::visit(ir_call *ir)
|
|||||||
case ir_intrinsic_image_atomic_comp_swap:
|
case ir_intrinsic_image_atomic_comp_swap:
|
||||||
case ir_intrinsic_image_size:
|
case ir_intrinsic_image_size:
|
||||||
case ir_intrinsic_image_samples:
|
case ir_intrinsic_image_samples:
|
||||||
|
case ir_intrinsic_image_atomic_inc_wrap:
|
||||||
|
case ir_intrinsic_image_atomic_dec_wrap:
|
||||||
visit_image_intrinsic(ir);
|
visit_image_intrinsic(ir);
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user