mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 09:28:07 +02:00
i965/fs: Remove dead IR construction code from the visitor.
Reviewed-by: Matt Turner <mattst88@gmail.com>
This commit is contained in:
parent
51948085a2
commit
44928b799a
4 changed files with 0 additions and 439 deletions
|
|
@ -214,143 +214,6 @@ fs_inst::resize_sources(uint8_t num_sources)
|
|||
}
|
||||
}
|
||||
|
||||
#define ALU1(op) \
|
||||
fs_inst * \
|
||||
fs_visitor::op(const fs_reg &dst, const fs_reg &src0) \
|
||||
{ \
|
||||
return new(mem_ctx) fs_inst(BRW_OPCODE_##op, dst, src0); \
|
||||
}
|
||||
|
||||
#define ALU2(op) \
|
||||
fs_inst * \
|
||||
fs_visitor::op(const fs_reg &dst, const fs_reg &src0, \
|
||||
const fs_reg &src1) \
|
||||
{ \
|
||||
return new(mem_ctx) fs_inst(BRW_OPCODE_##op, dst, src0, src1); \
|
||||
}
|
||||
|
||||
#define ALU2_ACC(op) \
|
||||
fs_inst * \
|
||||
fs_visitor::op(const fs_reg &dst, const fs_reg &src0, \
|
||||
const fs_reg &src1) \
|
||||
{ \
|
||||
fs_inst *inst = new(mem_ctx) fs_inst(BRW_OPCODE_##op, dst, src0, src1);\
|
||||
inst->writes_accumulator = true; \
|
||||
return inst; \
|
||||
}
|
||||
|
||||
#define ALU3(op) \
|
||||
fs_inst * \
|
||||
fs_visitor::op(const fs_reg &dst, const fs_reg &src0, \
|
||||
const fs_reg &src1, const fs_reg &src2) \
|
||||
{ \
|
||||
return new(mem_ctx) fs_inst(BRW_OPCODE_##op, dst, src0, src1, src2);\
|
||||
}
|
||||
|
||||
ALU1(NOT)
|
||||
ALU1(MOV)
|
||||
ALU1(FRC)
|
||||
ALU1(RNDD)
|
||||
ALU1(RNDE)
|
||||
ALU1(RNDZ)
|
||||
ALU2(ADD)
|
||||
ALU2(MUL)
|
||||
ALU2_ACC(MACH)
|
||||
ALU2(AND)
|
||||
ALU2(OR)
|
||||
ALU2(XOR)
|
||||
ALU2(SHL)
|
||||
ALU2(SHR)
|
||||
ALU2(ASR)
|
||||
ALU3(LRP)
|
||||
ALU1(BFREV)
|
||||
ALU3(BFE)
|
||||
ALU2(BFI1)
|
||||
ALU3(BFI2)
|
||||
ALU1(FBH)
|
||||
ALU1(FBL)
|
||||
ALU1(CBIT)
|
||||
ALU3(MAD)
|
||||
ALU2_ACC(ADDC)
|
||||
ALU2_ACC(SUBB)
|
||||
ALU2(SEL)
|
||||
ALU2(MAC)
|
||||
|
||||
/** Gen4 predicated IF. */
|
||||
fs_inst *
|
||||
fs_visitor::IF(enum brw_predicate predicate)
|
||||
{
|
||||
fs_inst *inst = new(mem_ctx) fs_inst(BRW_OPCODE_IF, dispatch_width);
|
||||
inst->predicate = predicate;
|
||||
return inst;
|
||||
}
|
||||
|
||||
/** Gen6 IF with embedded comparison. */
|
||||
fs_inst *
|
||||
fs_visitor::IF(const fs_reg &src0, const fs_reg &src1,
|
||||
enum brw_conditional_mod condition)
|
||||
{
|
||||
assert(devinfo->gen == 6);
|
||||
fs_inst *inst = new(mem_ctx) fs_inst(BRW_OPCODE_IF, dispatch_width,
|
||||
reg_null_d, src0, src1);
|
||||
inst->conditional_mod = condition;
|
||||
return inst;
|
||||
}
|
||||
|
||||
/**
|
||||
* CMP: Sets the low bit of the destination channels with the result
|
||||
* of the comparison, while the upper bits are undefined, and updates
|
||||
* the flag register with the packed 16 bits of the result.
|
||||
*/
|
||||
fs_inst *
|
||||
fs_visitor::CMP(fs_reg dst, fs_reg src0, fs_reg src1,
|
||||
enum brw_conditional_mod condition)
|
||||
{
|
||||
fs_inst *inst;
|
||||
|
||||
/* Take the instruction:
|
||||
*
|
||||
* CMP null<d> src0<f> src1<f>
|
||||
*
|
||||
* Original gen4 does type conversion to the destination type before
|
||||
* comparison, producing garbage results for floating point comparisons.
|
||||
*
|
||||
* The destination type doesn't matter on newer generations, so we set the
|
||||
* type to match src0 so we can compact the instruction.
|
||||
*/
|
||||
dst.type = src0.type;
|
||||
if (dst.file == HW_REG)
|
||||
dst.fixed_hw_reg.type = dst.type;
|
||||
|
||||
resolve_ud_negate(&src0);
|
||||
resolve_ud_negate(&src1);
|
||||
|
||||
inst = new(mem_ctx) fs_inst(BRW_OPCODE_CMP, dst, src0, src1);
|
||||
inst->conditional_mod = condition;
|
||||
|
||||
return inst;
|
||||
}
|
||||
|
||||
fs_inst *
|
||||
fs_visitor::LOAD_PAYLOAD(const fs_reg &dst, fs_reg *src, int sources,
|
||||
int header_size)
|
||||
{
|
||||
assert(dst.width % 8 == 0);
|
||||
fs_inst *inst = new(mem_ctx) fs_inst(SHADER_OPCODE_LOAD_PAYLOAD, dst.width,
|
||||
dst, src, sources);
|
||||
inst->header_size = header_size;
|
||||
|
||||
for (int i = 0; i < header_size; i++)
|
||||
assert(src[i].file != GRF || src[i].width * type_sz(src[i].type) == 32);
|
||||
inst->regs_written = header_size;
|
||||
|
||||
for (int i = header_size; i < sources; ++i)
|
||||
assert(src[i].file != GRF || src[i].width == dst.width);
|
||||
inst->regs_written += (sources - header_size) * (dst.width / 8);
|
||||
|
||||
return inst;
|
||||
}
|
||||
|
||||
void
|
||||
fs_visitor::VARYING_PULL_CONSTANT_LOAD(const fs_builder &bld,
|
||||
const fs_reg &dst,
|
||||
|
|
@ -862,45 +725,6 @@ fs_visitor::no16(const char *format, ...)
|
|||
va_end(va);
|
||||
}
|
||||
|
||||
fs_inst *
|
||||
fs_visitor::emit(enum opcode opcode)
|
||||
{
|
||||
return emit(new(mem_ctx) fs_inst(opcode, dispatch_width));
|
||||
}
|
||||
|
||||
fs_inst *
|
||||
fs_visitor::emit(enum opcode opcode, const fs_reg &dst)
|
||||
{
|
||||
return emit(new(mem_ctx) fs_inst(opcode, dst));
|
||||
}
|
||||
|
||||
fs_inst *
|
||||
fs_visitor::emit(enum opcode opcode, const fs_reg &dst, const fs_reg &src0)
|
||||
{
|
||||
return emit(new(mem_ctx) fs_inst(opcode, dst, src0));
|
||||
}
|
||||
|
||||
fs_inst *
|
||||
fs_visitor::emit(enum opcode opcode, const fs_reg &dst, const fs_reg &src0,
|
||||
const fs_reg &src1)
|
||||
{
|
||||
return emit(new(mem_ctx) fs_inst(opcode, dst, src0, src1));
|
||||
}
|
||||
|
||||
fs_inst *
|
||||
fs_visitor::emit(enum opcode opcode, const fs_reg &dst, const fs_reg &src0,
|
||||
const fs_reg &src1, const fs_reg &src2)
|
||||
{
|
||||
return emit(new(mem_ctx) fs_inst(opcode, dst, src0, src1, src2));
|
||||
}
|
||||
|
||||
fs_inst *
|
||||
fs_visitor::emit(enum opcode opcode, const fs_reg &dst,
|
||||
fs_reg src[], int sources)
|
||||
{
|
||||
return emit(new(mem_ctx) fs_inst(opcode, dst, src, sources));
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the instruction has a flag that means it won't
|
||||
* update an entire destination register.
|
||||
|
|
@ -1053,14 +877,6 @@ fs_visitor::vgrf(const glsl_type *const type)
|
|||
brw_type_for_base_type(type), dispatch_width);
|
||||
}
|
||||
|
||||
fs_reg
|
||||
fs_visitor::vgrf(int num_components)
|
||||
{
|
||||
int reg_width = dispatch_width / 8;
|
||||
return fs_reg(GRF, alloc.allocate(num_components * reg_width),
|
||||
BRW_REGISTER_TYPE_F, dispatch_width);
|
||||
}
|
||||
|
||||
/** Fixed HW reg constructor. */
|
||||
fs_reg::fs_reg(enum register_file file, int reg)
|
||||
{
|
||||
|
|
@ -1487,106 +1303,6 @@ fs_visitor::resolve_source_modifiers(fs_reg *src)
|
|||
*src = temp;
|
||||
}
|
||||
|
||||
fs_reg
|
||||
fs_visitor::fix_math_operand(fs_reg src)
|
||||
{
|
||||
/* Can't do hstride == 0 args on gen6 math, so expand it out. We
|
||||
* might be able to do better by doing execsize = 1 math and then
|
||||
* expanding that result out, but we would need to be careful with
|
||||
* masking.
|
||||
*
|
||||
* The hardware ignores source modifiers (negate and abs) on math
|
||||
* instructions, so we also move to a temp to set those up.
|
||||
*/
|
||||
if (devinfo->gen == 6 && src.file != UNIFORM && src.file != IMM &&
|
||||
!src.abs && !src.negate)
|
||||
return src;
|
||||
|
||||
/* Gen7 relaxes most of the above restrictions, but still can't use IMM
|
||||
* operands to math
|
||||
*/
|
||||
if (devinfo->gen >= 7 && src.file != IMM)
|
||||
return src;
|
||||
|
||||
fs_reg expanded = vgrf(glsl_type::float_type);
|
||||
expanded.type = src.type;
|
||||
emit(BRW_OPCODE_MOV, expanded, src);
|
||||
return expanded;
|
||||
}
|
||||
|
||||
fs_inst *
|
||||
fs_visitor::emit_math(enum opcode opcode, fs_reg dst, fs_reg src)
|
||||
{
|
||||
switch (opcode) {
|
||||
case SHADER_OPCODE_RCP:
|
||||
case SHADER_OPCODE_RSQ:
|
||||
case SHADER_OPCODE_SQRT:
|
||||
case SHADER_OPCODE_EXP2:
|
||||
case SHADER_OPCODE_LOG2:
|
||||
case SHADER_OPCODE_SIN:
|
||||
case SHADER_OPCODE_COS:
|
||||
break;
|
||||
default:
|
||||
unreachable("not reached: bad math opcode");
|
||||
}
|
||||
|
||||
/* Can't do hstride == 0 args to gen6 math, so expand it out. We
|
||||
* might be able to do better by doing execsize = 1 math and then
|
||||
* expanding that result out, but we would need to be careful with
|
||||
* masking.
|
||||
*
|
||||
* Gen 6 hardware ignores source modifiers (negate and abs) on math
|
||||
* instructions, so we also move to a temp to set those up.
|
||||
*/
|
||||
if (devinfo->gen == 6 || devinfo->gen == 7)
|
||||
src = fix_math_operand(src);
|
||||
|
||||
fs_inst *inst = emit(opcode, dst, src);
|
||||
|
||||
if (devinfo->gen < 6) {
|
||||
inst->base_mrf = 2;
|
||||
inst->mlen = dispatch_width / 8;
|
||||
}
|
||||
|
||||
return inst;
|
||||
}
|
||||
|
||||
fs_inst *
|
||||
fs_visitor::emit_math(enum opcode opcode, fs_reg dst, fs_reg src0, fs_reg src1)
|
||||
{
|
||||
int base_mrf = 2;
|
||||
fs_inst *inst;
|
||||
|
||||
if (devinfo->gen >= 8) {
|
||||
inst = emit(opcode, dst, src0, src1);
|
||||
} else if (devinfo->gen >= 6) {
|
||||
src0 = fix_math_operand(src0);
|
||||
src1 = fix_math_operand(src1);
|
||||
|
||||
inst = emit(opcode, dst, src0, src1);
|
||||
} else {
|
||||
/* From the Ironlake PRM, Volume 4, Part 1, Section 6.1.13
|
||||
* "Message Payload":
|
||||
*
|
||||
* "Operand0[7]. For the INT DIV functions, this operand is the
|
||||
* denominator."
|
||||
* ...
|
||||
* "Operand1[7]. For the INT DIV functions, this operand is the
|
||||
* numerator."
|
||||
*/
|
||||
bool is_int_div = opcode != SHADER_OPCODE_POW;
|
||||
fs_reg &op0 = is_int_div ? src1 : src0;
|
||||
fs_reg &op1 = is_int_div ? src0 : src1;
|
||||
|
||||
emit(MOV(fs_reg(MRF, base_mrf + 1, op1.type, dispatch_width), op1));
|
||||
inst = emit(opcode, dst, op0, reg_null_f);
|
||||
|
||||
inst->base_mrf = base_mrf;
|
||||
inst->mlen = 2 * dispatch_width / 8;
|
||||
}
|
||||
return inst;
|
||||
}
|
||||
|
||||
void
|
||||
fs_visitor::emit_discard_jump()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -70,10 +70,6 @@ namespace brw {
|
|||
class fs_visitor : public backend_shader
|
||||
{
|
||||
public:
|
||||
const fs_reg reg_null_f;
|
||||
const fs_reg reg_null_d;
|
||||
const fs_reg reg_null_ud;
|
||||
|
||||
fs_visitor(struct brw_context *brw,
|
||||
void *mem_ctx,
|
||||
gl_shader_stage stage,
|
||||
|
|
@ -86,7 +82,6 @@ public:
|
|||
~fs_visitor();
|
||||
|
||||
fs_reg vgrf(const glsl_type *const type);
|
||||
fs_reg vgrf(int num_components);
|
||||
void import_uniforms(fs_visitor *v);
|
||||
void setup_uniform_clipplane_values();
|
||||
void compute_clip_distance();
|
||||
|
|
@ -95,65 +90,11 @@ public:
|
|||
void swizzle_result(ir_texture_opcode op, int dest_components,
|
||||
fs_reg orig_val, uint32_t sampler);
|
||||
|
||||
fs_inst *emit(fs_inst *inst);
|
||||
void emit(exec_list list);
|
||||
|
||||
fs_inst *emit(enum opcode opcode);
|
||||
fs_inst *emit(enum opcode opcode, const fs_reg &dst);
|
||||
fs_inst *emit(enum opcode opcode, const fs_reg &dst, const fs_reg &src0);
|
||||
fs_inst *emit(enum opcode opcode, const fs_reg &dst, const fs_reg &src0,
|
||||
const fs_reg &src1);
|
||||
fs_inst *emit(enum opcode opcode, const fs_reg &dst,
|
||||
const fs_reg &src0, const fs_reg &src1, const fs_reg &src2);
|
||||
fs_inst *emit(enum opcode opcode, const fs_reg &dst,
|
||||
fs_reg src[], int sources);
|
||||
|
||||
fs_inst *MOV(const fs_reg &dst, const fs_reg &src);
|
||||
fs_inst *NOT(const fs_reg &dst, const fs_reg &src);
|
||||
fs_inst *RNDD(const fs_reg &dst, const fs_reg &src);
|
||||
fs_inst *RNDE(const fs_reg &dst, const fs_reg &src);
|
||||
fs_inst *RNDZ(const fs_reg &dst, const fs_reg &src);
|
||||
fs_inst *FRC(const fs_reg &dst, const fs_reg &src);
|
||||
fs_inst *ADD(const fs_reg &dst, const fs_reg &src0, const fs_reg &src1);
|
||||
fs_inst *MUL(const fs_reg &dst, const fs_reg &src0, const fs_reg &src1);
|
||||
fs_inst *MACH(const fs_reg &dst, const fs_reg &src0, const fs_reg &src1);
|
||||
fs_inst *MAC(const fs_reg &dst, const fs_reg &src0, const fs_reg &src1);
|
||||
fs_inst *SHL(const fs_reg &dst, const fs_reg &src0, const fs_reg &src1);
|
||||
fs_inst *SHR(const fs_reg &dst, const fs_reg &src0, const fs_reg &src1);
|
||||
fs_inst *ASR(const fs_reg &dst, const fs_reg &src0, const fs_reg &src1);
|
||||
fs_inst *AND(const fs_reg &dst, const fs_reg &src0, const fs_reg &src1);
|
||||
fs_inst *OR(const fs_reg &dst, const fs_reg &src0, const fs_reg &src1);
|
||||
fs_inst *XOR(const fs_reg &dst, const fs_reg &src0, const fs_reg &src1);
|
||||
fs_inst *IF(enum brw_predicate predicate);
|
||||
fs_inst *IF(const fs_reg &src0, const fs_reg &src1,
|
||||
enum brw_conditional_mod condition);
|
||||
fs_inst *CMP(fs_reg dst, fs_reg src0, fs_reg src1,
|
||||
enum brw_conditional_mod condition);
|
||||
fs_inst *LRP(const fs_reg &dst, const fs_reg &a, const fs_reg &y,
|
||||
const fs_reg &x);
|
||||
fs_inst *BFREV(const fs_reg &dst, const fs_reg &value);
|
||||
fs_inst *BFE(const fs_reg &dst, const fs_reg &bits, const fs_reg &offset,
|
||||
const fs_reg &value);
|
||||
fs_inst *BFI1(const fs_reg &dst, const fs_reg &bits, const fs_reg &offset);
|
||||
fs_inst *BFI2(const fs_reg &dst, const fs_reg &bfi1_dst,
|
||||
const fs_reg &insert, const fs_reg &base);
|
||||
fs_inst *FBH(const fs_reg &dst, const fs_reg &value);
|
||||
fs_inst *FBL(const fs_reg &dst, const fs_reg &value);
|
||||
fs_inst *CBIT(const fs_reg &dst, const fs_reg &value);
|
||||
fs_inst *MAD(const fs_reg &dst, const fs_reg &c, const fs_reg &b,
|
||||
const fs_reg &a);
|
||||
fs_inst *ADDC(const fs_reg &dst, const fs_reg &src0, const fs_reg &src1);
|
||||
fs_inst *SUBB(const fs_reg &dst, const fs_reg &src0, const fs_reg &src1);
|
||||
fs_inst *SEL(const fs_reg &dst, const fs_reg &src0, const fs_reg &src1);
|
||||
|
||||
int type_size(const struct glsl_type *type);
|
||||
fs_inst *get_instruction_generating_reg(fs_inst *start,
|
||||
fs_inst *end,
|
||||
const fs_reg ®);
|
||||
|
||||
fs_inst *LOAD_PAYLOAD(const fs_reg &dst, fs_reg *src, int sources,
|
||||
int header_size);
|
||||
|
||||
void VARYING_PULL_CONSTANT_LOAD(const brw::fs_builder &bld,
|
||||
const fs_reg &dst,
|
||||
const fs_reg &surf_index,
|
||||
|
|
@ -284,14 +225,7 @@ public:
|
|||
fs_reg emit_mcs_fetch(fs_reg coordinate, int components, fs_reg sampler);
|
||||
void emit_gen6_gather_wa(uint8_t wa, fs_reg dst);
|
||||
void resolve_source_modifiers(fs_reg *src);
|
||||
fs_reg fix_math_operand(fs_reg src);
|
||||
fs_inst *emit_math(enum opcode op, fs_reg dst, fs_reg src0);
|
||||
fs_inst *emit_math(enum opcode op, fs_reg dst, fs_reg src0, fs_reg src1);
|
||||
fs_inst *emit_lrp(const fs_reg &dst, const fs_reg &x, const fs_reg &y,
|
||||
const fs_reg &a);
|
||||
void emit_discard_jump();
|
||||
/** Copy any live channel from \p src to the first channel of \p dst. */
|
||||
void emit_uniformize(const fs_reg &dst, const fs_reg &src);
|
||||
bool try_replace_with_sel();
|
||||
bool opt_peephole_sel();
|
||||
bool opt_peephole_predicated_break();
|
||||
|
|
@ -354,8 +288,6 @@ public:
|
|||
void emit_untyped_surface_read(unsigned surf_index, fs_reg dst,
|
||||
fs_reg offset);
|
||||
|
||||
void resolve_ud_negate(fs_reg *reg);
|
||||
|
||||
fs_reg get_timestamp(const brw::fs_builder &bld);
|
||||
|
||||
struct brw_reg interp_reg(int location, int channel);
|
||||
|
|
@ -417,11 +349,6 @@ public:
|
|||
fs_reg nir_outputs;
|
||||
fs_reg *nir_system_values;
|
||||
|
||||
/** @{ debug annotation info */
|
||||
const char *current_annotation;
|
||||
const void *base_ir;
|
||||
/** @} */
|
||||
|
||||
bool failed;
|
||||
char *fail_msg;
|
||||
bool simd16_unsupported;
|
||||
|
|
|
|||
|
|
@ -444,7 +444,6 @@ void
|
|||
fs_visitor::nir_emit_instr(nir_instr *instr)
|
||||
{
|
||||
const fs_builder abld = bld.annotate(NULL, instr);
|
||||
this->base_ir = instr;
|
||||
|
||||
switch (instr->type) {
|
||||
case nir_instr_type_alu:
|
||||
|
|
@ -472,8 +471,6 @@ fs_visitor::nir_emit_instr(nir_instr *instr)
|
|||
default:
|
||||
unreachable("unknown instruction type");
|
||||
}
|
||||
|
||||
this->base_ir = NULL;
|
||||
}
|
||||
|
||||
static brw_reg_type
|
||||
|
|
|
|||
|
|
@ -77,44 +77,6 @@ fs_visitor::emit_vs_system_value(int location)
|
|||
return reg;
|
||||
}
|
||||
|
||||
fs_inst *
|
||||
fs_visitor::emit_lrp(const fs_reg &dst, const fs_reg &x, const fs_reg &y,
|
||||
const fs_reg &a)
|
||||
{
|
||||
if (devinfo->gen < 6) {
|
||||
/* We can't use the LRP instruction. Emit x*(1-a) + y*a. */
|
||||
fs_reg y_times_a = vgrf(glsl_type::float_type);
|
||||
fs_reg one_minus_a = vgrf(glsl_type::float_type);
|
||||
fs_reg x_times_one_minus_a = vgrf(glsl_type::float_type);
|
||||
|
||||
emit(MUL(y_times_a, y, a));
|
||||
|
||||
fs_reg negative_a = a;
|
||||
negative_a.negate = !a.negate;
|
||||
emit(ADD(one_minus_a, negative_a, fs_reg(1.0f)));
|
||||
emit(MUL(x_times_one_minus_a, x, one_minus_a));
|
||||
|
||||
return emit(ADD(dst, x_times_one_minus_a, y_times_a));
|
||||
} else {
|
||||
/* The LRP instruction actually does op1 * op0 + op2 * (1 - op0), so
|
||||
* we need to reorder the operands.
|
||||
*/
|
||||
return emit(LRP(dst, a, y, x));
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
fs_visitor::emit_uniformize(const fs_reg &dst, const fs_reg &src)
|
||||
{
|
||||
const fs_reg chan_index = vgrf(glsl_type::uint_type);
|
||||
|
||||
emit(SHADER_OPCODE_FIND_LIVE_CHANNEL, component(chan_index, 0))
|
||||
->force_writemask_all = true;
|
||||
emit(SHADER_OPCODE_BROADCAST, component(dst, 0),
|
||||
src, component(chan_index, 0))
|
||||
->force_writemask_all = true;
|
||||
}
|
||||
|
||||
fs_inst *
|
||||
fs_visitor::emit_texture_gen4(ir_texture_opcode op, fs_reg dst,
|
||||
fs_reg coordinate, int coord_components,
|
||||
|
|
@ -1264,29 +1226,6 @@ fs_visitor::emit_untyped_surface_read(unsigned surf_index, fs_reg dst,
|
|||
inst->mlen = mlen;
|
||||
}
|
||||
|
||||
fs_inst *
|
||||
fs_visitor::emit(fs_inst *inst)
|
||||
{
|
||||
if (dispatch_width == 16 && inst->exec_size == 8)
|
||||
inst->force_uncompressed = true;
|
||||
|
||||
inst->annotation = this->current_annotation;
|
||||
inst->ir = this->base_ir;
|
||||
|
||||
this->instructions.push_tail(inst);
|
||||
|
||||
return inst;
|
||||
}
|
||||
|
||||
void
|
||||
fs_visitor::emit(exec_list list)
|
||||
{
|
||||
foreach_in_list_safe(fs_inst, inst, &list) {
|
||||
inst->exec_node::remove();
|
||||
emit(inst);
|
||||
}
|
||||
}
|
||||
|
||||
/** Emits a dummy fragment shader consisting of magenta for bringup purposes. */
|
||||
void
|
||||
fs_visitor::emit_dummy_fs()
|
||||
|
|
@ -1992,18 +1931,6 @@ fs_visitor::emit_urb_writes()
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
fs_visitor::resolve_ud_negate(fs_reg *reg)
|
||||
{
|
||||
if (reg->type != BRW_REGISTER_TYPE_UD ||
|
||||
!reg->negate)
|
||||
return;
|
||||
|
||||
fs_reg temp = vgrf(glsl_type::uint_type);
|
||||
emit(MOV(temp, *reg));
|
||||
*reg = temp;
|
||||
}
|
||||
|
||||
void
|
||||
fs_visitor::emit_cs_terminate()
|
||||
{
|
||||
|
|
@ -2034,9 +1961,6 @@ fs_visitor::fs_visitor(struct brw_context *brw,
|
|||
struct gl_program *prog,
|
||||
unsigned dispatch_width)
|
||||
: backend_shader(brw, shader_prog, prog, prog_data, stage),
|
||||
reg_null_f(retype(brw_null_vec(dispatch_width), BRW_REGISTER_TYPE_F)),
|
||||
reg_null_d(retype(brw_null_vec(dispatch_width), BRW_REGISTER_TYPE_D)),
|
||||
reg_null_ud(retype(brw_null_vec(dispatch_width), BRW_REGISTER_TYPE_UD)),
|
||||
key(key), prog_data(prog_data),
|
||||
dispatch_width(dispatch_width), promoted_constants(0),
|
||||
bld(fs_builder(this, dispatch_width).at_end())
|
||||
|
|
@ -2073,9 +1997,6 @@ fs_visitor::fs_visitor(struct brw_context *brw,
|
|||
this->first_non_payload_grf = 0;
|
||||
this->max_grf = devinfo->gen >= 7 ? GEN7_MRF_HACK_START : BRW_MAX_GRF;
|
||||
|
||||
this->current_annotation = NULL;
|
||||
this->base_ir = NULL;
|
||||
|
||||
this->virtual_grf_start = NULL;
|
||||
this->virtual_grf_end = NULL;
|
||||
this->live_intervals = NULL;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue