i965/vec4: Replace src_reg(imm) constructors with brw_imm_*().
Cuts 1.5k of .text. Reviewed-by: Emil Velikov <emil.velikov@collabora.co.uk> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
@@ -41,11 +41,6 @@ public:
|
|||||||
|
|
||||||
src_reg(enum brw_reg_file file, int nr, const glsl_type *type);
|
src_reg(enum brw_reg_file file, int nr, const glsl_type *type);
|
||||||
src_reg();
|
src_reg();
|
||||||
src_reg(float f);
|
|
||||||
src_reg(uint32_t u);
|
|
||||||
src_reg(int32_t i);
|
|
||||||
src_reg(uint8_t vf[4]);
|
|
||||||
src_reg(uint8_t vf0, uint8_t vf1, uint8_t vf2, uint8_t vf3);
|
|
||||||
src_reg(struct brw_reg reg);
|
src_reg(struct brw_reg reg);
|
||||||
|
|
||||||
bool equals(const src_reg &r) const;
|
bool equals(const src_reg &r) const;
|
||||||
|
|||||||
@@ -71,51 +71,6 @@ src_reg::src_reg()
|
|||||||
init();
|
init();
|
||||||
}
|
}
|
||||||
|
|
||||||
src_reg::src_reg(float f)
|
|
||||||
{
|
|
||||||
init();
|
|
||||||
|
|
||||||
this->file = IMM;
|
|
||||||
this->type = BRW_REGISTER_TYPE_F;
|
|
||||||
this->f = f;
|
|
||||||
}
|
|
||||||
|
|
||||||
src_reg::src_reg(uint32_t u)
|
|
||||||
{
|
|
||||||
init();
|
|
||||||
|
|
||||||
this->file = IMM;
|
|
||||||
this->type = BRW_REGISTER_TYPE_UD;
|
|
||||||
this->ud = u;
|
|
||||||
}
|
|
||||||
|
|
||||||
src_reg::src_reg(int32_t i)
|
|
||||||
{
|
|
||||||
init();
|
|
||||||
|
|
||||||
this->file = IMM;
|
|
||||||
this->type = BRW_REGISTER_TYPE_D;
|
|
||||||
this->d = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
src_reg::src_reg(uint8_t vf[4])
|
|
||||||
{
|
|
||||||
init();
|
|
||||||
|
|
||||||
this->file = IMM;
|
|
||||||
this->type = BRW_REGISTER_TYPE_VF;
|
|
||||||
memcpy(&this->ud, vf, sizeof(unsigned));
|
|
||||||
}
|
|
||||||
|
|
||||||
src_reg::src_reg(uint8_t vf0, uint8_t vf1, uint8_t vf2, uint8_t vf3)
|
|
||||||
{
|
|
||||||
init();
|
|
||||||
|
|
||||||
this->file = IMM;
|
|
||||||
this->type = BRW_REGISTER_TYPE_VF;
|
|
||||||
this->ud = (vf0 << 0) | (vf1 << 8) | (vf2 << 16) | (vf3 << 24);
|
|
||||||
}
|
|
||||||
|
|
||||||
src_reg::src_reg(struct brw_reg reg) :
|
src_reg::src_reg(struct brw_reg reg) :
|
||||||
backend_reg(reg)
|
backend_reg(reg)
|
||||||
{
|
{
|
||||||
@@ -382,7 +337,9 @@ vec4_visitor::opt_vector_float()
|
|||||||
|
|
||||||
remaining_channels &= ~inst->dst.writemask;
|
remaining_channels &= ~inst->dst.writemask;
|
||||||
if (remaining_channels == 0) {
|
if (remaining_channels == 0) {
|
||||||
vec4_instruction *mov = MOV(inst->dst, imm);
|
unsigned vf;
|
||||||
|
memcpy(&vf, imm, sizeof(vf));
|
||||||
|
vec4_instruction *mov = MOV(inst->dst, brw_imm_vf(vf));
|
||||||
mov->dst.type = BRW_REGISTER_TYPE_F;
|
mov->dst.type = BRW_REGISTER_TYPE_F;
|
||||||
mov->dst.writemask = WRITEMASK_XYZW;
|
mov->dst.writemask = WRITEMASK_XYZW;
|
||||||
inst->insert_after(block, mov);
|
inst->insert_after(block, mov);
|
||||||
@@ -657,13 +614,13 @@ vec4_visitor::opt_algebraic()
|
|||||||
inst->opcode = BRW_OPCODE_MOV;
|
inst->opcode = BRW_OPCODE_MOV;
|
||||||
switch (inst->src[0].type) {
|
switch (inst->src[0].type) {
|
||||||
case BRW_REGISTER_TYPE_F:
|
case BRW_REGISTER_TYPE_F:
|
||||||
inst->src[0] = src_reg(0.0f);
|
inst->src[0] = brw_imm_f(0.0f);
|
||||||
break;
|
break;
|
||||||
case BRW_REGISTER_TYPE_D:
|
case BRW_REGISTER_TYPE_D:
|
||||||
inst->src[0] = src_reg(0);
|
inst->src[0] = brw_imm_d(0);
|
||||||
break;
|
break;
|
||||||
case BRW_REGISTER_TYPE_UD:
|
case BRW_REGISTER_TYPE_UD:
|
||||||
inst->src[0] = src_reg(0u);
|
inst->src[0] = brw_imm_ud(0u);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
unreachable("not reached");
|
unreachable("not reached");
|
||||||
@@ -1232,7 +1189,7 @@ vec4_visitor::eliminate_find_live_channel()
|
|||||||
case SHADER_OPCODE_FIND_LIVE_CHANNEL:
|
case SHADER_OPCODE_FIND_LIVE_CHANNEL:
|
||||||
if (depth == 0) {
|
if (depth == 0) {
|
||||||
inst->opcode = BRW_OPCODE_MOV;
|
inst->opcode = BRW_OPCODE_MOV;
|
||||||
inst->src[0] = src_reg(0);
|
inst->src[0] = brw_imm_d(0);
|
||||||
inst->force_writemask_all = true;
|
inst->force_writemask_all = true;
|
||||||
progress = true;
|
progress = true;
|
||||||
}
|
}
|
||||||
@@ -1701,7 +1658,7 @@ vec4_visitor::emit_shader_time_end()
|
|||||||
*/
|
*/
|
||||||
src_reg reset_end = shader_end_time;
|
src_reg reset_end = shader_end_time;
|
||||||
reset_end.swizzle = BRW_SWIZZLE_ZZZZ;
|
reset_end.swizzle = BRW_SWIZZLE_ZZZZ;
|
||||||
vec4_instruction *test = emit(AND(dst_null_d(), reset_end, src_reg(1u)));
|
vec4_instruction *test = emit(AND(dst_null_ud(), reset_end, brw_imm_ud(1u)));
|
||||||
test->conditional_mod = BRW_CONDITIONAL_Z;
|
test->conditional_mod = BRW_CONDITIONAL_Z;
|
||||||
|
|
||||||
emit(IF(BRW_PREDICATE_NORMAL));
|
emit(IF(BRW_PREDICATE_NORMAL));
|
||||||
@@ -1715,12 +1672,12 @@ vec4_visitor::emit_shader_time_end()
|
|||||||
* is 2 cycles. Remove that overhead, so I can forget about that when
|
* is 2 cycles. Remove that overhead, so I can forget about that when
|
||||||
* trying to determine the time taken for single instructions.
|
* trying to determine the time taken for single instructions.
|
||||||
*/
|
*/
|
||||||
emit(ADD(diff, src_reg(diff), src_reg(-2u)));
|
emit(ADD(diff, src_reg(diff), brw_imm_ud(-2u)));
|
||||||
|
|
||||||
emit_shader_time_write(0, src_reg(diff));
|
emit_shader_time_write(0, src_reg(diff));
|
||||||
emit_shader_time_write(1, src_reg(1u));
|
emit_shader_time_write(1, brw_imm_ud(1u));
|
||||||
emit(BRW_OPCODE_ELSE);
|
emit(BRW_OPCODE_ELSE);
|
||||||
emit_shader_time_write(2, src_reg(1u));
|
emit_shader_time_write(2, brw_imm_ud(1u));
|
||||||
emit(BRW_OPCODE_ENDIF);
|
emit(BRW_OPCODE_ENDIF);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1736,7 +1693,7 @@ vec4_visitor::emit_shader_time_write(int shader_time_subindex, src_reg value)
|
|||||||
|
|
||||||
offset.type = BRW_REGISTER_TYPE_UD;
|
offset.type = BRW_REGISTER_TYPE_UD;
|
||||||
int index = shader_time_index * 3 + shader_time_subindex;
|
int index = shader_time_index * 3 + shader_time_subindex;
|
||||||
emit(MOV(offset, src_reg(index * SHADER_TIME_STRIDE)));
|
emit(MOV(offset, brw_imm_d(index * SHADER_TIME_STRIDE)));
|
||||||
|
|
||||||
time.type = BRW_REGISTER_TYPE_UD;
|
time.type = BRW_REGISTER_TYPE_UD;
|
||||||
emit(MOV(time, value));
|
emit(MOV(time, value));
|
||||||
|
|||||||
@@ -484,7 +484,7 @@ namespace brw {
|
|||||||
const dst_reg x_times_one_minus_a = vgrf(dst.type);
|
const dst_reg x_times_one_minus_a = vgrf(dst.type);
|
||||||
|
|
||||||
MUL(y_times_a, y, a);
|
MUL(y_times_a, y, a);
|
||||||
ADD(one_minus_a, negate(a), src_reg(1.0f));
|
ADD(one_minus_a, negate(a), brw_imm_f(1.0f));
|
||||||
MUL(x_times_one_minus_a, x, src_reg(one_minus_a));
|
MUL(x_times_one_minus_a, x, src_reg(one_minus_a));
|
||||||
return ADD(dst, src_reg(x_times_one_minus_a), src_reg(y_times_a));
|
return ADD(dst, src_reg(x_times_one_minus_a), src_reg(y_times_a));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -153,7 +153,7 @@ vec4_gs_visitor::emit_prolog()
|
|||||||
*/
|
*/
|
||||||
this->current_annotation = "clear r0.2";
|
this->current_annotation = "clear r0.2";
|
||||||
dst_reg r0(retype(brw_vec4_grf(0, 0), BRW_REGISTER_TYPE_UD));
|
dst_reg r0(retype(brw_vec4_grf(0, 0), BRW_REGISTER_TYPE_UD));
|
||||||
vec4_instruction *inst = emit(GS_OPCODE_SET_DWORD_2, r0, 0u);
|
vec4_instruction *inst = emit(GS_OPCODE_SET_DWORD_2, r0, brw_imm_ud(0u));
|
||||||
inst->force_writemask_all = true;
|
inst->force_writemask_all = true;
|
||||||
|
|
||||||
/* Create a virtual register to hold the vertex count */
|
/* Create a virtual register to hold the vertex count */
|
||||||
@@ -161,7 +161,7 @@ vec4_gs_visitor::emit_prolog()
|
|||||||
|
|
||||||
/* Initialize the vertex_count register to 0 */
|
/* Initialize the vertex_count register to 0 */
|
||||||
this->current_annotation = "initialize vertex_count";
|
this->current_annotation = "initialize vertex_count";
|
||||||
inst = emit(MOV(dst_reg(this->vertex_count), 0u));
|
inst = emit(MOV(dst_reg(this->vertex_count), brw_imm_ud(0u)));
|
||||||
inst->force_writemask_all = true;
|
inst->force_writemask_all = true;
|
||||||
|
|
||||||
if (c->control_data_header_size_bits > 0) {
|
if (c->control_data_header_size_bits > 0) {
|
||||||
@@ -176,7 +176,7 @@ vec4_gs_visitor::emit_prolog()
|
|||||||
*/
|
*/
|
||||||
if (c->control_data_header_size_bits <= 32) {
|
if (c->control_data_header_size_bits <= 32) {
|
||||||
this->current_annotation = "initialize control data bits";
|
this->current_annotation = "initialize control data bits";
|
||||||
inst = emit(MOV(dst_reg(this->control_data_bits), 0u));
|
inst = emit(MOV(dst_reg(this->control_data_bits), brw_imm_ud(0u)));
|
||||||
inst->force_writemask_all = true;
|
inst->force_writemask_all = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -274,7 +274,7 @@ vec4_gs_visitor::emit_urb_write_header(int mrf)
|
|||||||
vec4_instruction *inst = emit(MOV(mrf_reg, r0));
|
vec4_instruction *inst = emit(MOV(mrf_reg, r0));
|
||||||
inst->force_writemask_all = true;
|
inst->force_writemask_all = true;
|
||||||
emit(GS_OPCODE_SET_WRITE_OFFSET, mrf_reg, this->vertex_count,
|
emit(GS_OPCODE_SET_WRITE_OFFSET, mrf_reg, this->vertex_count,
|
||||||
(uint32_t) gs_prog_data->output_vertex_size_hwords);
|
brw_imm_ud(gs_prog_data->output_vertex_size_hwords));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -354,11 +354,12 @@ vec4_gs_visitor::emit_control_data_bits()
|
|||||||
src_reg dword_index(this, glsl_type::uint_type);
|
src_reg dword_index(this, glsl_type::uint_type);
|
||||||
if (urb_write_flags) {
|
if (urb_write_flags) {
|
||||||
src_reg prev_count(this, glsl_type::uint_type);
|
src_reg prev_count(this, glsl_type::uint_type);
|
||||||
emit(ADD(dst_reg(prev_count), this->vertex_count, 0xffffffffu));
|
emit(ADD(dst_reg(prev_count), this->vertex_count,
|
||||||
|
brw_imm_ud(0xffffffffu)));
|
||||||
unsigned log2_bits_per_vertex =
|
unsigned log2_bits_per_vertex =
|
||||||
_mesa_fls(c->control_data_bits_per_vertex);
|
_mesa_fls(c->control_data_bits_per_vertex);
|
||||||
emit(SHR(dst_reg(dword_index), prev_count,
|
emit(SHR(dst_reg(dword_index), prev_count,
|
||||||
(uint32_t) (6 - log2_bits_per_vertex)));
|
brw_imm_ud(6 - log2_bits_per_vertex)));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Start building the URB write message. The first MRF gets a copy of
|
/* Start building the URB write message. The first MRF gets a copy of
|
||||||
@@ -375,8 +376,9 @@ vec4_gs_visitor::emit_control_data_bits()
|
|||||||
* the appropriate OWORD within the control data header.
|
* the appropriate OWORD within the control data header.
|
||||||
*/
|
*/
|
||||||
src_reg per_slot_offset(this, glsl_type::uint_type);
|
src_reg per_slot_offset(this, glsl_type::uint_type);
|
||||||
emit(SHR(dst_reg(per_slot_offset), dword_index, 2u));
|
emit(SHR(dst_reg(per_slot_offset), dword_index, brw_imm_ud(2u)));
|
||||||
emit(GS_OPCODE_SET_WRITE_OFFSET, mrf_reg, per_slot_offset, 1u);
|
emit(GS_OPCODE_SET_WRITE_OFFSET, mrf_reg, per_slot_offset,
|
||||||
|
brw_imm_ud(1u));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (urb_write_flags & BRW_URB_WRITE_USE_CHANNEL_MASKS) {
|
if (urb_write_flags & BRW_URB_WRITE_USE_CHANNEL_MASKS) {
|
||||||
@@ -388,10 +390,10 @@ vec4_gs_visitor::emit_control_data_bits()
|
|||||||
* together.
|
* together.
|
||||||
*/
|
*/
|
||||||
src_reg channel(this, glsl_type::uint_type);
|
src_reg channel(this, glsl_type::uint_type);
|
||||||
inst = emit(AND(dst_reg(channel), dword_index, 3u));
|
inst = emit(AND(dst_reg(channel), dword_index, brw_imm_ud(3u)));
|
||||||
inst->force_writemask_all = true;
|
inst->force_writemask_all = true;
|
||||||
src_reg one(this, glsl_type::uint_type);
|
src_reg one(this, glsl_type::uint_type);
|
||||||
inst = emit(MOV(dst_reg(one), 1u));
|
inst = emit(MOV(dst_reg(one), brw_imm_ud(1u)));
|
||||||
inst->force_writemask_all = true;
|
inst->force_writemask_all = true;
|
||||||
src_reg channel_mask(this, glsl_type::uint_type);
|
src_reg channel_mask(this, glsl_type::uint_type);
|
||||||
inst = emit(SHL(dst_reg(channel_mask), one, channel));
|
inst = emit(SHL(dst_reg(channel_mask), one, channel));
|
||||||
@@ -441,11 +443,11 @@ vec4_gs_visitor::set_stream_control_data_bits(unsigned stream_id)
|
|||||||
|
|
||||||
/* reg::sid = stream_id */
|
/* reg::sid = stream_id */
|
||||||
src_reg sid(this, glsl_type::uint_type);
|
src_reg sid(this, glsl_type::uint_type);
|
||||||
emit(MOV(dst_reg(sid), stream_id));
|
emit(MOV(dst_reg(sid), brw_imm_ud(stream_id)));
|
||||||
|
|
||||||
/* reg:shift_count = 2 * (vertex_count - 1) */
|
/* reg:shift_count = 2 * (vertex_count - 1) */
|
||||||
src_reg shift_count(this, glsl_type::uint_type);
|
src_reg shift_count(this, glsl_type::uint_type);
|
||||||
emit(SHL(dst_reg(shift_count), this->vertex_count, 1u));
|
emit(SHL(dst_reg(shift_count), this->vertex_count, brw_imm_ud(1u)));
|
||||||
|
|
||||||
/* Note: we're relying on the fact that the GEN SHL instruction only pays
|
/* Note: we're relying on the fact that the GEN SHL instruction only pays
|
||||||
* attention to the lower 5 bits of its second source argument, so on this
|
* attention to the lower 5 bits of its second source argument, so on this
|
||||||
@@ -503,8 +505,8 @@ vec4_gs_visitor::gs_emit_vertex(int stream_id)
|
|||||||
* vertex_count & (32 / bits_per_vertex - 1) == 0
|
* vertex_count & (32 / bits_per_vertex - 1) == 0
|
||||||
*/
|
*/
|
||||||
vec4_instruction *inst =
|
vec4_instruction *inst =
|
||||||
emit(AND(dst_null_d(), this->vertex_count,
|
emit(AND(dst_null_ud(), this->vertex_count,
|
||||||
(uint32_t) (32 / c->control_data_bits_per_vertex - 1)));
|
brw_imm_ud(32 / c->control_data_bits_per_vertex - 1)));
|
||||||
inst->conditional_mod = BRW_CONDITIONAL_Z;
|
inst->conditional_mod = BRW_CONDITIONAL_Z;
|
||||||
|
|
||||||
emit(IF(BRW_PREDICATE_NORMAL));
|
emit(IF(BRW_PREDICATE_NORMAL));
|
||||||
@@ -512,7 +514,7 @@ vec4_gs_visitor::gs_emit_vertex(int stream_id)
|
|||||||
/* If vertex_count is 0, then no control data bits have been
|
/* If vertex_count is 0, then no control data bits have been
|
||||||
* accumulated yet, so we skip emitting them.
|
* accumulated yet, so we skip emitting them.
|
||||||
*/
|
*/
|
||||||
emit(CMP(dst_null_d(), this->vertex_count, 0u,
|
emit(CMP(dst_null_ud(), this->vertex_count, brw_imm_ud(0u),
|
||||||
BRW_CONDITIONAL_NEQ));
|
BRW_CONDITIONAL_NEQ));
|
||||||
emit(IF(BRW_PREDICATE_NORMAL));
|
emit(IF(BRW_PREDICATE_NORMAL));
|
||||||
emit_control_data_bits();
|
emit_control_data_bits();
|
||||||
@@ -525,7 +527,7 @@ vec4_gs_visitor::gs_emit_vertex(int stream_id)
|
|||||||
* effect of any call to EndPrimitive() that the shader may have
|
* effect of any call to EndPrimitive() that the shader may have
|
||||||
* made before outputting its first vertex.
|
* made before outputting its first vertex.
|
||||||
*/
|
*/
|
||||||
inst = emit(MOV(dst_reg(this->control_data_bits), 0u));
|
inst = emit(MOV(dst_reg(this->control_data_bits), brw_imm_ud(0u)));
|
||||||
inst->force_writemask_all = true;
|
inst->force_writemask_all = true;
|
||||||
}
|
}
|
||||||
emit(BRW_OPCODE_ENDIF);
|
emit(BRW_OPCODE_ENDIF);
|
||||||
@@ -586,9 +588,9 @@ vec4_gs_visitor::gs_end_primitive()
|
|||||||
|
|
||||||
/* control_data_bits |= 1 << ((vertex_count - 1) % 32) */
|
/* control_data_bits |= 1 << ((vertex_count - 1) % 32) */
|
||||||
src_reg one(this, glsl_type::uint_type);
|
src_reg one(this, glsl_type::uint_type);
|
||||||
emit(MOV(dst_reg(one), 1u));
|
emit(MOV(dst_reg(one), brw_imm_ud(1u)));
|
||||||
src_reg prev_count(this, glsl_type::uint_type);
|
src_reg prev_count(this, glsl_type::uint_type);
|
||||||
emit(ADD(dst_reg(prev_count), this->vertex_count, 0xffffffffu));
|
emit(ADD(dst_reg(prev_count), this->vertex_count, brw_imm_ud(0xffffffffu)));
|
||||||
src_reg mask(this, glsl_type::uint_type);
|
src_reg mask(this, glsl_type::uint_type);
|
||||||
/* Note: we're relying on the fact that the GEN SHL instruction only pays
|
/* Note: we're relying on the fact that the GEN SHL instruction only pays
|
||||||
* attention to the lower 5 bits of its second source argument, so on this
|
* attention to the lower 5 bits of its second source argument, so on this
|
||||||
|
|||||||
@@ -373,7 +373,7 @@ vec4_visitor::nir_emit_load_const(nir_load_const_instr *instr)
|
|||||||
}
|
}
|
||||||
|
|
||||||
reg.writemask = writemask;
|
reg.writemask = writemask;
|
||||||
emit(MOV(reg, src_reg(instr->value.i[i])));
|
emit(MOV(reg, brw_imm_d(instr->value.i[i])));
|
||||||
|
|
||||||
remaining &= ~writemask;
|
remaining &= ~writemask;
|
||||||
}
|
}
|
||||||
@@ -444,10 +444,10 @@ vec4_visitor::nir_emit_intrinsic(nir_intrinsic_instr *instr)
|
|||||||
|
|
||||||
inst->base_mrf = 2;
|
inst->base_mrf = 2;
|
||||||
inst->mlen = 1; /* always at least one */
|
inst->mlen = 1; /* always at least one */
|
||||||
inst->src[1] = src_reg(index);
|
inst->src[1] = brw_imm_ud(index);
|
||||||
|
|
||||||
/* MRF for the first parameter */
|
/* MRF for the first parameter */
|
||||||
src_reg lod = src_reg(0);
|
src_reg lod = brw_imm_d(0);
|
||||||
int param_base = inst->base_mrf;
|
int param_base = inst->base_mrf;
|
||||||
int writemask = WRITEMASK_X;
|
int writemask = WRITEMASK_X;
|
||||||
emit(MOV(dst_reg(MRF, param_base, glsl_type::int_type, writemask), lod));
|
emit(MOV(dst_reg(MRF, param_base, glsl_type::int_type, writemask), lod));
|
||||||
@@ -471,12 +471,12 @@ vec4_visitor::nir_emit_intrinsic(nir_intrinsic_instr *instr)
|
|||||||
if (const_uniform_block) {
|
if (const_uniform_block) {
|
||||||
unsigned index = prog_data->base.binding_table.ssbo_start +
|
unsigned index = prog_data->base.binding_table.ssbo_start +
|
||||||
const_uniform_block->u[0];
|
const_uniform_block->u[0];
|
||||||
surf_index = src_reg(index);
|
surf_index = brw_imm_ud(index);
|
||||||
brw_mark_surface_used(&prog_data->base, index);
|
brw_mark_surface_used(&prog_data->base, index);
|
||||||
} else {
|
} else {
|
||||||
surf_index = src_reg(this, glsl_type::uint_type);
|
surf_index = src_reg(this, glsl_type::uint_type);
|
||||||
emit(ADD(dst_reg(surf_index), get_nir_src(instr->src[1], 1),
|
emit(ADD(dst_reg(surf_index), get_nir_src(instr->src[1], 1),
|
||||||
src_reg(prog_data->base.binding_table.ssbo_start)));
|
brw_imm_ud(prog_data->base.binding_table.ssbo_start)));
|
||||||
surf_index = emit_uniformize(surf_index);
|
surf_index = emit_uniformize(surf_index);
|
||||||
|
|
||||||
brw_mark_surface_used(&prog_data->base,
|
brw_mark_surface_used(&prog_data->base,
|
||||||
@@ -491,7 +491,7 @@ vec4_visitor::nir_emit_intrinsic(nir_intrinsic_instr *instr)
|
|||||||
emit(MOV(dst_reg(offset_reg), get_nir_src(instr->src[2], 1)));
|
emit(MOV(dst_reg(offset_reg), get_nir_src(instr->src[2], 1)));
|
||||||
} else {
|
} else {
|
||||||
const_offset_bytes = instr->const_index[0];
|
const_offset_bytes = instr->const_index[0];
|
||||||
emit(MOV(dst_reg(offset_reg), src_reg(const_offset_bytes)));
|
emit(MOV(dst_reg(offset_reg), brw_imm_ud(const_offset_bytes)));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Value */
|
/* Value */
|
||||||
@@ -566,7 +566,7 @@ vec4_visitor::nir_emit_intrinsic(nir_intrinsic_instr *instr)
|
|||||||
if (skipped_channels > 0) {
|
if (skipped_channels > 0) {
|
||||||
if (!has_indirect) {
|
if (!has_indirect) {
|
||||||
const_offset_bytes += 4 * skipped_channels;
|
const_offset_bytes += 4 * skipped_channels;
|
||||||
offset_reg = src_reg(const_offset_bytes);
|
offset_reg = brw_imm_ud(const_offset_bytes);
|
||||||
} else {
|
} else {
|
||||||
emit(ADD(dst_reg(offset_reg), offset_reg,
|
emit(ADD(dst_reg(offset_reg), offset_reg,
|
||||||
brw_imm_ud(4 * skipped_channels)));
|
brw_imm_ud(4 * skipped_channels)));
|
||||||
@@ -614,13 +614,13 @@ vec4_visitor::nir_emit_intrinsic(nir_intrinsic_instr *instr)
|
|||||||
if (const_uniform_block) {
|
if (const_uniform_block) {
|
||||||
unsigned index = prog_data->base.binding_table.ssbo_start +
|
unsigned index = prog_data->base.binding_table.ssbo_start +
|
||||||
const_uniform_block->u[0];
|
const_uniform_block->u[0];
|
||||||
surf_index = src_reg(index);
|
surf_index = brw_imm_ud(index);
|
||||||
|
|
||||||
brw_mark_surface_used(&prog_data->base, index);
|
brw_mark_surface_used(&prog_data->base, index);
|
||||||
} else {
|
} else {
|
||||||
surf_index = src_reg(this, glsl_type::uint_type);
|
surf_index = src_reg(this, glsl_type::uint_type);
|
||||||
emit(ADD(dst_reg(surf_index), get_nir_src(instr->src[0], 1),
|
emit(ADD(dst_reg(surf_index), get_nir_src(instr->src[0], 1),
|
||||||
src_reg(prog_data->base.binding_table.ssbo_start)));
|
brw_imm_ud(prog_data->base.binding_table.ssbo_start)));
|
||||||
surf_index = emit_uniformize(surf_index);
|
surf_index = emit_uniformize(surf_index);
|
||||||
|
|
||||||
/* Assume this may touch any UBO. It would be nice to provide
|
/* Assume this may touch any UBO. It would be nice to provide
|
||||||
@@ -637,7 +637,7 @@ vec4_visitor::nir_emit_intrinsic(nir_intrinsic_instr *instr)
|
|||||||
emit(MOV(dst_reg(offset_reg), get_nir_src(instr->src[1], 1)));
|
emit(MOV(dst_reg(offset_reg), get_nir_src(instr->src[1], 1)));
|
||||||
} else {
|
} else {
|
||||||
const_offset_bytes = instr->const_index[0];
|
const_offset_bytes = instr->const_index[0];
|
||||||
emit(MOV(dst_reg(offset_reg), src_reg(const_offset_bytes)));
|
emit(MOV(dst_reg(offset_reg), brw_imm_ud((const_offset_bytes))));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Read the vector */
|
/* Read the vector */
|
||||||
@@ -762,7 +762,7 @@ vec4_visitor::nir_emit_intrinsic(nir_intrinsic_instr *instr)
|
|||||||
*/
|
*/
|
||||||
const unsigned index = prog_data->base.binding_table.ubo_start +
|
const unsigned index = prog_data->base.binding_table.ubo_start +
|
||||||
const_block_index->u[0];
|
const_block_index->u[0];
|
||||||
surf_index = src_reg(index);
|
surf_index = brw_imm_ud(index);
|
||||||
brw_mark_surface_used(&prog_data->base, index);
|
brw_mark_surface_used(&prog_data->base, index);
|
||||||
} else {
|
} else {
|
||||||
/* The block index is not a constant. Evaluate the index expression
|
/* The block index is not a constant. Evaluate the index expression
|
||||||
@@ -772,7 +772,7 @@ vec4_visitor::nir_emit_intrinsic(nir_intrinsic_instr *instr)
|
|||||||
surf_index = src_reg(this, glsl_type::uint_type);
|
surf_index = src_reg(this, glsl_type::uint_type);
|
||||||
emit(ADD(dst_reg(surf_index), get_nir_src(instr->src[0], nir_type_int,
|
emit(ADD(dst_reg(surf_index), get_nir_src(instr->src[0], nir_type_int,
|
||||||
instr->num_components),
|
instr->num_components),
|
||||||
src_reg(prog_data->base.binding_table.ubo_start)));
|
brw_imm_ud(prog_data->base.binding_table.ubo_start)));
|
||||||
surf_index = emit_uniformize(surf_index);
|
surf_index = emit_uniformize(surf_index);
|
||||||
|
|
||||||
/* Assume this may touch any UBO. It would be nice to provide
|
/* Assume this may touch any UBO. It would be nice to provide
|
||||||
@@ -787,11 +787,11 @@ vec4_visitor::nir_emit_intrinsic(nir_intrinsic_instr *instr)
|
|||||||
src_reg offset;
|
src_reg offset;
|
||||||
|
|
||||||
if (!has_indirect) {
|
if (!has_indirect) {
|
||||||
offset = src_reg(const_offset / 16);
|
offset = brw_imm_ud(const_offset / 16);
|
||||||
} else {
|
} else {
|
||||||
offset = src_reg(this, glsl_type::uint_type);
|
offset = src_reg(this, glsl_type::uint_type);
|
||||||
emit(SHR(dst_reg(offset), get_nir_src(instr->src[1], nir_type_int, 1),
|
emit(SHR(dst_reg(offset), get_nir_src(instr->src[1], nir_type_int, 1),
|
||||||
src_reg(4u)));
|
brw_imm_ud(4u)));
|
||||||
}
|
}
|
||||||
|
|
||||||
src_reg packed_consts = src_reg(this, glsl_type::vec4_type);
|
src_reg packed_consts = src_reg(this, glsl_type::vec4_type);
|
||||||
@@ -848,12 +848,12 @@ vec4_visitor::nir_emit_ssbo_atomic(int op, nir_intrinsic_instr *instr)
|
|||||||
if (const_surface) {
|
if (const_surface) {
|
||||||
unsigned surf_index = prog_data->base.binding_table.ssbo_start +
|
unsigned surf_index = prog_data->base.binding_table.ssbo_start +
|
||||||
const_surface->u[0];
|
const_surface->u[0];
|
||||||
surface = src_reg(surf_index);
|
surface = brw_imm_ud(surf_index);
|
||||||
brw_mark_surface_used(&prog_data->base, surf_index);
|
brw_mark_surface_used(&prog_data->base, surf_index);
|
||||||
} else {
|
} else {
|
||||||
surface = src_reg(this, glsl_type::uint_type);
|
surface = src_reg(this, glsl_type::uint_type);
|
||||||
emit(ADD(dst_reg(surface), get_nir_src(instr->src[0]),
|
emit(ADD(dst_reg(surface), get_nir_src(instr->src[0]),
|
||||||
src_reg(prog_data->base.binding_table.ssbo_start)));
|
brw_imm_ud(prog_data->base.binding_table.ssbo_start)));
|
||||||
|
|
||||||
/* Assume this may touch any UBO. This is the same we do for other
|
/* Assume this may touch any UBO. This is the same we do for other
|
||||||
* UBO/SSBO accesses with non-constant surface.
|
* UBO/SSBO accesses with non-constant surface.
|
||||||
@@ -1174,8 +1174,8 @@ vec4_visitor::nir_emit_alu(nir_alu_instr *instr)
|
|||||||
|
|
||||||
emit(CMP(dst_null_d(), swizzle(op[0], swiz), swizzle(op[1], swiz),
|
emit(CMP(dst_null_d(), swizzle(op[0], swiz), swizzle(op[1], swiz),
|
||||||
brw_conditional_for_nir_comparison(instr->op)));
|
brw_conditional_for_nir_comparison(instr->op)));
|
||||||
emit(MOV(dst, src_reg(0)));
|
emit(MOV(dst, brw_imm_d(0)));
|
||||||
inst = emit(MOV(dst, src_reg(~0)));
|
inst = emit(MOV(dst, brw_imm_d(~0)));
|
||||||
inst->predicate = BRW_PREDICATE_ALIGN16_ALL4H;
|
inst->predicate = BRW_PREDICATE_ALIGN16_ALL4H;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -1192,8 +1192,8 @@ vec4_visitor::nir_emit_alu(nir_alu_instr *instr)
|
|||||||
emit(CMP(dst_null_d(), swizzle(op[0], swiz), swizzle(op[1], swiz),
|
emit(CMP(dst_null_d(), swizzle(op[0], swiz), swizzle(op[1], swiz),
|
||||||
brw_conditional_for_nir_comparison(instr->op)));
|
brw_conditional_for_nir_comparison(instr->op)));
|
||||||
|
|
||||||
emit(MOV(dst, src_reg(0)));
|
emit(MOV(dst, brw_imm_d(0)));
|
||||||
inst = emit(MOV(dst, src_reg(~0)));
|
inst = emit(MOV(dst, brw_imm_d(~0)));
|
||||||
inst->predicate = BRW_PREDICATE_ALIGN16_ANY4H;
|
inst->predicate = BRW_PREDICATE_ALIGN16_ANY4H;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -1235,11 +1235,11 @@ vec4_visitor::nir_emit_alu(nir_alu_instr *instr)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case nir_op_f2b:
|
case nir_op_f2b:
|
||||||
emit(CMP(dst, op[0], src_reg(0.0f), BRW_CONDITIONAL_NZ));
|
emit(CMP(dst, op[0], brw_imm_f(0.0f), BRW_CONDITIONAL_NZ));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case nir_op_i2b:
|
case nir_op_i2b:
|
||||||
emit(CMP(dst, op[0], src_reg(0), BRW_CONDITIONAL_NZ));
|
emit(CMP(dst, op[0], brw_imm_d(0), BRW_CONDITIONAL_NZ));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case nir_op_fnoise1_1:
|
case nir_op_fnoise1_1:
|
||||||
@@ -1321,9 +1321,9 @@ vec4_visitor::nir_emit_alu(nir_alu_instr *instr)
|
|||||||
* subtract the result from 31 to convert the MSB count into an LSB count.
|
* subtract the result from 31 to convert the MSB count into an LSB count.
|
||||||
*/
|
*/
|
||||||
src_reg src(dst);
|
src_reg src(dst);
|
||||||
emit(CMP(dst_null_d(), src, src_reg(-1), BRW_CONDITIONAL_NZ));
|
emit(CMP(dst_null_d(), src, brw_imm_d(-1), BRW_CONDITIONAL_NZ));
|
||||||
|
|
||||||
inst = emit(ADD(dst, src, src_reg(31)));
|
inst = emit(ADD(dst, src, brw_imm_d(31)));
|
||||||
inst->predicate = BRW_PREDICATE_NORMAL;
|
inst->predicate = BRW_PREDICATE_NORMAL;
|
||||||
inst->src[0].negate = true;
|
inst->src[0].negate = true;
|
||||||
break;
|
break;
|
||||||
@@ -1364,13 +1364,13 @@ vec4_visitor::nir_emit_alu(nir_alu_instr *instr)
|
|||||||
* Predicated OR ORs 1.0 (0x3f800000) with the sign bit if val is not
|
* Predicated OR ORs 1.0 (0x3f800000) with the sign bit if val is not
|
||||||
* zero.
|
* zero.
|
||||||
*/
|
*/
|
||||||
emit(CMP(dst_null_f(), op[0], src_reg(0.0f), BRW_CONDITIONAL_NZ));
|
emit(CMP(dst_null_f(), op[0], brw_imm_f(0.0f), BRW_CONDITIONAL_NZ));
|
||||||
|
|
||||||
op[0].type = BRW_REGISTER_TYPE_UD;
|
op[0].type = BRW_REGISTER_TYPE_UD;
|
||||||
dst.type = BRW_REGISTER_TYPE_UD;
|
dst.type = BRW_REGISTER_TYPE_UD;
|
||||||
emit(AND(dst, op[0], src_reg(0x80000000u)));
|
emit(AND(dst, op[0], brw_imm_ud(0x80000000u)));
|
||||||
|
|
||||||
inst = emit(OR(dst, src_reg(dst), src_reg(0x3f800000u)));
|
inst = emit(OR(dst, src_reg(dst), brw_imm_ud(0x3f800000u)));
|
||||||
inst->predicate = BRW_PREDICATE_NORMAL;
|
inst->predicate = BRW_PREDICATE_NORMAL;
|
||||||
dst.type = BRW_REGISTER_TYPE_F;
|
dst.type = BRW_REGISTER_TYPE_F;
|
||||||
|
|
||||||
@@ -1385,9 +1385,9 @@ vec4_visitor::nir_emit_alu(nir_alu_instr *instr)
|
|||||||
* -> non-negative val generates 0x00000000.
|
* -> non-negative val generates 0x00000000.
|
||||||
* Predicated OR sets 1 if val is positive.
|
* Predicated OR sets 1 if val is positive.
|
||||||
*/
|
*/
|
||||||
emit(CMP(dst_null_d(), op[0], src_reg(0), BRW_CONDITIONAL_G));
|
emit(CMP(dst_null_d(), op[0], brw_imm_d(0), BRW_CONDITIONAL_G));
|
||||||
emit(ASR(dst, op[0], src_reg(31)));
|
emit(ASR(dst, op[0], brw_imm_d(31)));
|
||||||
inst = emit(OR(dst, src_reg(dst), src_reg(1)));
|
inst = emit(OR(dst, src_reg(dst), brw_imm_d(1)));
|
||||||
inst->predicate = BRW_PREDICATE_NORMAL;
|
inst->predicate = BRW_PREDICATE_NORMAL;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -1418,7 +1418,7 @@ vec4_visitor::nir_emit_alu(nir_alu_instr *instr)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case nir_op_bcsel:
|
case nir_op_bcsel:
|
||||||
emit(CMP(dst_null_d(), op[0], src_reg(0), BRW_CONDITIONAL_NZ));
|
emit(CMP(dst_null_d(), op[0], brw_imm_d(0), BRW_CONDITIONAL_NZ));
|
||||||
inst = emit(BRW_OPCODE_SEL, dst, op[1], op[2]);
|
inst = emit(BRW_OPCODE_SEL, dst, op[1], op[2]);
|
||||||
switch (dst.writemask) {
|
switch (dst.writemask) {
|
||||||
case WRITEMASK_X:
|
case WRITEMASK_X:
|
||||||
@@ -1465,10 +1465,10 @@ vec4_visitor::nir_emit_alu(nir_alu_instr *instr)
|
|||||||
unsigned swiz =
|
unsigned swiz =
|
||||||
brw_swizzle_for_size(nir_op_infos[instr->op].input_sizes[0]);
|
brw_swizzle_for_size(nir_op_infos[instr->op].input_sizes[0]);
|
||||||
|
|
||||||
emit(CMP(dst_null_d(), swizzle(op[0], swiz), src_reg(0),
|
emit(CMP(dst_null_d(), swizzle(op[0], swiz), brw_imm_d(0),
|
||||||
BRW_CONDITIONAL_NZ));
|
BRW_CONDITIONAL_NZ));
|
||||||
emit(MOV(dst, src_reg(0)));
|
emit(MOV(dst, brw_imm_d(0)));
|
||||||
inst = emit(MOV(dst, src_reg(~0)));
|
inst = emit(MOV(dst, brw_imm_d(~0)));
|
||||||
inst->predicate = BRW_PREDICATE_ALIGN16_ANY4H;
|
inst->predicate = BRW_PREDICATE_ALIGN16_ANY4H;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -1502,7 +1502,7 @@ vec4_visitor::nir_emit_alu(nir_alu_instr *instr)
|
|||||||
BRW_NIR_BOOLEAN_NEEDS_RESOLVE) {
|
BRW_NIR_BOOLEAN_NEEDS_RESOLVE) {
|
||||||
dst_reg masked = dst_reg(this, glsl_type::int_type);
|
dst_reg masked = dst_reg(this, glsl_type::int_type);
|
||||||
masked.writemask = dst.writemask;
|
masked.writemask = dst.writemask;
|
||||||
emit(AND(masked, src_reg(dst), src_reg(1)));
|
emit(AND(masked, src_reg(dst), brw_imm_d(1)));
|
||||||
src_reg masked_neg = src_reg(masked);
|
src_reg masked_neg = src_reg(masked);
|
||||||
masked_neg.negate = true;
|
masked_neg.negate = true;
|
||||||
emit(MOV(retype(dst, BRW_REGISTER_TYPE_D), masked_neg));
|
emit(MOV(retype(dst, BRW_REGISTER_TYPE_D), masked_neg));
|
||||||
@@ -1575,7 +1575,7 @@ void
|
|||||||
vec4_visitor::nir_emit_texture(nir_tex_instr *instr)
|
vec4_visitor::nir_emit_texture(nir_tex_instr *instr)
|
||||||
{
|
{
|
||||||
unsigned sampler = instr->sampler_index;
|
unsigned sampler = instr->sampler_index;
|
||||||
src_reg sampler_reg = src_reg(sampler);
|
src_reg sampler_reg = brw_imm_ud(sampler);
|
||||||
src_reg coordinate;
|
src_reg coordinate;
|
||||||
const glsl_type *coord_type = NULL;
|
const glsl_type *coord_type = NULL;
|
||||||
src_reg shadow_comparitor;
|
src_reg shadow_comparitor;
|
||||||
@@ -1595,7 +1595,7 @@ vec4_visitor::nir_emit_texture(nir_tex_instr *instr)
|
|||||||
if (instr->op == nir_texop_tg4) {
|
if (instr->op == nir_texop_tg4) {
|
||||||
int swiz = GET_SWZ(key_tex->swizzles[sampler], instr->component);
|
int swiz = GET_SWZ(key_tex->swizzles[sampler], instr->component);
|
||||||
if (swiz == SWIZZLE_ZERO || swiz == SWIZZLE_ONE) {
|
if (swiz == SWIZZLE_ZERO || swiz == SWIZZLE_ONE) {
|
||||||
emit(MOV(dest, src_reg(swiz == SWIZZLE_ONE ? 1.0f : 0.0f)));
|
emit(MOV(dest, brw_imm_f(swiz == SWIZZLE_ONE ? 1.0f : 0.0f)));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1658,7 +1658,7 @@ vec4_visitor::nir_emit_texture(nir_tex_instr *instr)
|
|||||||
key_tex->compressed_multisample_layout_mask & (1 << sampler)) {
|
key_tex->compressed_multisample_layout_mask & (1 << sampler)) {
|
||||||
mcs = emit_mcs_fetch(coord_type, coordinate, sampler_reg);
|
mcs = emit_mcs_fetch(coord_type, coordinate, sampler_reg);
|
||||||
} else {
|
} else {
|
||||||
mcs = src_reg(0u);
|
mcs = brw_imm_ud(0u);
|
||||||
}
|
}
|
||||||
mcs = retype(mcs, BRW_REGISTER_TYPE_UD);
|
mcs = retype(mcs, BRW_REGISTER_TYPE_UD);
|
||||||
break;
|
break;
|
||||||
@@ -1686,7 +1686,7 @@ vec4_visitor::nir_emit_texture(nir_tex_instr *instr)
|
|||||||
/* Emit code to evaluate the actual indexing expression */
|
/* Emit code to evaluate the actual indexing expression */
|
||||||
src_reg src = get_nir_src(instr->src[i].src, 1);
|
src_reg src = get_nir_src(instr->src[i].src, 1);
|
||||||
src_reg temp(this, glsl_type::uint_type);
|
src_reg temp(this, glsl_type::uint_type);
|
||||||
emit(ADD(dst_reg(temp), src, src_reg(sampler)));
|
emit(ADD(dst_reg(temp), src, brw_imm_ud(sampler)));
|
||||||
sampler_reg = emit_uniformize(temp);
|
sampler_reg = emit_uniformize(temp);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ namespace {
|
|||||||
|
|
||||||
bld.MOV(writemask(tmp, mask), src);
|
bld.MOV(writemask(tmp, mask), src);
|
||||||
if (n < 4)
|
if (n < 4)
|
||||||
bld.MOV(writemask(tmp, ~mask), 0);
|
bld.MOV(writemask(tmp, ~mask), brw_imm_d(0));
|
||||||
|
|
||||||
return emit_stride(bld, src_reg(tmp), n, has_simd4x2 ? 1 : 4, 1);
|
return emit_stride(bld, src_reg(tmp), n, has_simd4x2 ? 1 : 4, 1);
|
||||||
}
|
}
|
||||||
@@ -143,7 +143,7 @@ namespace brw {
|
|||||||
/* Emit the message send instruction. */
|
/* Emit the message send instruction. */
|
||||||
const dst_reg dst = bld.vgrf(BRW_REGISTER_TYPE_UD, ret_sz);
|
const dst_reg dst = bld.vgrf(BRW_REGISTER_TYPE_UD, ret_sz);
|
||||||
vec4_instruction *inst =
|
vec4_instruction *inst =
|
||||||
bld.emit(op, dst, src_reg(payload), usurface, arg);
|
bld.emit(op, dst, src_reg(payload), usurface, brw_imm_ud(arg));
|
||||||
inst->mlen = sz;
|
inst->mlen = sz;
|
||||||
inst->regs_written = ret_sz;
|
inst->regs_written = ret_sz;
|
||||||
inst->header_size = header_sz;
|
inst->header_size = header_sz;
|
||||||
@@ -235,7 +235,7 @@ namespace brw {
|
|||||||
const vec4_builder ubld = bld.exec_all();
|
const vec4_builder ubld = bld.exec_all();
|
||||||
const dst_reg dst = bld.vgrf(BRW_REGISTER_TYPE_UD);
|
const dst_reg dst = bld.vgrf(BRW_REGISTER_TYPE_UD);
|
||||||
|
|
||||||
ubld.MOV(dst, src_reg(0));
|
ubld.MOV(dst, brw_imm_d(0));
|
||||||
|
|
||||||
if (bld.shader->devinfo->gen == 7 &&
|
if (bld.shader->devinfo->gen == 7 &&
|
||||||
!bld.shader->devinfo->is_haswell) {
|
!bld.shader->devinfo->is_haswell) {
|
||||||
@@ -243,7 +243,7 @@ namespace brw {
|
|||||||
* have no SIMD4x2 variant. We only use the two X channels
|
* have no SIMD4x2 variant. We only use the two X channels
|
||||||
* in that case, mask everything else out.
|
* in that case, mask everything else out.
|
||||||
*/
|
*/
|
||||||
ubld.MOV(writemask(dst, WRITEMASK_W), src_reg(0x11));
|
ubld.MOV(writemask(dst, WRITEMASK_W), brw_imm_d(0x11));
|
||||||
}
|
}
|
||||||
|
|
||||||
return src_reg(dst);
|
return src_reg(dst);
|
||||||
|
|||||||
@@ -408,7 +408,7 @@ vec4_visitor::emit_pack_half_2x16(dst_reg dst, src_reg src0)
|
|||||||
* You should inspect the disasm output in order to verify that the MOV is
|
* You should inspect the disasm output in order to verify that the MOV is
|
||||||
* not optimized away.
|
* not optimized away.
|
||||||
*/
|
*/
|
||||||
emit(MOV(tmp_dst, src_reg(0x12345678u)));
|
emit(MOV(tmp_dst, brw_imm_ud(0x12345678u)));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Give tmp the form below, where "." means untouched.
|
/* Give tmp the form below, where "." means untouched.
|
||||||
@@ -427,7 +427,7 @@ vec4_visitor::emit_pack_half_2x16(dst_reg dst, src_reg src0)
|
|||||||
* 0xhhhh0000
|
* 0xhhhh0000
|
||||||
*/
|
*/
|
||||||
tmp_src.swizzle = BRW_SWIZZLE_YYYY;
|
tmp_src.swizzle = BRW_SWIZZLE_YYYY;
|
||||||
emit(SHL(dst, tmp_src, src_reg(16u)));
|
emit(SHL(dst, tmp_src, brw_imm_ud(16u)));
|
||||||
|
|
||||||
/* Finally, give the write-channels of dst the form of packHalf2x16's
|
/* Finally, give the write-channels of dst the form of packHalf2x16's
|
||||||
* output:
|
* output:
|
||||||
@@ -466,10 +466,10 @@ vec4_visitor::emit_unpack_half_2x16(dst_reg dst, src_reg src0)
|
|||||||
src_reg tmp_src(tmp_dst);
|
src_reg tmp_src(tmp_dst);
|
||||||
|
|
||||||
tmp_dst.writemask = WRITEMASK_X;
|
tmp_dst.writemask = WRITEMASK_X;
|
||||||
emit(AND(tmp_dst, src0, src_reg(0xffffu)));
|
emit(AND(tmp_dst, src0, brw_imm_ud(0xffffu)));
|
||||||
|
|
||||||
tmp_dst.writemask = WRITEMASK_Y;
|
tmp_dst.writemask = WRITEMASK_Y;
|
||||||
emit(SHR(tmp_dst, src0, src_reg(16u)));
|
emit(SHR(tmp_dst, src0, brw_imm_ud(16u)));
|
||||||
|
|
||||||
dst.writemask = WRITEMASK_XY;
|
dst.writemask = WRITEMASK_XY;
|
||||||
emit(F16TO32(dst, tmp_src));
|
emit(F16TO32(dst, tmp_src));
|
||||||
@@ -484,7 +484,7 @@ vec4_visitor::emit_unpack_unorm_4x8(const dst_reg &dst, src_reg src0)
|
|||||||
* vector float and a type-converting MOV.
|
* vector float and a type-converting MOV.
|
||||||
*/
|
*/
|
||||||
dst_reg shift(this, glsl_type::uvec4_type);
|
dst_reg shift(this, glsl_type::uvec4_type);
|
||||||
emit(MOV(shift, src_reg(0x00, 0x60, 0x70, 0x78)));
|
emit(MOV(shift, brw_imm_vf4(0x00, 0x60, 0x70, 0x78)));
|
||||||
|
|
||||||
dst_reg shifted(this, glsl_type::uvec4_type);
|
dst_reg shifted(this, glsl_type::uvec4_type);
|
||||||
src0.swizzle = BRW_SWIZZLE_XXXX;
|
src0.swizzle = BRW_SWIZZLE_XXXX;
|
||||||
@@ -494,7 +494,7 @@ vec4_visitor::emit_unpack_unorm_4x8(const dst_reg &dst, src_reg src0)
|
|||||||
dst_reg f(this, glsl_type::vec4_type);
|
dst_reg f(this, glsl_type::vec4_type);
|
||||||
emit(VEC4_OPCODE_MOV_BYTES, f, src_reg(shifted));
|
emit(VEC4_OPCODE_MOV_BYTES, f, src_reg(shifted));
|
||||||
|
|
||||||
emit(MUL(dst, src_reg(f), src_reg(1.0f / 255.0f)));
|
emit(MUL(dst, src_reg(f), brw_imm_f(1.0f / 255.0f)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -506,7 +506,7 @@ vec4_visitor::emit_unpack_snorm_4x8(const dst_reg &dst, src_reg src0)
|
|||||||
* vector float and a type-converting MOV.
|
* vector float and a type-converting MOV.
|
||||||
*/
|
*/
|
||||||
dst_reg shift(this, glsl_type::uvec4_type);
|
dst_reg shift(this, glsl_type::uvec4_type);
|
||||||
emit(MOV(shift, src_reg(0x00, 0x60, 0x70, 0x78)));
|
emit(MOV(shift, brw_imm_vf4(0x00, 0x60, 0x70, 0x78)));
|
||||||
|
|
||||||
dst_reg shifted(this, glsl_type::uvec4_type);
|
dst_reg shifted(this, glsl_type::uvec4_type);
|
||||||
src0.swizzle = BRW_SWIZZLE_XXXX;
|
src0.swizzle = BRW_SWIZZLE_XXXX;
|
||||||
@@ -517,11 +517,11 @@ vec4_visitor::emit_unpack_snorm_4x8(const dst_reg &dst, src_reg src0)
|
|||||||
emit(VEC4_OPCODE_MOV_BYTES, f, src_reg(shifted));
|
emit(VEC4_OPCODE_MOV_BYTES, f, src_reg(shifted));
|
||||||
|
|
||||||
dst_reg scaled(this, glsl_type::vec4_type);
|
dst_reg scaled(this, glsl_type::vec4_type);
|
||||||
emit(MUL(scaled, src_reg(f), src_reg(1.0f / 127.0f)));
|
emit(MUL(scaled, src_reg(f), brw_imm_f(1.0f / 127.0f)));
|
||||||
|
|
||||||
dst_reg max(this, glsl_type::vec4_type);
|
dst_reg max(this, glsl_type::vec4_type);
|
||||||
emit_minmax(BRW_CONDITIONAL_GE, max, src_reg(scaled), src_reg(-1.0f));
|
emit_minmax(BRW_CONDITIONAL_GE, max, src_reg(scaled), brw_imm_f(-1.0f));
|
||||||
emit_minmax(BRW_CONDITIONAL_L, dst, src_reg(max), src_reg(1.0f));
|
emit_minmax(BRW_CONDITIONAL_L, dst, src_reg(max), brw_imm_f(1.0f));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -532,7 +532,7 @@ vec4_visitor::emit_pack_unorm_4x8(const dst_reg &dst, const src_reg &src0)
|
|||||||
inst->saturate = true;
|
inst->saturate = true;
|
||||||
|
|
||||||
dst_reg scaled(this, glsl_type::vec4_type);
|
dst_reg scaled(this, glsl_type::vec4_type);
|
||||||
emit(MUL(scaled, src_reg(saturated), src_reg(255.0f)));
|
emit(MUL(scaled, src_reg(saturated), brw_imm_f(255.0f)));
|
||||||
|
|
||||||
dst_reg rounded(this, glsl_type::vec4_type);
|
dst_reg rounded(this, glsl_type::vec4_type);
|
||||||
emit(RNDE(rounded, src_reg(scaled)));
|
emit(RNDE(rounded, src_reg(scaled)));
|
||||||
@@ -548,13 +548,13 @@ void
|
|||||||
vec4_visitor::emit_pack_snorm_4x8(const dst_reg &dst, const src_reg &src0)
|
vec4_visitor::emit_pack_snorm_4x8(const dst_reg &dst, const src_reg &src0)
|
||||||
{
|
{
|
||||||
dst_reg max(this, glsl_type::vec4_type);
|
dst_reg max(this, glsl_type::vec4_type);
|
||||||
emit_minmax(BRW_CONDITIONAL_GE, max, src0, src_reg(-1.0f));
|
emit_minmax(BRW_CONDITIONAL_GE, max, src0, brw_imm_f(-1.0f));
|
||||||
|
|
||||||
dst_reg min(this, glsl_type::vec4_type);
|
dst_reg min(this, glsl_type::vec4_type);
|
||||||
emit_minmax(BRW_CONDITIONAL_L, min, src_reg(max), src_reg(1.0f));
|
emit_minmax(BRW_CONDITIONAL_L, min, src_reg(max), brw_imm_f(1.0f));
|
||||||
|
|
||||||
dst_reg scaled(this, glsl_type::vec4_type);
|
dst_reg scaled(this, glsl_type::vec4_type);
|
||||||
emit(MUL(scaled, src_reg(min), src_reg(127.0f)));
|
emit(MUL(scaled, src_reg(min), brw_imm_f(127.0f)));
|
||||||
|
|
||||||
dst_reg rounded(this, glsl_type::vec4_type);
|
dst_reg rounded(this, glsl_type::vec4_type);
|
||||||
emit(RNDE(rounded, src_reg(scaled)));
|
emit(RNDE(rounded, src_reg(scaled)));
|
||||||
@@ -715,7 +715,7 @@ vec4_visitor::emit_lrp(const dst_reg &dst,
|
|||||||
x_times_one_minus_a.writemask = dst.writemask;
|
x_times_one_minus_a.writemask = dst.writemask;
|
||||||
|
|
||||||
emit(MUL(y_times_a, y, a));
|
emit(MUL(y_times_a, y, a));
|
||||||
emit(ADD(one_minus_a, negate(a), src_reg(1.0f)));
|
emit(ADD(one_minus_a, negate(a), brw_imm_f(1.0f)));
|
||||||
emit(MUL(x_times_one_minus_a, x, src_reg(one_minus_a)));
|
emit(MUL(x_times_one_minus_a, x, src_reg(one_minus_a)));
|
||||||
return emit(ADD(dst, src_reg(x_times_one_minus_a), src_reg(y_times_a)));
|
return emit(ADD(dst, src_reg(x_times_one_minus_a), src_reg(y_times_a)));
|
||||||
}
|
}
|
||||||
@@ -849,7 +849,7 @@ vec4_visitor::emit_mcs_fetch(const glsl_type *coordinate_type,
|
|||||||
coordinate));
|
coordinate));
|
||||||
|
|
||||||
emit(MOV(dst_reg(MRF, param_base, coordinate_type, zero_mask),
|
emit(MOV(dst_reg(MRF, param_base, coordinate_type, zero_mask),
|
||||||
src_reg(0)));
|
brw_imm_d(0)));
|
||||||
|
|
||||||
emit(inst);
|
emit(inst);
|
||||||
return src_reg(inst->dst);
|
return src_reg(inst->dst);
|
||||||
@@ -889,7 +889,7 @@ vec4_visitor::emit_texture(ir_texture_opcode op,
|
|||||||
*/
|
*/
|
||||||
if (op == ir_tex || op == ir_query_levels) {
|
if (op == ir_tex || op == ir_query_levels) {
|
||||||
assert(lod.file == BAD_FILE);
|
assert(lod.file == BAD_FILE);
|
||||||
lod = src_reg(0.0f);
|
lod = brw_imm_f(0.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
enum opcode opcode;
|
enum opcode opcode;
|
||||||
@@ -959,7 +959,7 @@ vec4_visitor::emit_texture(ir_texture_opcode op,
|
|||||||
|
|
||||||
if (zero_mask != 0) {
|
if (zero_mask != 0) {
|
||||||
emit(MOV(dst_reg(MRF, param_base, coordinate.type, zero_mask),
|
emit(MOV(dst_reg(MRF, param_base, coordinate.type, zero_mask),
|
||||||
src_reg(0)));
|
brw_imm_d(0)));
|
||||||
}
|
}
|
||||||
/* Load the shadow comparitor */
|
/* Load the shadow comparitor */
|
||||||
if (shadow_comparitor.file != BAD_FILE && op != ir_txd && (op != ir_tg4 || offset_value.file == BAD_FILE)) {
|
if (shadow_comparitor.file != BAD_FILE && op != ir_txd && (op != ir_tg4 || offset_value.file == BAD_FILE)) {
|
||||||
@@ -1058,7 +1058,7 @@ vec4_visitor::emit_texture(ir_texture_opcode op,
|
|||||||
if (op == ir_txs && is_cube_array) {
|
if (op == ir_txs && is_cube_array) {
|
||||||
emit_math(SHADER_OPCODE_INT_QUOTIENT,
|
emit_math(SHADER_OPCODE_INT_QUOTIENT,
|
||||||
writemask(inst->dst, WRITEMASK_Z),
|
writemask(inst->dst, WRITEMASK_Z),
|
||||||
src_reg(inst->dst), src_reg(6));
|
src_reg(inst->dst), brw_imm_d(6));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (devinfo->gen == 6 && op == ir_tg4) {
|
if (devinfo->gen == 6 && op == ir_tg4) {
|
||||||
@@ -1083,7 +1083,7 @@ vec4_visitor::emit_gen6_gather_wa(uint8_t wa, dst_reg dst)
|
|||||||
dst_f.type = BRW_REGISTER_TYPE_F;
|
dst_f.type = BRW_REGISTER_TYPE_F;
|
||||||
|
|
||||||
/* Convert from UNORM to UINT */
|
/* Convert from UNORM to UINT */
|
||||||
emit(MUL(dst_f, src_reg(dst_f), src_reg((float)((1 << width) - 1))));
|
emit(MUL(dst_f, src_reg(dst_f), brw_imm_f((float)((1 << width) - 1))));
|
||||||
emit(MOV(dst, src_reg(dst_f)));
|
emit(MOV(dst, src_reg(dst_f)));
|
||||||
|
|
||||||
if (wa & WA_SIGN) {
|
if (wa & WA_SIGN) {
|
||||||
@@ -1091,8 +1091,8 @@ vec4_visitor::emit_gen6_gather_wa(uint8_t wa, dst_reg dst)
|
|||||||
* shifting the sign bit into place, then shifting back
|
* shifting the sign bit into place, then shifting back
|
||||||
* preserving sign.
|
* preserving sign.
|
||||||
*/
|
*/
|
||||||
emit(SHL(dst, src_reg(dst), src_reg(32 - width)));
|
emit(SHL(dst, src_reg(dst), brw_imm_d(32 - width)));
|
||||||
emit(ASR(dst, src_reg(dst), src_reg(32 - width)));
|
emit(ASR(dst, src_reg(dst), brw_imm_d(32 - width)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1168,12 +1168,12 @@ vec4_visitor::swizzle_result(ir_texture_opcode op, dst_reg dest,
|
|||||||
|
|
||||||
if (zero_mask) {
|
if (zero_mask) {
|
||||||
swizzled_result.writemask = zero_mask;
|
swizzled_result.writemask = zero_mask;
|
||||||
emit(MOV(swizzled_result, src_reg(0.0f)));
|
emit(MOV(swizzled_result, brw_imm_f(0.0f)));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (one_mask) {
|
if (one_mask) {
|
||||||
swizzled_result.writemask = one_mask;
|
swizzled_result.writemask = one_mask;
|
||||||
emit(MOV(swizzled_result, src_reg(1.0f)));
|
emit(MOV(swizzled_result, brw_imm_f(1.0f)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1220,7 +1220,7 @@ vec4_visitor::emit_untyped_atomic(unsigned atomic_op, unsigned surf_index,
|
|||||||
*/
|
*/
|
||||||
vec4_instruction *inst = emit(SHADER_OPCODE_UNTYPED_ATOMIC, dst,
|
vec4_instruction *inst = emit(SHADER_OPCODE_UNTYPED_ATOMIC, dst,
|
||||||
src_payload,
|
src_payload,
|
||||||
src_reg(surf_index), src_reg(atomic_op));
|
brw_imm_ud(surf_index), brw_imm_ud(atomic_op));
|
||||||
inst->mlen = mlen;
|
inst->mlen = mlen;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1240,7 +1240,7 @@ vec4_visitor::emit_untyped_surface_read(unsigned surf_index, dst_reg dst,
|
|||||||
*/
|
*/
|
||||||
vec4_instruction *inst = emit(SHADER_OPCODE_UNTYPED_SURFACE_READ, dst,
|
vec4_instruction *inst = emit(SHADER_OPCODE_UNTYPED_SURFACE_READ, dst,
|
||||||
src_reg(offset),
|
src_reg(offset),
|
||||||
src_reg(surf_index), src_reg(1));
|
brw_imm_ud(surf_index), brw_imm_d(1));
|
||||||
inst->mlen = 1;
|
inst->mlen = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1281,14 +1281,14 @@ vec4_visitor::emit_psiz_and_flags(dst_reg reg)
|
|||||||
dst_reg header1_w = header1;
|
dst_reg header1_w = header1;
|
||||||
header1_w.writemask = WRITEMASK_W;
|
header1_w.writemask = WRITEMASK_W;
|
||||||
|
|
||||||
emit(MOV(header1, 0u));
|
emit(MOV(header1, brw_imm_ud(0u)));
|
||||||
|
|
||||||
if (prog_data->vue_map.slots_valid & VARYING_BIT_PSIZ) {
|
if (prog_data->vue_map.slots_valid & VARYING_BIT_PSIZ) {
|
||||||
src_reg psiz = src_reg(output_reg[VARYING_SLOT_PSIZ]);
|
src_reg psiz = src_reg(output_reg[VARYING_SLOT_PSIZ]);
|
||||||
|
|
||||||
current_annotation = "Point size";
|
current_annotation = "Point size";
|
||||||
emit(MUL(header1_w, psiz, src_reg((float)(1 << 11))));
|
emit(MUL(header1_w, psiz, brw_imm_f((float)(1 << 11))));
|
||||||
emit(AND(header1_w, src_reg(header1_w), 0x7ff << 8));
|
emit(AND(header1_w, src_reg(header1_w), brw_imm_d(0x7ff << 8)));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (output_reg[VARYING_SLOT_CLIP_DIST0].file != BAD_FILE) {
|
if (output_reg[VARYING_SLOT_CLIP_DIST0].file != BAD_FILE) {
|
||||||
@@ -1296,13 +1296,13 @@ vec4_visitor::emit_psiz_and_flags(dst_reg reg)
|
|||||||
dst_reg flags0 = dst_reg(this, glsl_type::uint_type);
|
dst_reg flags0 = dst_reg(this, glsl_type::uint_type);
|
||||||
dst_reg flags1 = dst_reg(this, glsl_type::uint_type);
|
dst_reg flags1 = dst_reg(this, glsl_type::uint_type);
|
||||||
|
|
||||||
emit(CMP(dst_null_f(), src_reg(output_reg[VARYING_SLOT_CLIP_DIST0]), src_reg(0.0f), BRW_CONDITIONAL_L));
|
emit(CMP(dst_null_f(), src_reg(output_reg[VARYING_SLOT_CLIP_DIST0]), brw_imm_f(0.0f), BRW_CONDITIONAL_L));
|
||||||
emit(VS_OPCODE_UNPACK_FLAGS_SIMD4X2, flags0, src_reg(0));
|
emit(VS_OPCODE_UNPACK_FLAGS_SIMD4X2, flags0, brw_imm_d(0));
|
||||||
emit(OR(header1_w, src_reg(header1_w), src_reg(flags0)));
|
emit(OR(header1_w, src_reg(header1_w), src_reg(flags0)));
|
||||||
|
|
||||||
emit(CMP(dst_null_f(), src_reg(output_reg[VARYING_SLOT_CLIP_DIST1]), src_reg(0.0f), BRW_CONDITIONAL_L));
|
emit(CMP(dst_null_f(), src_reg(output_reg[VARYING_SLOT_CLIP_DIST1]), brw_imm_f(0.0f), BRW_CONDITIONAL_L));
|
||||||
emit(VS_OPCODE_UNPACK_FLAGS_SIMD4X2, flags1, src_reg(0));
|
emit(VS_OPCODE_UNPACK_FLAGS_SIMD4X2, flags1, brw_imm_d(0));
|
||||||
emit(SHL(flags1, src_reg(flags1), src_reg(4)));
|
emit(SHL(flags1, src_reg(flags1), brw_imm_d(4)));
|
||||||
emit(OR(header1_w, src_reg(header1_w), src_reg(flags1)));
|
emit(OR(header1_w, src_reg(header1_w), src_reg(flags1)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1319,20 +1319,20 @@ vec4_visitor::emit_psiz_and_flags(dst_reg reg)
|
|||||||
output_reg[BRW_VARYING_SLOT_NDC].file != BAD_FILE) {
|
output_reg[BRW_VARYING_SLOT_NDC].file != BAD_FILE) {
|
||||||
src_reg ndc_w = src_reg(output_reg[BRW_VARYING_SLOT_NDC]);
|
src_reg ndc_w = src_reg(output_reg[BRW_VARYING_SLOT_NDC]);
|
||||||
ndc_w.swizzle = BRW_SWIZZLE_WWWW;
|
ndc_w.swizzle = BRW_SWIZZLE_WWWW;
|
||||||
emit(CMP(dst_null_f(), ndc_w, src_reg(0.0f), BRW_CONDITIONAL_L));
|
emit(CMP(dst_null_f(), ndc_w, brw_imm_f(0.0f), BRW_CONDITIONAL_L));
|
||||||
vec4_instruction *inst;
|
vec4_instruction *inst;
|
||||||
inst = emit(OR(header1_w, src_reg(header1_w), src_reg(1u << 6)));
|
inst = emit(OR(header1_w, src_reg(header1_w), brw_imm_ud(1u << 6)));
|
||||||
inst->predicate = BRW_PREDICATE_NORMAL;
|
inst->predicate = BRW_PREDICATE_NORMAL;
|
||||||
output_reg[BRW_VARYING_SLOT_NDC].type = BRW_REGISTER_TYPE_F;
|
output_reg[BRW_VARYING_SLOT_NDC].type = BRW_REGISTER_TYPE_F;
|
||||||
inst = emit(MOV(output_reg[BRW_VARYING_SLOT_NDC], src_reg(0.0f)));
|
inst = emit(MOV(output_reg[BRW_VARYING_SLOT_NDC], brw_imm_f(0.0f)));
|
||||||
inst->predicate = BRW_PREDICATE_NORMAL;
|
inst->predicate = BRW_PREDICATE_NORMAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
emit(MOV(retype(reg, BRW_REGISTER_TYPE_UD), src_reg(header1)));
|
emit(MOV(retype(reg, BRW_REGISTER_TYPE_UD), src_reg(header1)));
|
||||||
} else if (devinfo->gen < 6) {
|
} else if (devinfo->gen < 6) {
|
||||||
emit(MOV(retype(reg, BRW_REGISTER_TYPE_UD), 0u));
|
emit(MOV(retype(reg, BRW_REGISTER_TYPE_UD), brw_imm_ud(0u)));
|
||||||
} else {
|
} else {
|
||||||
emit(MOV(retype(reg, BRW_REGISTER_TYPE_D), src_reg(0)));
|
emit(MOV(retype(reg, BRW_REGISTER_TYPE_D), brw_imm_d(0)));
|
||||||
if (prog_data->vue_map.slots_valid & VARYING_BIT_PSIZ) {
|
if (prog_data->vue_map.slots_valid & VARYING_BIT_PSIZ) {
|
||||||
dst_reg reg_w = reg;
|
dst_reg reg_w = reg;
|
||||||
reg_w.writemask = WRITEMASK_W;
|
reg_w.writemask = WRITEMASK_W;
|
||||||
@@ -1524,13 +1524,13 @@ vec4_visitor::get_scratch_offset(bblock_t *block, vec4_instruction *inst,
|
|||||||
src_reg index = src_reg(this, glsl_type::int_type);
|
src_reg index = src_reg(this, glsl_type::int_type);
|
||||||
|
|
||||||
emit_before(block, inst, ADD(dst_reg(index), *reladdr,
|
emit_before(block, inst, ADD(dst_reg(index), *reladdr,
|
||||||
src_reg(reg_offset)));
|
brw_imm_d(reg_offset)));
|
||||||
emit_before(block, inst, MUL(dst_reg(index), index,
|
emit_before(block, inst, MUL(dst_reg(index), index,
|
||||||
src_reg(message_header_scale)));
|
brw_imm_d(message_header_scale)));
|
||||||
|
|
||||||
return index;
|
return index;
|
||||||
} else {
|
} else {
|
||||||
return src_reg(reg_offset * message_header_scale);
|
return brw_imm_d(reg_offset * message_header_scale);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1542,24 +1542,24 @@ vec4_visitor::get_pull_constant_offset(bblock_t * block, vec4_instruction *inst,
|
|||||||
src_reg index = src_reg(this, glsl_type::int_type);
|
src_reg index = src_reg(this, glsl_type::int_type);
|
||||||
|
|
||||||
emit_before(block, inst, ADD(dst_reg(index), *reladdr,
|
emit_before(block, inst, ADD(dst_reg(index), *reladdr,
|
||||||
src_reg(reg_offset)));
|
brw_imm_d(reg_offset)));
|
||||||
|
|
||||||
/* Pre-gen6, the message header uses byte offsets instead of vec4
|
/* Pre-gen6, the message header uses byte offsets instead of vec4
|
||||||
* (16-byte) offset units.
|
* (16-byte) offset units.
|
||||||
*/
|
*/
|
||||||
if (devinfo->gen < 6) {
|
if (devinfo->gen < 6) {
|
||||||
emit_before(block, inst, MUL(dst_reg(index), index, src_reg(16)));
|
emit_before(block, inst, MUL(dst_reg(index), index, brw_imm_d(16)));
|
||||||
}
|
}
|
||||||
|
|
||||||
return index;
|
return index;
|
||||||
} else if (devinfo->gen >= 8) {
|
} else if (devinfo->gen >= 8) {
|
||||||
/* Store the offset in a GRF so we can send-from-GRF. */
|
/* Store the offset in a GRF so we can send-from-GRF. */
|
||||||
src_reg offset = src_reg(this, glsl_type::int_type);
|
src_reg offset = src_reg(this, glsl_type::int_type);
|
||||||
emit_before(block, inst, MOV(dst_reg(offset), src_reg(reg_offset)));
|
emit_before(block, inst, MOV(dst_reg(offset), brw_imm_d(reg_offset)));
|
||||||
return offset;
|
return offset;
|
||||||
} else {
|
} else {
|
||||||
int message_header_scale = devinfo->gen < 6 ? 16 : 1;
|
int message_header_scale = devinfo->gen < 6 ? 16 : 1;
|
||||||
return src_reg(reg_offset * message_header_scale);
|
return brw_imm_d(reg_offset * message_header_scale);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1748,7 +1748,7 @@ vec4_visitor::emit_pull_constant_load(bblock_t *block, vec4_instruction *inst,
|
|||||||
reg_offset);
|
reg_offset);
|
||||||
|
|
||||||
emit_pull_constant_load_reg(temp,
|
emit_pull_constant_load_reg(temp,
|
||||||
src_reg(index),
|
brw_imm_ud(index),
|
||||||
offset,
|
offset,
|
||||||
block, inst);
|
block, inst);
|
||||||
|
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ vec4_vs_visitor::emit_prolog()
|
|||||||
dst_reg dst = reg;
|
dst_reg dst = reg;
|
||||||
dst.type = brw_type_for_base_type(glsl_type::vec4_type);
|
dst.type = brw_type_for_base_type(glsl_type::vec4_type);
|
||||||
dst.writemask = (1 << (wa_flags & BRW_ATTRIB_WA_COMPONENT_MASK)) - 1;
|
dst.writemask = (1 << (wa_flags & BRW_ATTRIB_WA_COMPONENT_MASK)) - 1;
|
||||||
emit(MUL(dst, src_reg(dst), src_reg(1.0f / 65536.0f)));
|
emit(MUL(dst, src_reg(dst), brw_imm_f(1.0f / 65536.0f)));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Do sign recovery for 2101010 formats if required. */
|
/* Do sign recovery for 2101010 formats if required. */
|
||||||
@@ -58,8 +58,8 @@ vec4_vs_visitor::emit_prolog()
|
|||||||
if (sign_recovery_shift.file == BAD_FILE) {
|
if (sign_recovery_shift.file == BAD_FILE) {
|
||||||
/* shift constant: <22,22,22,30> */
|
/* shift constant: <22,22,22,30> */
|
||||||
sign_recovery_shift = dst_reg(this, glsl_type::uvec4_type);
|
sign_recovery_shift = dst_reg(this, glsl_type::uvec4_type);
|
||||||
emit(MOV(writemask(sign_recovery_shift, WRITEMASK_XYZ), src_reg(22u)));
|
emit(MOV(writemask(sign_recovery_shift, WRITEMASK_XYZ), brw_imm_ud(22u)));
|
||||||
emit(MOV(writemask(sign_recovery_shift, WRITEMASK_W), src_reg(30u)));
|
emit(MOV(writemask(sign_recovery_shift, WRITEMASK_W), brw_imm_ud(30u)));
|
||||||
}
|
}
|
||||||
|
|
||||||
emit(SHL(reg_ud, src_reg(reg_ud), src_reg(sign_recovery_shift)));
|
emit(SHL(reg_ud, src_reg(reg_ud), src_reg(sign_recovery_shift)));
|
||||||
@@ -87,16 +87,16 @@ vec4_vs_visitor::emit_prolog()
|
|||||||
/* mul constant: 1 / (2^(b-1) - 1) */
|
/* mul constant: 1 / (2^(b-1) - 1) */
|
||||||
es3_normalize_factor = dst_reg(this, glsl_type::vec4_type);
|
es3_normalize_factor = dst_reg(this, glsl_type::vec4_type);
|
||||||
emit(MOV(writemask(es3_normalize_factor, WRITEMASK_XYZ),
|
emit(MOV(writemask(es3_normalize_factor, WRITEMASK_XYZ),
|
||||||
src_reg(1.0f / ((1<<9) - 1))));
|
brw_imm_f(1.0f / ((1<<9) - 1))));
|
||||||
emit(MOV(writemask(es3_normalize_factor, WRITEMASK_W),
|
emit(MOV(writemask(es3_normalize_factor, WRITEMASK_W),
|
||||||
src_reg(1.0f / ((1<<1) - 1))));
|
brw_imm_f(1.0f / ((1<<1) - 1))));
|
||||||
}
|
}
|
||||||
|
|
||||||
dst_reg dst = reg;
|
dst_reg dst = reg;
|
||||||
dst.type = brw_type_for_base_type(glsl_type::vec4_type);
|
dst.type = brw_type_for_base_type(glsl_type::vec4_type);
|
||||||
emit(MOV(dst, src_reg(reg_d)));
|
emit(MOV(dst, src_reg(reg_d)));
|
||||||
emit(MUL(dst, src_reg(dst), src_reg(es3_normalize_factor)));
|
emit(MUL(dst, src_reg(dst), src_reg(es3_normalize_factor)));
|
||||||
emit_minmax(BRW_CONDITIONAL_GE, dst, src_reg(dst), src_reg(-1.0f));
|
emit_minmax(BRW_CONDITIONAL_GE, dst, src_reg(dst), brw_imm_f(-1.0f));
|
||||||
} else {
|
} else {
|
||||||
/* The following equations are from the OpenGL 3.2 specification:
|
/* The following equations are from the OpenGL 3.2 specification:
|
||||||
*
|
*
|
||||||
@@ -113,9 +113,9 @@ vec4_vs_visitor::emit_prolog()
|
|||||||
/* 1 / (2^b - 1) for b=<10,10,10,2> */
|
/* 1 / (2^b - 1) for b=<10,10,10,2> */
|
||||||
normalize_factor = dst_reg(this, glsl_type::vec4_type);
|
normalize_factor = dst_reg(this, glsl_type::vec4_type);
|
||||||
emit(MOV(writemask(normalize_factor, WRITEMASK_XYZ),
|
emit(MOV(writemask(normalize_factor, WRITEMASK_XYZ),
|
||||||
src_reg(1.0f / ((1<<10) - 1))));
|
brw_imm_f(1.0f / ((1<<10) - 1))));
|
||||||
emit(MOV(writemask(normalize_factor, WRITEMASK_W),
|
emit(MOV(writemask(normalize_factor, WRITEMASK_W),
|
||||||
src_reg(1.0f / ((1<<2) - 1))));
|
brw_imm_f(1.0f / ((1<<2) - 1))));
|
||||||
}
|
}
|
||||||
|
|
||||||
dst_reg dst = reg;
|
dst_reg dst = reg;
|
||||||
@@ -124,8 +124,8 @@ vec4_vs_visitor::emit_prolog()
|
|||||||
|
|
||||||
/* For signed normalization, we want the numerator to be 2c+1. */
|
/* For signed normalization, we want the numerator to be 2c+1. */
|
||||||
if (wa_flags & BRW_ATTRIB_WA_SIGN) {
|
if (wa_flags & BRW_ATTRIB_WA_SIGN) {
|
||||||
emit(MUL(dst, src_reg(dst), src_reg(2.0f)));
|
emit(MUL(dst, src_reg(dst), brw_imm_f(2.0f)));
|
||||||
emit(ADD(dst, src_reg(dst), src_reg(1.0f)));
|
emit(ADD(dst, src_reg(dst), brw_imm_f(1.0f)));
|
||||||
}
|
}
|
||||||
|
|
||||||
emit(MUL(dst, src_reg(dst), src_reg(normalize_factor)));
|
emit(MUL(dst, src_reg(dst), src_reg(normalize_factor)));
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ gen6_gs_visitor::emit_prolog()
|
|||||||
(prog_data->vue_map.num_slots + 1) *
|
(prog_data->vue_map.num_slots + 1) *
|
||||||
nir->info.gs.vertices_out);
|
nir->info.gs.vertices_out);
|
||||||
this->vertex_output_offset = src_reg(this, glsl_type::uint_type);
|
this->vertex_output_offset = src_reg(this, glsl_type::uint_type);
|
||||||
emit(MOV(dst_reg(this->vertex_output_offset), src_reg(0u)));
|
emit(MOV(dst_reg(this->vertex_output_offset), brw_imm_ud(0u)));
|
||||||
|
|
||||||
/* MRF 1 will be the header for all messages (FF_SYNC and URB_WRITES),
|
/* MRF 1 will be the header for all messages (FF_SYNC and URB_WRITES),
|
||||||
* so initialize it once to R0.
|
* so initialize it once to R0.
|
||||||
@@ -87,13 +87,13 @@ gen6_gs_visitor::emit_prolog()
|
|||||||
* headers.
|
* headers.
|
||||||
*/
|
*/
|
||||||
this->first_vertex = src_reg(this, glsl_type::uint_type);
|
this->first_vertex = src_reg(this, glsl_type::uint_type);
|
||||||
emit(MOV(dst_reg(this->first_vertex), URB_WRITE_PRIM_START));
|
emit(MOV(dst_reg(this->first_vertex), brw_imm_ud(URB_WRITE_PRIM_START)));
|
||||||
|
|
||||||
/* The FF_SYNC message requires to know the number of primitives generated,
|
/* The FF_SYNC message requires to know the number of primitives generated,
|
||||||
* so keep a counter for this.
|
* so keep a counter for this.
|
||||||
*/
|
*/
|
||||||
this->prim_count = src_reg(this, glsl_type::uint_type);
|
this->prim_count = src_reg(this, glsl_type::uint_type);
|
||||||
emit(MOV(dst_reg(this->prim_count), 0u));
|
emit(MOV(dst_reg(this->prim_count), brw_imm_ud(0u)));
|
||||||
|
|
||||||
if (gs_prog_data->gen6_xfb_enabled) {
|
if (gs_prog_data->gen6_xfb_enabled) {
|
||||||
/* Create a virtual register to hold destination indices in SOL */
|
/* Create a virtual register to hold destination indices in SOL */
|
||||||
@@ -170,7 +170,7 @@ gen6_gs_visitor::gs_emit_vertex(int stream_id)
|
|||||||
}
|
}
|
||||||
|
|
||||||
emit(ADD(dst_reg(this->vertex_output_offset),
|
emit(ADD(dst_reg(this->vertex_output_offset),
|
||||||
this->vertex_output_offset, 1u));
|
this->vertex_output_offset, brw_imm_ud(1u)));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Now buffer flags for this vertex */
|
/* Now buffer flags for this vertex */
|
||||||
@@ -181,9 +181,9 @@ gen6_gs_visitor::gs_emit_vertex(int stream_id)
|
|||||||
/* If we are outputting points, then every vertex has PrimStart and
|
/* If we are outputting points, then every vertex has PrimStart and
|
||||||
* PrimEnd set.
|
* PrimEnd set.
|
||||||
*/
|
*/
|
||||||
emit(MOV(dst, (_3DPRIM_POINTLIST << URB_WRITE_PRIM_TYPE_SHIFT) |
|
emit(MOV(dst, brw_imm_d((_3DPRIM_POINTLIST << URB_WRITE_PRIM_TYPE_SHIFT) |
|
||||||
URB_WRITE_PRIM_START | URB_WRITE_PRIM_END));
|
URB_WRITE_PRIM_START | URB_WRITE_PRIM_END)));
|
||||||
emit(ADD(dst_reg(this->prim_count), this->prim_count, 1u));
|
emit(ADD(dst_reg(this->prim_count), this->prim_count, brw_imm_ud(1u)));
|
||||||
} else {
|
} else {
|
||||||
/* Otherwise, we can only set the PrimStart flag, which we have stored
|
/* Otherwise, we can only set the PrimStart flag, which we have stored
|
||||||
* in the first_vertex register. We will have to wait until we execute
|
* in the first_vertex register. We will have to wait until we execute
|
||||||
@@ -191,11 +191,12 @@ gen6_gs_visitor::gs_emit_vertex(int stream_id)
|
|||||||
* vertex.
|
* vertex.
|
||||||
*/
|
*/
|
||||||
emit(OR(dst, this->first_vertex,
|
emit(OR(dst, this->first_vertex,
|
||||||
(gs_prog_data->output_topology << URB_WRITE_PRIM_TYPE_SHIFT)));
|
brw_imm_ud(gs_prog_data->output_topology <<
|
||||||
emit(MOV(dst_reg(this->first_vertex), 0u));
|
URB_WRITE_PRIM_TYPE_SHIFT)));
|
||||||
|
emit(MOV(dst_reg(this->first_vertex), brw_imm_ud(0u)));
|
||||||
}
|
}
|
||||||
emit(ADD(dst_reg(this->vertex_output_offset),
|
emit(ADD(dst_reg(this->vertex_output_offset),
|
||||||
this->vertex_output_offset, 1u));
|
this->vertex_output_offset, brw_imm_ud(1u)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -218,10 +219,10 @@ gen6_gs_visitor::gs_end_primitive()
|
|||||||
* below).
|
* below).
|
||||||
*/
|
*/
|
||||||
unsigned num_output_vertices = nir->info.gs.vertices_out;
|
unsigned num_output_vertices = nir->info.gs.vertices_out;
|
||||||
emit(CMP(dst_null_d(), this->vertex_count, src_reg(num_output_vertices + 1),
|
emit(CMP(dst_null_ud(), this->vertex_count,
|
||||||
BRW_CONDITIONAL_L));
|
brw_imm_ud(num_output_vertices + 1), BRW_CONDITIONAL_L));
|
||||||
vec4_instruction *inst = emit(CMP(dst_null_d(),
|
vec4_instruction *inst = emit(CMP(dst_null_ud(),
|
||||||
this->vertex_count, 0u,
|
this->vertex_count, brw_imm_ud(0u),
|
||||||
BRW_CONDITIONAL_NEQ));
|
BRW_CONDITIONAL_NEQ));
|
||||||
inst->predicate = BRW_PREDICATE_NORMAL;
|
inst->predicate = BRW_PREDICATE_NORMAL;
|
||||||
emit(IF(BRW_PREDICATE_NORMAL));
|
emit(IF(BRW_PREDICATE_NORMAL));
|
||||||
@@ -231,19 +232,19 @@ gen6_gs_visitor::gs_end_primitive()
|
|||||||
* vertex.
|
* vertex.
|
||||||
*/
|
*/
|
||||||
src_reg offset(this, glsl_type::uint_type);
|
src_reg offset(this, glsl_type::uint_type);
|
||||||
emit(ADD(dst_reg(offset), this->vertex_output_offset, src_reg(-1)));
|
emit(ADD(dst_reg(offset), this->vertex_output_offset, brw_imm_d(-1)));
|
||||||
|
|
||||||
src_reg dst(this->vertex_output);
|
src_reg dst(this->vertex_output);
|
||||||
dst.reladdr = ralloc(mem_ctx, src_reg);
|
dst.reladdr = ralloc(mem_ctx, src_reg);
|
||||||
memcpy(dst.reladdr, &offset, sizeof(src_reg));
|
memcpy(dst.reladdr, &offset, sizeof(src_reg));
|
||||||
|
|
||||||
emit(OR(dst_reg(dst), dst, URB_WRITE_PRIM_END));
|
emit(OR(dst_reg(dst), dst, brw_imm_d(URB_WRITE_PRIM_END)));
|
||||||
emit(ADD(dst_reg(this->prim_count), this->prim_count, 1u));
|
emit(ADD(dst_reg(this->prim_count), this->prim_count, brw_imm_ud(1u)));
|
||||||
|
|
||||||
/* Set the first vertex flag to indicate that the next vertex will start
|
/* Set the first vertex flag to indicate that the next vertex will start
|
||||||
* a primitive.
|
* a primitive.
|
||||||
*/
|
*/
|
||||||
emit(MOV(dst_reg(this->first_vertex), URB_WRITE_PRIM_START));
|
emit(MOV(dst_reg(this->first_vertex), brw_imm_d(URB_WRITE_PRIM_START)));
|
||||||
}
|
}
|
||||||
emit(BRW_OPCODE_ENDIF);
|
emit(BRW_OPCODE_ENDIF);
|
||||||
}
|
}
|
||||||
@@ -262,7 +263,8 @@ gen6_gs_visitor::emit_urb_write_header(int mrf)
|
|||||||
*/
|
*/
|
||||||
src_reg flags_offset(this, glsl_type::uint_type);
|
src_reg flags_offset(this, glsl_type::uint_type);
|
||||||
emit(ADD(dst_reg(flags_offset),
|
emit(ADD(dst_reg(flags_offset),
|
||||||
this->vertex_output_offset, src_reg(prog_data->vue_map.num_slots)));
|
this->vertex_output_offset,
|
||||||
|
brw_imm_d(prog_data->vue_map.num_slots)));
|
||||||
|
|
||||||
src_reg flags_data(this->vertex_output);
|
src_reg flags_data(this->vertex_output);
|
||||||
flags_data.reladdr = ralloc(mem_ctx, src_reg);
|
flags_data.reladdr = ralloc(mem_ctx, src_reg);
|
||||||
@@ -321,7 +323,7 @@ gen6_gs_visitor::emit_thread_end()
|
|||||||
* points because in the point case we set PrimEnd on all vertices.
|
* points because in the point case we set PrimEnd on all vertices.
|
||||||
*/
|
*/
|
||||||
if (nir->info.gs.output_primitive != GL_POINTS) {
|
if (nir->info.gs.output_primitive != GL_POINTS) {
|
||||||
emit(CMP(dst_null_d(), this->first_vertex, 0u, BRW_CONDITIONAL_Z));
|
emit(CMP(dst_null_ud(), this->first_vertex, brw_imm_ud(0u), BRW_CONDITIONAL_Z));
|
||||||
emit(IF(BRW_PREDICATE_NORMAL));
|
emit(IF(BRW_PREDICATE_NORMAL));
|
||||||
gs_end_primitive();
|
gs_end_primitive();
|
||||||
emit(BRW_OPCODE_ENDIF);
|
emit(BRW_OPCODE_ENDIF);
|
||||||
@@ -347,7 +349,7 @@ gen6_gs_visitor::emit_thread_end()
|
|||||||
int max_usable_mrf = FIRST_SPILL_MRF(devinfo->gen);
|
int max_usable_mrf = FIRST_SPILL_MRF(devinfo->gen);
|
||||||
|
|
||||||
/* Issue the FF_SYNC message and obtain the initial VUE handle. */
|
/* Issue the FF_SYNC message and obtain the initial VUE handle. */
|
||||||
emit(CMP(dst_null_d(), this->vertex_count, 0u, BRW_CONDITIONAL_G));
|
emit(CMP(dst_null_ud(), this->vertex_count, brw_imm_ud(0u), BRW_CONDITIONAL_G));
|
||||||
emit(IF(BRW_PREDICATE_NORMAL));
|
emit(IF(BRW_PREDICATE_NORMAL));
|
||||||
{
|
{
|
||||||
this->current_annotation = "gen6 thread end: ff_sync";
|
this->current_annotation = "gen6 thread end: ff_sync";
|
||||||
@@ -364,15 +366,15 @@ gen6_gs_visitor::emit_thread_end()
|
|||||||
dst_reg(this->temp), this->prim_count, this->svbi);
|
dst_reg(this->temp), this->prim_count, this->svbi);
|
||||||
} else {
|
} else {
|
||||||
inst = emit(GS_OPCODE_FF_SYNC,
|
inst = emit(GS_OPCODE_FF_SYNC,
|
||||||
dst_reg(this->temp), this->prim_count, src_reg(0u));
|
dst_reg(this->temp), this->prim_count, brw_imm_ud(0u));
|
||||||
}
|
}
|
||||||
inst->base_mrf = base_mrf;
|
inst->base_mrf = base_mrf;
|
||||||
|
|
||||||
/* Loop over all buffered vertices and emit URB write messages */
|
/* Loop over all buffered vertices and emit URB write messages */
|
||||||
this->current_annotation = "gen6 thread end: urb writes init";
|
this->current_annotation = "gen6 thread end: urb writes init";
|
||||||
src_reg vertex(this, glsl_type::uint_type);
|
src_reg vertex(this, glsl_type::uint_type);
|
||||||
emit(MOV(dst_reg(vertex), 0u));
|
emit(MOV(dst_reg(vertex), brw_imm_ud(0u)));
|
||||||
emit(MOV(dst_reg(this->vertex_output_offset), 0u));
|
emit(MOV(dst_reg(this->vertex_output_offset), brw_imm_ud(0u)));
|
||||||
|
|
||||||
this->current_annotation = "gen6 thread end: urb writes";
|
this->current_annotation = "gen6 thread end: urb writes";
|
||||||
emit(BRW_OPCODE_DO);
|
emit(BRW_OPCODE_DO);
|
||||||
@@ -416,7 +418,7 @@ gen6_gs_visitor::emit_thread_end()
|
|||||||
|
|
||||||
mrf++;
|
mrf++;
|
||||||
emit(ADD(dst_reg(this->vertex_output_offset),
|
emit(ADD(dst_reg(this->vertex_output_offset),
|
||||||
this->vertex_output_offset, 1u));
|
this->vertex_output_offset, brw_imm_ud(1u)));
|
||||||
|
|
||||||
/* If this was max_usable_mrf, we can't fit anything more into
|
/* If this was max_usable_mrf, we can't fit anything more into
|
||||||
* this URB WRITE. Same if we reached the max. message length.
|
* this URB WRITE. Same if we reached the max. message length.
|
||||||
@@ -437,9 +439,9 @@ gen6_gs_visitor::emit_thread_end()
|
|||||||
* writing the next vertex.
|
* writing the next vertex.
|
||||||
*/
|
*/
|
||||||
emit(ADD(dst_reg(this->vertex_output_offset),
|
emit(ADD(dst_reg(this->vertex_output_offset),
|
||||||
this->vertex_output_offset, 1u));
|
this->vertex_output_offset, brw_imm_ud(1u)));
|
||||||
|
|
||||||
emit(ADD(dst_reg(vertex), vertex, 1u));
|
emit(ADD(dst_reg(vertex), vertex, brw_imm_ud(1u)));
|
||||||
}
|
}
|
||||||
emit(BRW_OPCODE_WHILE);
|
emit(BRW_OPCODE_WHILE);
|
||||||
|
|
||||||
@@ -468,8 +470,8 @@ gen6_gs_visitor::emit_thread_end()
|
|||||||
if (gs_prog_data->gen6_xfb_enabled) {
|
if (gs_prog_data->gen6_xfb_enabled) {
|
||||||
/* When emitting EOT, set SONumPrimsWritten Increment Value. */
|
/* When emitting EOT, set SONumPrimsWritten Increment Value. */
|
||||||
src_reg data(this, glsl_type::uint_type);
|
src_reg data(this, glsl_type::uint_type);
|
||||||
emit(AND(dst_reg(data), this->sol_prim_written, src_reg(0xffffu)));
|
emit(AND(dst_reg(data), this->sol_prim_written, brw_imm_ud(0xffffu)));
|
||||||
emit(SHL(dst_reg(data), data, src_reg(16u)));
|
emit(SHL(dst_reg(data), data, brw_imm_ud(16u)));
|
||||||
emit(GS_OPCODE_SET_DWORD_2, dst_reg(MRF, base_mrf), data);
|
emit(GS_OPCODE_SET_DWORD_2, dst_reg(MRF, base_mrf), data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -588,8 +590,8 @@ gen6_gs_visitor::xfb_write()
|
|||||||
|
|
||||||
this->current_annotation = "gen6 thread end: svb writes init";
|
this->current_annotation = "gen6 thread end: svb writes init";
|
||||||
|
|
||||||
emit(MOV(dst_reg(this->vertex_output_offset), 0u));
|
emit(MOV(dst_reg(this->vertex_output_offset), brw_imm_ud(0u)));
|
||||||
emit(MOV(dst_reg(this->sol_prim_written), 0u));
|
emit(MOV(dst_reg(this->sol_prim_written), brw_imm_ud(0u)));
|
||||||
|
|
||||||
/* Check that at least one primitive can be written
|
/* Check that at least one primitive can be written
|
||||||
*
|
*
|
||||||
@@ -600,7 +602,7 @@ gen6_gs_visitor::xfb_write()
|
|||||||
* transform feedback is in interleaved or separate attribs mode.
|
* transform feedback is in interleaved or separate attribs mode.
|
||||||
*/
|
*/
|
||||||
src_reg sol_temp(this, glsl_type::uvec4_type);
|
src_reg sol_temp(this, glsl_type::uvec4_type);
|
||||||
emit(ADD(dst_reg(sol_temp), this->svbi, src_reg(num_verts)));
|
emit(ADD(dst_reg(sol_temp), this->svbi, brw_imm_ud(num_verts)));
|
||||||
|
|
||||||
/* Compare SVBI calculated number with the maximum value, which is
|
/* Compare SVBI calculated number with the maximum value, which is
|
||||||
* in R1.4 (previously saved in this->max_svbi) for gen6.
|
* in R1.4 (previously saved in this->max_svbi) for gen6.
|
||||||
@@ -623,7 +625,7 @@ gen6_gs_visitor::xfb_write()
|
|||||||
|
|
||||||
/* Write transform feedback data for all processed vertices. */
|
/* Write transform feedback data for all processed vertices. */
|
||||||
for (int i = 0; i < (int)nir->info.gs.vertices_out; i++) {
|
for (int i = 0; i < (int)nir->info.gs.vertices_out; i++) {
|
||||||
emit(MOV(dst_reg(sol_temp), i));
|
emit(MOV(dst_reg(sol_temp), brw_imm_d(i)));
|
||||||
emit(CMP(dst_null_d(), sol_temp, this->vertex_count,
|
emit(CMP(dst_null_d(), sol_temp, this->vertex_count,
|
||||||
BRW_CONDITIONAL_L));
|
BRW_CONDITIONAL_L));
|
||||||
emit(IF(BRW_PREDICATE_NORMAL));
|
emit(IF(BRW_PREDICATE_NORMAL));
|
||||||
@@ -644,8 +646,8 @@ gen6_gs_visitor::xfb_program(unsigned vertex, unsigned num_verts)
|
|||||||
/* Check for buffer overflow: we need room to write the complete primitive
|
/* Check for buffer overflow: we need room to write the complete primitive
|
||||||
* (all vertices). Otherwise, avoid writing any vertices for it
|
* (all vertices). Otherwise, avoid writing any vertices for it
|
||||||
*/
|
*/
|
||||||
emit(ADD(dst_reg(sol_temp), this->sol_prim_written, 1u));
|
emit(ADD(dst_reg(sol_temp), this->sol_prim_written, brw_imm_ud(1u)));
|
||||||
emit(MUL(dst_reg(sol_temp), sol_temp, src_reg(num_verts)));
|
emit(MUL(dst_reg(sol_temp), sol_temp, brw_imm_ud(num_verts)));
|
||||||
emit(ADD(dst_reg(sol_temp), sol_temp, this->svbi));
|
emit(ADD(dst_reg(sol_temp), sol_temp, this->svbi));
|
||||||
emit(CMP(dst_null_d(), sol_temp, this->max_svbi, BRW_CONDITIONAL_LE));
|
emit(CMP(dst_null_d(), sol_temp, this->max_svbi, BRW_CONDITIONAL_LE));
|
||||||
emit(IF(BRW_PREDICATE_NORMAL));
|
emit(IF(BRW_PREDICATE_NORMAL));
|
||||||
@@ -683,7 +685,7 @@ gen6_gs_visitor::xfb_program(unsigned vertex, unsigned num_verts)
|
|||||||
src_reg data(this->vertex_output);
|
src_reg data(this->vertex_output);
|
||||||
data.reladdr = ralloc(mem_ctx, src_reg);
|
data.reladdr = ralloc(mem_ctx, src_reg);
|
||||||
int offset = get_vertex_output_offset_for_varying(vertex, varying);
|
int offset = get_vertex_output_offset_for_varying(vertex, varying);
|
||||||
emit(MOV(dst_reg(this->vertex_output_offset), offset));
|
emit(MOV(dst_reg(this->vertex_output_offset), brw_imm_d(offset)));
|
||||||
memcpy(data.reladdr, &this->vertex_output_offset, sizeof(src_reg));
|
memcpy(data.reladdr, &this->vertex_output_offset, sizeof(src_reg));
|
||||||
data.type = output_reg[varying].type;
|
data.type = output_reg[varying].type;
|
||||||
|
|
||||||
@@ -710,9 +712,9 @@ gen6_gs_visitor::xfb_program(unsigned vertex, unsigned num_verts)
|
|||||||
*/
|
*/
|
||||||
emit(ADD(dst_reg(this->destination_indices),
|
emit(ADD(dst_reg(this->destination_indices),
|
||||||
this->destination_indices,
|
this->destination_indices,
|
||||||
src_reg(num_verts)));
|
brw_imm_ud(num_verts)));
|
||||||
emit(ADD(dst_reg(this->sol_prim_written),
|
emit(ADD(dst_reg(this->sol_prim_written),
|
||||||
this->sol_prim_written, 1u));
|
this->sol_prim_written, brw_imm_ud(1u)));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -145,7 +145,7 @@ TEST_F(cmod_propagation_test, basic)
|
|||||||
dst_reg dest = dst_reg(v, glsl_type::float_type);
|
dst_reg dest = dst_reg(v, glsl_type::float_type);
|
||||||
src_reg src0 = src_reg(v, glsl_type::float_type);
|
src_reg src0 = src_reg(v, glsl_type::float_type);
|
||||||
src_reg src1 = src_reg(v, glsl_type::float_type);
|
src_reg src1 = src_reg(v, glsl_type::float_type);
|
||||||
src_reg zero(0.0f);
|
src_reg zero(brw_imm_f(0.0f));
|
||||||
dst_reg dest_null = bld.null_reg_f();
|
dst_reg dest_null = bld.null_reg_f();
|
||||||
dest_null.writemask = WRITEMASK_X;
|
dest_null.writemask = WRITEMASK_X;
|
||||||
|
|
||||||
@@ -181,7 +181,7 @@ TEST_F(cmod_propagation_test, basic_different_dst_writemask)
|
|||||||
dst_reg dest = dst_reg(v, glsl_type::float_type);
|
dst_reg dest = dst_reg(v, glsl_type::float_type);
|
||||||
src_reg src0 = src_reg(v, glsl_type::float_type);
|
src_reg src0 = src_reg(v, glsl_type::float_type);
|
||||||
src_reg src1 = src_reg(v, glsl_type::float_type);
|
src_reg src1 = src_reg(v, glsl_type::float_type);
|
||||||
src_reg zero(0.0f);
|
src_reg zero(brw_imm_f(0.0f));
|
||||||
dst_reg dest_null = bld.null_reg_f();
|
dst_reg dest_null = bld.null_reg_f();
|
||||||
|
|
||||||
bld.ADD(dest, src0, src1);
|
bld.ADD(dest, src0, src1);
|
||||||
@@ -217,8 +217,8 @@ TEST_F(cmod_propagation_test, andz_one)
|
|||||||
const vec4_builder bld = vec4_builder(v).at_end();
|
const vec4_builder bld = vec4_builder(v).at_end();
|
||||||
dst_reg dest = dst_reg(v, glsl_type::int_type);
|
dst_reg dest = dst_reg(v, glsl_type::int_type);
|
||||||
src_reg src0 = src_reg(v, glsl_type::float_type);
|
src_reg src0 = src_reg(v, glsl_type::float_type);
|
||||||
src_reg zero(0.0f);
|
src_reg zero(brw_imm_f(0.0f));
|
||||||
src_reg one(1);
|
src_reg one(brw_imm_d(1));
|
||||||
|
|
||||||
bld.CMP(retype(dest, BRW_REGISTER_TYPE_F), src0, zero, BRW_CONDITIONAL_L);
|
bld.CMP(retype(dest, BRW_REGISTER_TYPE_F), src0, zero, BRW_CONDITIONAL_L);
|
||||||
set_condmod(BRW_CONDITIONAL_Z,
|
set_condmod(BRW_CONDITIONAL_Z,
|
||||||
@@ -253,7 +253,7 @@ TEST_F(cmod_propagation_test, non_cmod_instruction)
|
|||||||
const vec4_builder bld = vec4_builder(v).at_end();
|
const vec4_builder bld = vec4_builder(v).at_end();
|
||||||
dst_reg dest = dst_reg(v, glsl_type::uint_type);
|
dst_reg dest = dst_reg(v, glsl_type::uint_type);
|
||||||
src_reg src0 = src_reg(v, glsl_type::uint_type);
|
src_reg src0 = src_reg(v, glsl_type::uint_type);
|
||||||
src_reg zero(0u);
|
src_reg zero(brw_imm_ud(0u));
|
||||||
bld.FBL(dest, src0);
|
bld.FBL(dest, src0);
|
||||||
bld.CMP(bld.null_reg_ud(), src_reg(dest), zero, BRW_CONDITIONAL_GE);
|
bld.CMP(bld.null_reg_ud(), src_reg(dest), zero, BRW_CONDITIONAL_GE);
|
||||||
|
|
||||||
@@ -288,7 +288,7 @@ TEST_F(cmod_propagation_test, intervening_flag_write)
|
|||||||
src_reg src0 = src_reg(v, glsl_type::float_type);
|
src_reg src0 = src_reg(v, glsl_type::float_type);
|
||||||
src_reg src1 = src_reg(v, glsl_type::float_type);
|
src_reg src1 = src_reg(v, glsl_type::float_type);
|
||||||
src_reg src2 = src_reg(v, glsl_type::float_type);
|
src_reg src2 = src_reg(v, glsl_type::float_type);
|
||||||
src_reg zero(0.0f);
|
src_reg zero(brw_imm_f(0.0f));
|
||||||
bld.ADD(dest, src0, src1);
|
bld.ADD(dest, src0, src1);
|
||||||
bld.CMP(bld.null_reg_f(), src2, zero, BRW_CONDITIONAL_GE);
|
bld.CMP(bld.null_reg_f(), src2, zero, BRW_CONDITIONAL_GE);
|
||||||
bld.CMP(bld.null_reg_f(), src_reg(dest), zero, BRW_CONDITIONAL_GE);
|
bld.CMP(bld.null_reg_f(), src_reg(dest), zero, BRW_CONDITIONAL_GE);
|
||||||
@@ -328,7 +328,7 @@ TEST_F(cmod_propagation_test, intervening_flag_read)
|
|||||||
src_reg src0 = src_reg(v, glsl_type::float_type);
|
src_reg src0 = src_reg(v, glsl_type::float_type);
|
||||||
src_reg src1 = src_reg(v, glsl_type::float_type);
|
src_reg src1 = src_reg(v, glsl_type::float_type);
|
||||||
src_reg src2 = src_reg(v, glsl_type::float_type);
|
src_reg src2 = src_reg(v, glsl_type::float_type);
|
||||||
src_reg zero(0.0f);
|
src_reg zero(brw_imm_f(0.0f));
|
||||||
bld.ADD(dest0, src0, src1);
|
bld.ADD(dest0, src0, src1);
|
||||||
set_predicate(BRW_PREDICATE_NORMAL, bld.SEL(dest1, src2, zero));
|
set_predicate(BRW_PREDICATE_NORMAL, bld.SEL(dest1, src2, zero));
|
||||||
bld.CMP(bld.null_reg_f(), src_reg(dest0), zero, BRW_CONDITIONAL_GE);
|
bld.CMP(bld.null_reg_f(), src_reg(dest0), zero, BRW_CONDITIONAL_GE);
|
||||||
@@ -367,7 +367,7 @@ TEST_F(cmod_propagation_test, intervening_dest_write)
|
|||||||
src_reg src0 = src_reg(v, glsl_type::float_type);
|
src_reg src0 = src_reg(v, glsl_type::float_type);
|
||||||
src_reg src1 = src_reg(v, glsl_type::float_type);
|
src_reg src1 = src_reg(v, glsl_type::float_type);
|
||||||
src_reg src2 = src_reg(v, glsl_type::vec2_type);
|
src_reg src2 = src_reg(v, glsl_type::vec2_type);
|
||||||
src_reg zero(0.0f);
|
src_reg zero(brw_imm_f(0.0f));
|
||||||
bld.ADD(offset(dest, 2), src0, src1);
|
bld.ADD(offset(dest, 2), src0, src1);
|
||||||
bld.emit(SHADER_OPCODE_TEX, dest, src2)
|
bld.emit(SHADER_OPCODE_TEX, dest, src2)
|
||||||
->regs_written = 4;
|
->regs_written = 4;
|
||||||
@@ -409,7 +409,7 @@ TEST_F(cmod_propagation_test, intervening_flag_read_same_value)
|
|||||||
src_reg src0 = src_reg(v, glsl_type::float_type);
|
src_reg src0 = src_reg(v, glsl_type::float_type);
|
||||||
src_reg src1 = src_reg(v, glsl_type::float_type);
|
src_reg src1 = src_reg(v, glsl_type::float_type);
|
||||||
src_reg src2 = src_reg(v, glsl_type::float_type);
|
src_reg src2 = src_reg(v, glsl_type::float_type);
|
||||||
src_reg zero(0.0f);
|
src_reg zero(brw_imm_f(0.0f));
|
||||||
dst_reg dest_null = bld.null_reg_f();
|
dst_reg dest_null = bld.null_reg_f();
|
||||||
dest_null.writemask = WRITEMASK_X;
|
dest_null.writemask = WRITEMASK_X;
|
||||||
|
|
||||||
@@ -449,7 +449,7 @@ TEST_F(cmod_propagation_test, negate)
|
|||||||
dst_reg dest = dst_reg(v, glsl_type::float_type);
|
dst_reg dest = dst_reg(v, glsl_type::float_type);
|
||||||
src_reg src0 = src_reg(v, glsl_type::float_type);
|
src_reg src0 = src_reg(v, glsl_type::float_type);
|
||||||
src_reg src1 = src_reg(v, glsl_type::float_type);
|
src_reg src1 = src_reg(v, glsl_type::float_type);
|
||||||
src_reg zero(0.0f);
|
src_reg zero(brw_imm_f(0.0f));
|
||||||
bld.ADD(dest, src0, src1);
|
bld.ADD(dest, src0, src1);
|
||||||
src_reg tmp_src = src_reg(dest);
|
src_reg tmp_src = src_reg(dest);
|
||||||
tmp_src.negate = true;
|
tmp_src.negate = true;
|
||||||
@@ -521,7 +521,7 @@ TEST_F(cmod_propagation_test, different_types_cmod_with_zero)
|
|||||||
dst_reg dest = dst_reg(v, glsl_type::int_type);
|
dst_reg dest = dst_reg(v, glsl_type::int_type);
|
||||||
src_reg src0 = src_reg(v, glsl_type::int_type);
|
src_reg src0 = src_reg(v, glsl_type::int_type);
|
||||||
src_reg src1 = src_reg(v, glsl_type::int_type);
|
src_reg src1 = src_reg(v, glsl_type::int_type);
|
||||||
src_reg zero(0.0f);
|
src_reg zero(brw_imm_f(0.0f));
|
||||||
bld.ADD(dest, src0, src1);
|
bld.ADD(dest, src0, src1);
|
||||||
bld.CMP(bld.null_reg_f(), retype(src_reg(dest), BRW_REGISTER_TYPE_F), zero,
|
bld.CMP(bld.null_reg_f(), retype(src_reg(dest), BRW_REGISTER_TYPE_F), zero,
|
||||||
BRW_CONDITIONAL_GE);
|
BRW_CONDITIONAL_GE);
|
||||||
@@ -555,8 +555,8 @@ TEST_F(cmod_propagation_test, andnz_non_one)
|
|||||||
const vec4_builder bld = vec4_builder(v).at_end();
|
const vec4_builder bld = vec4_builder(v).at_end();
|
||||||
dst_reg dest = dst_reg(v, glsl_type::int_type);
|
dst_reg dest = dst_reg(v, glsl_type::int_type);
|
||||||
src_reg src0 = src_reg(v, glsl_type::float_type);
|
src_reg src0 = src_reg(v, glsl_type::float_type);
|
||||||
src_reg zero(0.0f);
|
src_reg zero(brw_imm_f(0.0f));
|
||||||
src_reg nonone(38);
|
src_reg nonone(brw_imm_d(38));
|
||||||
|
|
||||||
bld.CMP(retype(dest, BRW_REGISTER_TYPE_F), src0, zero, BRW_CONDITIONAL_L);
|
bld.CMP(retype(dest, BRW_REGISTER_TYPE_F), src0, zero, BRW_CONDITIONAL_L);
|
||||||
set_condmod(BRW_CONDITIONAL_NZ,
|
set_condmod(BRW_CONDITIONAL_NZ,
|
||||||
@@ -594,7 +594,7 @@ TEST_F(cmod_propagation_test, basic_vec4)
|
|||||||
dst_reg dest = dst_reg(v, glsl_type::vec4_type);
|
dst_reg dest = dst_reg(v, glsl_type::vec4_type);
|
||||||
src_reg src0 = src_reg(v, glsl_type::vec4_type);
|
src_reg src0 = src_reg(v, glsl_type::vec4_type);
|
||||||
src_reg src1 = src_reg(v, glsl_type::vec4_type);
|
src_reg src1 = src_reg(v, glsl_type::vec4_type);
|
||||||
src_reg zero(0.0f);
|
src_reg zero(brw_imm_f(0.0f));
|
||||||
|
|
||||||
bld.MUL(dest, src0, src1);
|
bld.MUL(dest, src0, src1);
|
||||||
bld.CMP(bld.null_reg_f(), src_reg(dest), zero, BRW_CONDITIONAL_NZ);
|
bld.CMP(bld.null_reg_f(), src_reg(dest), zero, BRW_CONDITIONAL_NZ);
|
||||||
@@ -628,7 +628,7 @@ TEST_F(cmod_propagation_test, basic_vec4_different_dst_writemask)
|
|||||||
dest.writemask = WRITEMASK_X;
|
dest.writemask = WRITEMASK_X;
|
||||||
src_reg src0 = src_reg(v, glsl_type::vec4_type);
|
src_reg src0 = src_reg(v, glsl_type::vec4_type);
|
||||||
src_reg src1 = src_reg(v, glsl_type::vec4_type);
|
src_reg src1 = src_reg(v, glsl_type::vec4_type);
|
||||||
src_reg zero(0.0f);
|
src_reg zero(brw_imm_f(0.0f));
|
||||||
dst_reg dest_null = bld.null_reg_f();
|
dst_reg dest_null = bld.null_reg_f();
|
||||||
|
|
||||||
bld.MUL(dest, src0, src1);
|
bld.MUL(dest, src0, src1);
|
||||||
@@ -668,7 +668,7 @@ TEST_F(cmod_propagation_test, mad_one_component_vec4)
|
|||||||
src_reg src2 = src_reg(v, glsl_type::vec4_type);
|
src_reg src2 = src_reg(v, glsl_type::vec4_type);
|
||||||
src0.swizzle = src1.swizzle = src2.swizzle = BRW_SWIZZLE_XXXX;
|
src0.swizzle = src1.swizzle = src2.swizzle = BRW_SWIZZLE_XXXX;
|
||||||
src2.negate = true;
|
src2.negate = true;
|
||||||
src_reg zero(0.0f);
|
src_reg zero(brw_imm_f(0.0f));
|
||||||
src_reg tmp(dest);
|
src_reg tmp(dest);
|
||||||
tmp.swizzle = BRW_SWIZZLE_XXXX;
|
tmp.swizzle = BRW_SWIZZLE_XXXX;
|
||||||
dst_reg dest_null = bld.null_reg_f();
|
dst_reg dest_null = bld.null_reg_f();
|
||||||
@@ -710,7 +710,7 @@ TEST_F(cmod_propagation_test, mad_more_one_component_vec4)
|
|||||||
src_reg src2 = src_reg(v, glsl_type::vec4_type);
|
src_reg src2 = src_reg(v, glsl_type::vec4_type);
|
||||||
src0.swizzle = src1.swizzle = src2.swizzle = BRW_SWIZZLE_XXXX;
|
src0.swizzle = src1.swizzle = src2.swizzle = BRW_SWIZZLE_XXXX;
|
||||||
src2.negate = true;
|
src2.negate = true;
|
||||||
src_reg zero(0.0f);
|
src_reg zero(brw_imm_f(0.0f));
|
||||||
src_reg tmp(dest);
|
src_reg tmp(dest);
|
||||||
tmp.swizzle = BRW_SWIZZLE_XXXX;
|
tmp.swizzle = BRW_SWIZZLE_XXXX;
|
||||||
dst_reg dest_null = bld.null_reg_f();
|
dst_reg dest_null = bld.null_reg_f();
|
||||||
@@ -751,7 +751,7 @@ TEST_F(cmod_propagation_test, cmp_mov_vec4)
|
|||||||
src_reg src0 = src_reg(v, glsl_type::ivec4_type);
|
src_reg src0 = src_reg(v, glsl_type::ivec4_type);
|
||||||
src0.swizzle = BRW_SWIZZLE_XXXX;
|
src0.swizzle = BRW_SWIZZLE_XXXX;
|
||||||
src0.file = UNIFORM;
|
src0.file = UNIFORM;
|
||||||
src_reg nonone = retype(src_reg(16), BRW_REGISTER_TYPE_D);
|
src_reg nonone = retype(brw_imm_d(16), BRW_REGISTER_TYPE_D);
|
||||||
src_reg mov_src = src_reg(dest);
|
src_reg mov_src = src_reg(dest);
|
||||||
mov_src.swizzle = BRW_SWIZZLE_XXXX;
|
mov_src.swizzle = BRW_SWIZZLE_XXXX;
|
||||||
dst_reg dest_null = bld.null_reg_d();
|
dst_reg dest_null = bld.null_reg_d();
|
||||||
@@ -790,7 +790,7 @@ TEST_F(cmod_propagation_test, mul_cmp_different_channels_vec4)
|
|||||||
dst_reg dest = dst_reg(v, glsl_type::vec4_type);
|
dst_reg dest = dst_reg(v, glsl_type::vec4_type);
|
||||||
src_reg src0 = src_reg(v, glsl_type::vec4_type);
|
src_reg src0 = src_reg(v, glsl_type::vec4_type);
|
||||||
src_reg src1 = src_reg(v, glsl_type::vec4_type);
|
src_reg src1 = src_reg(v, glsl_type::vec4_type);
|
||||||
src_reg zero(0.0f);
|
src_reg zero(brw_imm_f(0.0f));
|
||||||
src_reg cmp_src = src_reg(dest);
|
src_reg cmp_src = src_reg(dest);
|
||||||
cmp_src.swizzle = BRW_SWIZZLE4(0,1,3,2);
|
cmp_src.swizzle = BRW_SWIZZLE4(0,1,3,2);
|
||||||
|
|
||||||
|
|||||||
@@ -162,7 +162,7 @@ TEST_F(copy_propagation_test, test_swizzle_writemask)
|
|||||||
SWIZZLE_X,
|
SWIZZLE_X,
|
||||||
SWIZZLE_Z))));
|
SWIZZLE_Z))));
|
||||||
|
|
||||||
v->emit(v->MOV(writemask(a, WRITEMASK_XYZ), src_reg(1.0f)));
|
v->emit(v->MOV(writemask(a, WRITEMASK_XYZ), brw_imm_f(1.0f)));
|
||||||
|
|
||||||
vec4_instruction *test_mov =
|
vec4_instruction *test_mov =
|
||||||
v->MOV(c, swizzle(src_reg(b), BRW_SWIZZLE4(SWIZZLE_W,
|
v->MOV(c, swizzle(src_reg(b), BRW_SWIZZLE4(SWIZZLE_W,
|
||||||
|
|||||||
@@ -135,7 +135,7 @@ TEST_F(register_coalesce_test, test_compute_to_mrf)
|
|||||||
m0.writemask = WRITEMASK_X;
|
m0.writemask = WRITEMASK_X;
|
||||||
m0.type = BRW_REGISTER_TYPE_F;
|
m0.type = BRW_REGISTER_TYPE_F;
|
||||||
|
|
||||||
vec4_instruction *mul = v->emit(v->MUL(temp, something, src_reg(1.0f)));
|
vec4_instruction *mul = v->emit(v->MUL(temp, something, brw_imm_f(1.0f)));
|
||||||
v->emit(v->MOV(m0, src_reg(temp)));
|
v->emit(v->MOV(m0, src_reg(temp)));
|
||||||
|
|
||||||
register_coalesce(v);
|
register_coalesce(v);
|
||||||
@@ -159,7 +159,7 @@ TEST_F(register_coalesce_test, test_multiple_use)
|
|||||||
m1.type = BRW_REGISTER_TYPE_F;
|
m1.type = BRW_REGISTER_TYPE_F;
|
||||||
|
|
||||||
src_reg src = src_reg(temp);
|
src_reg src = src_reg(temp);
|
||||||
vec4_instruction *mul = v->emit(v->MUL(temp, something, src_reg(1.0f)));
|
vec4_instruction *mul = v->emit(v->MUL(temp, something, brw_imm_f(1.0f)));
|
||||||
src.swizzle = BRW_SWIZZLE_XXXX;
|
src.swizzle = BRW_SWIZZLE_XXXX;
|
||||||
v->emit(v->MOV(m0, src));
|
v->emit(v->MOV(m0, src));
|
||||||
src.swizzle = BRW_SWIZZLE_XYZW;
|
src.swizzle = BRW_SWIZZLE_XYZW;
|
||||||
|
|||||||
Reference in New Issue
Block a user