mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 09:38:07 +02:00
i965/fs: Define framebuffer read virtual opcode.
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
parent
71d639f69e
commit
f2f75b0cf0
5 changed files with 29 additions and 0 deletions
|
|
@ -951,6 +951,9 @@ enum opcode {
|
|||
FS_OPCODE_FB_WRITE_LOGICAL,
|
||||
|
||||
FS_OPCODE_REP_FB_WRITE,
|
||||
|
||||
FS_OPCODE_FB_READ,
|
||||
|
||||
SHADER_OPCODE_RCP,
|
||||
SHADER_OPCODE_RSQ,
|
||||
SHADER_OPCODE_SQRT,
|
||||
|
|
|
|||
|
|
@ -272,6 +272,7 @@ fs_inst::is_send_from_grf() const
|
|||
case FS_OPCODE_UNIFORM_PULL_CONSTANT_LOAD:
|
||||
return src[1].file == VGRF;
|
||||
case FS_OPCODE_FB_WRITE:
|
||||
case FS_OPCODE_FB_READ:
|
||||
return src[0].file == VGRF;
|
||||
default:
|
||||
if (is_tex())
|
||||
|
|
@ -824,6 +825,7 @@ fs_inst::regs_read(int arg) const
|
|||
{
|
||||
switch (opcode) {
|
||||
case FS_OPCODE_FB_WRITE:
|
||||
case FS_OPCODE_FB_READ:
|
||||
case SHADER_OPCODE_URB_WRITE_SIMD8:
|
||||
case SHADER_OPCODE_URB_WRITE_SIMD8_PER_SLOT:
|
||||
case SHADER_OPCODE_URB_WRITE_SIMD8_MASKED:
|
||||
|
|
|
|||
|
|
@ -400,6 +400,8 @@ private:
|
|||
struct brw_reg implied_header,
|
||||
GLuint nr);
|
||||
void generate_fb_write(fs_inst *inst, struct brw_reg payload);
|
||||
void generate_fb_read(fs_inst *inst, struct brw_reg dst,
|
||||
struct brw_reg payload);
|
||||
void generate_urb_read(fs_inst *inst, struct brw_reg dst, struct brw_reg payload);
|
||||
void generate_urb_write(fs_inst *inst, struct brw_reg payload);
|
||||
void generate_cs_terminate(fs_inst *inst, struct brw_reg payload);
|
||||
|
|
|
|||
|
|
@ -353,6 +353,22 @@ fs_generator::generate_fb_write(fs_inst *inst, struct brw_reg payload)
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
fs_generator::generate_fb_read(fs_inst *inst, struct brw_reg dst,
|
||||
struct brw_reg payload)
|
||||
{
|
||||
brw_wm_prog_data *prog_data =
|
||||
reinterpret_cast<brw_wm_prog_data *>(this->prog_data);
|
||||
const unsigned surf_index =
|
||||
prog_data->binding_table.render_target_start + inst->target;
|
||||
|
||||
gen9_fb_READ(p, dst, payload, surf_index,
|
||||
inst->header_size, inst->regs_written,
|
||||
prog_data->persample_dispatch);
|
||||
|
||||
brw_mark_surface_used(&prog_data->base, surf_index);
|
||||
}
|
||||
|
||||
void
|
||||
fs_generator::generate_mov_indirect(fs_inst *inst,
|
||||
struct brw_reg dst,
|
||||
|
|
@ -1965,6 +1981,10 @@ fs_generator::generate_code(const cfg_t *cfg, int dispatch_width)
|
|||
generate_fb_write(inst, src[0]);
|
||||
break;
|
||||
|
||||
case FS_OPCODE_FB_READ:
|
||||
generate_fb_read(inst, dst, src[0]);
|
||||
break;
|
||||
|
||||
case FS_OPCODE_MOV_DISPATCH_TO_FLAGS:
|
||||
generate_mov_dispatch_to_flags(inst);
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -165,6 +165,8 @@ brw_instruction_name(const struct brw_device_info *devinfo, enum opcode op)
|
|||
return "fb_write_logical";
|
||||
case FS_OPCODE_REP_FB_WRITE:
|
||||
return "rep_fb_write";
|
||||
case FS_OPCODE_FB_READ:
|
||||
return "fb_read";
|
||||
|
||||
case SHADER_OPCODE_RCP:
|
||||
return "rcp";
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue