diff options
author | Brian Paul <[email protected]> | 2013-06-19 10:39:43 -0600 |
---|---|---|
committer | Brian Paul <[email protected]> | 2013-06-19 11:13:14 -0600 |
commit | 1f57349e20883346855752d3dfbcc74e9b6b0c1a (patch) | |
tree | 3b25959c5eae3558d2d656fd4e3e95617622c70c | |
parent | 3abd9285be7b2b71dab0b8ed20ebbceea9e9d2dd (diff) |
svga: move some svga/tgsi functions
Move some functions from the svga_tgsi_insn.h header into the
svga_tgsi_insn.c file since they're only used there. Plus, add
comments and fix formatting.
Reviewed-by: Jose Fonseca <[email protected]>
-rw-r--r-- | src/gallium/drivers/svga/svga_tgsi_decl_sm30.c | 20 | ||||
-rw-r--r-- | src/gallium/drivers/svga/svga_tgsi_emit.h | 125 | ||||
-rw-r--r-- | src/gallium/drivers/svga/svga_tgsi_insn.c | 129 |
3 files changed, 149 insertions, 125 deletions
diff --git a/src/gallium/drivers/svga/svga_tgsi_decl_sm30.c b/src/gallium/drivers/svga/svga_tgsi_decl_sm30.c index becd159b79f..7faa275f33e 100644 --- a/src/gallium/drivers/svga/svga_tgsi_decl_sm30.c +++ b/src/gallium/drivers/svga/svga_tgsi_decl_sm30.c @@ -491,6 +491,26 @@ vs30_output(struct svga_shader_emitter *emit, } +/** Translate PIPE_TEXTURE_x to SVGA3DSAMP_x */ +static ubyte +svga_tgsi_sampler_type(const struct svga_shader_emitter *emit, int idx) +{ + switch (emit->key.fkey.tex[idx].texture_target) { + case PIPE_TEXTURE_1D: + return SVGA3DSAMP_2D; + case PIPE_TEXTURE_2D: + case PIPE_TEXTURE_RECT: + return SVGA3DSAMP_2D; + case PIPE_TEXTURE_3D: + return SVGA3DSAMP_VOLUME; + case PIPE_TEXTURE_CUBE: + return SVGA3DSAMP_CUBE; + } + + return SVGA3DSAMP_UNKNOWN; +} + + static boolean ps30_sampler( struct svga_shader_emitter *emit, struct tgsi_declaration_semantic semantic, diff --git a/src/gallium/drivers/svga/svga_tgsi_emit.h b/src/gallium/drivers/svga/svga_tgsi_emit.h index 73c4cdabefc..949c39dd3ee 100644 --- a/src/gallium/drivers/svga/svga_tgsi_emit.h +++ b/src/gallium/drivers/svga/svga_tgsi_emit.h @@ -146,30 +146,6 @@ boolean svga_translate_decl_sm30( struct svga_shader_emitter *emit, const struct tgsi_full_declaration *decl ); -static INLINE boolean emit_dst( struct svga_shader_emitter *emit, - SVGA3dShaderDestToken dest ) -{ - assert(dest.reserved0); - assert(dest.mask); - return svga_shader_emit_dword( emit, dest.value ); -} - -static INLINE boolean emit_src( struct svga_shader_emitter *emit, - const struct src_register src ) -{ - if (src.base.relAddr) { - assert(src.base.reserved0); - assert(src.indirect.reserved0); - return (svga_shader_emit_dword( emit, src.base.value ) && - svga_shader_emit_dword( emit, src.indirect.value )); - } - else { - assert(src.base.reserved0); - return svga_shader_emit_dword( emit, src.base.value ); - } -} - - static INLINE boolean emit_instruction( struct svga_shader_emitter *emit, SVGA3dShaderInstToken opcode ) { @@ -177,60 +153,6 @@ static INLINE boolean emit_instruction( struct svga_shader_emitter *emit, } -static INLINE boolean emit_op1( struct svga_shader_emitter *emit, - SVGA3dShaderInstToken inst, - SVGA3dShaderDestToken dest, - struct src_register src0 ) -{ - return (emit_instruction( emit, inst ) && - emit_dst( emit, dest ) && - emit_src( emit, src0 )); -} - -static INLINE boolean emit_op2( struct svga_shader_emitter *emit, - SVGA3dShaderInstToken inst, - SVGA3dShaderDestToken dest, - struct src_register src0, - struct src_register src1 ) -{ - return (emit_instruction( emit, inst ) && - emit_dst( emit, dest ) && - emit_src( emit, src0 ) && - emit_src( emit, src1 )); -} - -static INLINE boolean emit_op3( struct svga_shader_emitter *emit, - SVGA3dShaderInstToken inst, - SVGA3dShaderDestToken dest, - struct src_register src0, - struct src_register src1, - struct src_register src2 ) -{ - return (emit_instruction( emit, inst ) && - emit_dst( emit, dest ) && - emit_src( emit, src0 ) && - emit_src( emit, src1 ) && - emit_src( emit, src2 )); -} - - -static INLINE boolean emit_op4( struct svga_shader_emitter *emit, - SVGA3dShaderInstToken inst, - SVGA3dShaderDestToken dest, - struct src_register src0, - struct src_register src1, - struct src_register src2, - struct src_register src3) -{ - return (emit_instruction( emit, inst ) && - emit_dst( emit, dest ) && - emit_src( emit, src0 ) && - emit_src( emit, src1 ) && - emit_src( emit, src2 ) && - emit_src( emit, src3 )); -} - - #define TRANSLATE_SWIZZLE(x,y,z,w) ((x) | ((y) << 2) | ((z) << 4) | ((w) << 6)) #define SWIZZLE_XYZW \ TRANSLATE_SWIZZLE(TGSI_SWIZZLE_X,TGSI_SWIZZLE_Y,TGSI_SWIZZLE_Z,TGSI_SWIZZLE_W) @@ -320,36 +242,6 @@ src_token( unsigned file, int number ) static INLINE struct src_register -absolute( struct src_register src ) -{ - src.base.srcMod = SVGA3DSRCMOD_ABS; - - return src; -} - - -static INLINE struct src_register -negate( struct src_register src ) -{ - switch (src.base.srcMod) { - case SVGA3DSRCMOD_ABS: - src.base.srcMod = SVGA3DSRCMOD_ABSNEG; - break; - case SVGA3DSRCMOD_ABSNEG: - src.base.srcMod = SVGA3DSRCMOD_ABS; - break; - case SVGA3DSRCMOD_NEG: - src.base.srcMod = SVGA3DSRCMOD_NONE; - break; - case SVGA3DSRCMOD_NONE: - src.base.srcMod = SVGA3DSRCMOD_NEG; - break; - } - return src; -} - - -static INLINE struct src_register src_register( unsigned file, int number ) { struct src_register src; @@ -372,22 +264,5 @@ static INLINE struct src_register src( SVGA3dShaderDestToken dst ) dst.num ); } -static INLINE ubyte svga_tgsi_sampler_type( struct svga_shader_emitter *emit, - int idx ) -{ - switch (emit->key.fkey.tex[idx].texture_target) { - case PIPE_TEXTURE_1D: - return SVGA3DSAMP_2D; - case PIPE_TEXTURE_2D: - case PIPE_TEXTURE_RECT: - return SVGA3DSAMP_2D; - case PIPE_TEXTURE_3D: - return SVGA3DSAMP_VOLUME; - case PIPE_TEXTURE_CUBE: - return SVGA3DSAMP_CUBE; - } - - return SVGA3DSAMP_UNKNOWN; -} #endif diff --git a/src/gallium/drivers/svga/svga_tgsi_insn.c b/src/gallium/drivers/svga/svga_tgsi_insn.c index 1e0579d95e6..92ee444a0db 100644 --- a/src/gallium/drivers/svga/svga_tgsi_insn.c +++ b/src/gallium/drivers/svga/svga_tgsi_insn.c @@ -292,6 +292,135 @@ reset_temp_regs(struct svga_shader_emitter *emit) } +/** Emit bytecode for a src_register */ +static boolean +emit_src(struct svga_shader_emitter *emit, const struct src_register src) +{ + if (src.base.relAddr) { + assert(src.base.reserved0); + assert(src.indirect.reserved0); + return (svga_shader_emit_dword( emit, src.base.value ) && + svga_shader_emit_dword( emit, src.indirect.value )); + } + else { + assert(src.base.reserved0); + return svga_shader_emit_dword( emit, src.base.value ); + } +} + + +/** Emit bytecode for a dst_register */ +static boolean +emit_dst(struct svga_shader_emitter *emit, SVGA3dShaderDestToken dest) +{ + assert(dest.reserved0); + assert(dest.mask); + return svga_shader_emit_dword( emit, dest.value ); +} + + +/** Emit bytecode for a 1-operand instruction */ +static boolean +emit_op1(struct svga_shader_emitter *emit, + SVGA3dShaderInstToken inst, + SVGA3dShaderDestToken dest, + struct src_register src0) +{ + return (emit_instruction(emit, inst) && + emit_dst(emit, dest) && + emit_src(emit, src0)); +} + + +/** Emit bytecode for a 2-operand instruction */ +static boolean +emit_op2(struct svga_shader_emitter *emit, + SVGA3dShaderInstToken inst, + SVGA3dShaderDestToken dest, + struct src_register src0, + struct src_register src1) +{ + return (emit_instruction(emit, inst) && + emit_dst(emit, dest) && + emit_src(emit, src0) && + emit_src(emit, src1)); +} + + +/** Emit bytecode for a 3-operand instruction */ +static boolean +emit_op3(struct svga_shader_emitter *emit, + SVGA3dShaderInstToken inst, + SVGA3dShaderDestToken dest, + struct src_register src0, + struct src_register src1, + struct src_register src2) +{ + return (emit_instruction(emit, inst) && + emit_dst(emit, dest) && + emit_src(emit, src0) && + emit_src(emit, src1) && + emit_src(emit, src2)); +} + + +/** Emit bytecode for a 4-operand instruction */ +static boolean +emit_op4(struct svga_shader_emitter *emit, + SVGA3dShaderInstToken inst, + SVGA3dShaderDestToken dest, + struct src_register src0, + struct src_register src1, + struct src_register src2, + struct src_register src3) +{ + return (emit_instruction(emit, inst) && + emit_dst(emit, dest) && + emit_src(emit, src0) && + emit_src(emit, src1) && + emit_src(emit, src2) && + emit_src(emit, src3)); +} + + +/** + * Apply the absolute value modifier to the given src_register, returning + * a new src_register. + */ +static struct src_register +absolute(struct src_register src) +{ + src.base.srcMod = SVGA3DSRCMOD_ABS; + return src; +} + + +/** + * Apply the negation modifier to the given src_register, returning + * a new src_register. + */ +static struct src_register +negate(struct src_register src) +{ + switch (src.base.srcMod) { + case SVGA3DSRCMOD_ABS: + src.base.srcMod = SVGA3DSRCMOD_ABSNEG; + break; + case SVGA3DSRCMOD_ABSNEG: + src.base.srcMod = SVGA3DSRCMOD_ABS; + break; + case SVGA3DSRCMOD_NEG: + src.base.srcMod = SVGA3DSRCMOD_NONE; + break; + case SVGA3DSRCMOD_NONE: + src.base.srcMod = SVGA3DSRCMOD_NEG; + break; + } + return src; +} + + + /* Replace the src with the temporary specified in the dst, but copying * only the necessary channels, and preserving the original swizzle (which is * important given that several opcodes have constraints in the allowed |