mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-02 10:08:08 +02:00
r300/compiler: add full viewport transformation support in WPOS codegen
This commit is contained in:
parent
ddfc4e31ad
commit
dc7f309f9c
4 changed files with 16 additions and 6 deletions
|
|
@ -59,7 +59,9 @@ enum {
|
|||
RC_STATE_SHADOW_AMBIENT = 0,
|
||||
|
||||
RC_STATE_R300_WINDOW_DIMENSION,
|
||||
RC_STATE_R300_TEXRECT_FACTOR
|
||||
RC_STATE_R300_TEXRECT_FACTOR,
|
||||
RC_STATE_R300_VIEWPORT_SCALE,
|
||||
RC_STATE_R300_VIEWPORT_OFFSET
|
||||
};
|
||||
|
||||
struct rc_constant {
|
||||
|
|
|
|||
|
|
@ -229,7 +229,8 @@ void rc_copy_output(struct radeon_compiler * c, unsigned output, unsigned dup_ou
|
|||
/**
|
||||
* Introduce standard code fragment to deal with fragment.position.
|
||||
*/
|
||||
void rc_transform_fragment_wpos(struct radeon_compiler * c, unsigned wpos, unsigned new_input)
|
||||
void rc_transform_fragment_wpos(struct radeon_compiler * c, unsigned wpos, unsigned new_input,
|
||||
int full_vtransform)
|
||||
{
|
||||
unsigned tempregi = rc_find_free_temporary(c);
|
||||
struct rc_instruction * inst_rcp;
|
||||
|
|
@ -279,13 +280,19 @@ void rc_transform_fragment_wpos(struct radeon_compiler * c, unsigned wpos, unsig
|
|||
inst_mad->U.I.SrcReg[0].Swizzle = RC_MAKE_SWIZZLE(RC_SWIZZLE_X, RC_SWIZZLE_Y, RC_SWIZZLE_Z, RC_SWIZZLE_ZERO);
|
||||
|
||||
inst_mad->U.I.SrcReg[1].File = RC_FILE_CONSTANT;
|
||||
inst_mad->U.I.SrcReg[1].Index = rc_constants_add_state(&c->Program.Constants, RC_STATE_R300_WINDOW_DIMENSION, 0);
|
||||
inst_mad->U.I.SrcReg[1].Swizzle = RC_MAKE_SWIZZLE(RC_SWIZZLE_X, RC_SWIZZLE_Y, RC_SWIZZLE_Z, RC_SWIZZLE_ZERO);
|
||||
|
||||
inst_mad->U.I.SrcReg[2].File = RC_FILE_CONSTANT;
|
||||
inst_mad->U.I.SrcReg[2].Index = inst_mad->U.I.SrcReg[1].Index;
|
||||
inst_mad->U.I.SrcReg[2].Swizzle = RC_MAKE_SWIZZLE(RC_SWIZZLE_X, RC_SWIZZLE_Y, RC_SWIZZLE_Z, RC_SWIZZLE_ZERO);
|
||||
|
||||
if (full_vtransform) {
|
||||
inst_mad->U.I.SrcReg[1].Index = rc_constants_add_state(&c->Program.Constants, RC_STATE_R300_VIEWPORT_SCALE, 0);
|
||||
inst_mad->U.I.SrcReg[2].Index = rc_constants_add_state(&c->Program.Constants, RC_STATE_R300_VIEWPORT_OFFSET, 0);
|
||||
} else {
|
||||
inst_mad->U.I.SrcReg[1].Index =
|
||||
inst_mad->U.I.SrcReg[2].Index = rc_constants_add_state(&c->Program.Constants, RC_STATE_R300_WINDOW_DIMENSION, 0);
|
||||
}
|
||||
|
||||
for (inst = inst_mad->Next; inst != &c->Program.Instructions; inst = inst->Next) {
|
||||
const struct rc_opcode_info * opcode = rc_get_opcode_info(inst->U.I.Opcode);
|
||||
unsigned i;
|
||||
|
|
|
|||
|
|
@ -73,7 +73,8 @@ void rc_calculate_inputs_outputs(struct radeon_compiler * c);
|
|||
void rc_move_input(struct radeon_compiler * c, unsigned input, struct rc_src_register new_input);
|
||||
void rc_move_output(struct radeon_compiler * c, unsigned output, unsigned new_output, unsigned writemask);
|
||||
void rc_copy_output(struct radeon_compiler * c, unsigned output, unsigned dup_output);
|
||||
void rc_transform_fragment_wpos(struct radeon_compiler * c, unsigned wpos, unsigned new_input);
|
||||
void rc_transform_fragment_wpos(struct radeon_compiler * c, unsigned wpos, unsigned new_input,
|
||||
int full_vtransform);
|
||||
|
||||
struct r300_fragment_program_compiler {
|
||||
struct radeon_compiler Base;
|
||||
|
|
|
|||
|
|
@ -120,7 +120,7 @@ static void insert_WPOS_trailer(struct r300_fragment_program_compiler *compiler,
|
|||
return;
|
||||
}
|
||||
|
||||
rc_transform_fragment_wpos(&compiler->Base, FRAG_ATTRIB_WPOS, fp->wpos_attr);
|
||||
rc_transform_fragment_wpos(&compiler->Base, FRAG_ATTRIB_WPOS, fp->wpos_attr, GL_FALSE);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue