diff options
author | Francisco Jerez <[email protected]> | 2013-09-11 14:01:50 -0700 |
---|---|---|
committer | Francisco Jerez <[email protected]> | 2013-10-29 12:40:56 -0700 |
commit | cfaaa9bbb7a6ab5819f4fa9e38352b72d6293cff (patch) | |
tree | b1f000c5e093af5a6e1636190a8903aaedee9b7d /src/mesa/drivers/dri/i965/brw_fs_generator.cpp | |
parent | 5809512b17d3216045b612d359f97759644945f1 (diff) |
i965/gen7: Implement code generation for untyped atomic instructions.
Reviewed-by: Paul Berry <[email protected]>
Diffstat (limited to 'src/mesa/drivers/dri/i965/brw_fs_generator.cpp')
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_fs_generator.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_fs_generator.cpp b/src/mesa/drivers/dri/i965/brw_fs_generator.cpp index 853120dc9bf..f639d7e185b 100644 --- a/src/mesa/drivers/dri/i965/brw_fs_generator.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs_generator.cpp @@ -1190,6 +1190,23 @@ fs_generator::generate_shader_time_add(fs_inst *inst, } void +fs_generator::generate_untyped_atomic(fs_inst *inst, struct brw_reg dst, + struct brw_reg atomic_op, + struct brw_reg surf_index) +{ + assert(atomic_op.file == BRW_IMMEDIATE_VALUE && + atomic_op.type == BRW_REGISTER_TYPE_UD && + surf_index.file == BRW_IMMEDIATE_VALUE && + surf_index.type == BRW_REGISTER_TYPE_UD); + + brw_untyped_atomic(p, dst, brw_message_reg(inst->base_mrf), + atomic_op.dw1.ud, surf_index.dw1.ud, + inst->mlen, dispatch_width / 8); + + mark_surface_used(surf_index.dw1.ud); +} + +void fs_generator::generate_code(exec_list *instructions) { int last_native_insn_offset = p->next_insn_offset; @@ -1588,6 +1605,10 @@ fs_generator::generate_code(exec_list *instructions) generate_shader_time_add(inst, src[0], src[1], src[2]); break; + case SHADER_OPCODE_UNTYPED_ATOMIC: + generate_untyped_atomic(inst, dst, src[0], src[1]); + break; + case FS_OPCODE_SET_SIMD4X2_OFFSET: generate_set_simd4x2_offset(inst, dst, src[0]); break; |