mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-02 02:20:25 +01:00
Gallivm: make it compile again, add some opcodes.
This commit is contained in:
parent
5620c20b24
commit
3f477e111a
5 changed files with 864 additions and 578 deletions
|
|
@ -32,6 +32,7 @@
|
|||
* Brian Paul
|
||||
*/
|
||||
|
||||
#include "util/u_memory.h"
|
||||
#include "pipe/p_shader_tokens.h"
|
||||
#include "draw_private.h"
|
||||
#include "draw_context.h"
|
||||
|
|
|
|||
|
|
@ -46,6 +46,7 @@
|
|||
#include "tgsi/tgsi_dump.h"
|
||||
|
||||
#include "util/u_memory.h"
|
||||
#include "util/u_math.h"
|
||||
|
||||
#include <llvm/Module.h>
|
||||
#include <llvm/CallingConv.h>
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -57,15 +57,22 @@ public:
|
|||
llvm::BasicBlock *currentBlock() const;
|
||||
|
||||
llvm::Value *abs(llvm::Value *in1);
|
||||
llvm::Value *arl(llvm::Value *in1);
|
||||
llvm::Value *add(llvm::Value *in1, llvm::Value *in2);
|
||||
llvm::Value *arl(llvm::Value *in1);
|
||||
void beginLoop();
|
||||
void bgnSub(unsigned);
|
||||
void brk();
|
||||
void cal(int label, llvm::Value *input);
|
||||
llvm::Value *clamp(llvm::Value *in);
|
||||
llvm::Value *cmp(llvm::Value *in1, llvm::Value *in2, llvm::Value *in3);
|
||||
llvm::Value *cnd(llvm::Value *in1, llvm::Value *in2, llvm::Value *in3);
|
||||
llvm::Value *cnd0(llvm::Value *in1, llvm::Value *in2, llvm::Value *in3);
|
||||
llvm::Value *cos(llvm::Value *in);
|
||||
llvm::Value *cross(llvm::Value *in1, llvm::Value *in2);
|
||||
llvm::Value *ddx(llvm::Value *in);
|
||||
llvm::Value *ddy(llvm::Value *in);
|
||||
llvm::Value *div(llvm::Value *in1, llvm::Value *in2);
|
||||
llvm::Value *dot2add(llvm::Value *in, llvm::Value *in2, llvm::Value *in3);
|
||||
llvm::Value *dp3(llvm::Value *in1, llvm::Value *in2);
|
||||
llvm::Value *dp4(llvm::Value *in1, llvm::Value *in2);
|
||||
llvm::Value *dph(llvm::Value *in1, llvm::Value *in2);
|
||||
|
|
@ -75,6 +82,7 @@ public:
|
|||
void endLoop();
|
||||
void end();
|
||||
void endSub();
|
||||
llvm::Value *exp(llvm::Value *in);
|
||||
llvm::Value *ex2(llvm::Value *in);
|
||||
llvm::Value *floor(llvm::Value *in);
|
||||
llvm::Value *frc(llvm::Value *in);
|
||||
|
|
@ -82,32 +90,41 @@ public:
|
|||
llvm::Value *kil(llvm::Value *in);
|
||||
llvm::Value *lerp(llvm::Value *in1, llvm::Value *in2,
|
||||
llvm::Value *in3);
|
||||
llvm::Value *lit(llvm::Value *in);
|
||||
llvm::Value *lg2(llvm::Value *in);
|
||||
llvm::Value *lit(llvm::Value *in);
|
||||
llvm::Value *log(llvm::Value *in);
|
||||
llvm::Value *madd(llvm::Value *in1, llvm::Value *in2,
|
||||
llvm::Value *in3);
|
||||
llvm::Value *min(llvm::Value *in1, llvm::Value *in2);
|
||||
llvm::Value *max(llvm::Value *in1, llvm::Value *in2);
|
||||
llvm::Value *min(llvm::Value *in1, llvm::Value *in2);
|
||||
llvm::Value *mul(llvm::Value *in1, llvm::Value *in2);
|
||||
llvm::Value *neg(llvm::Value *in);
|
||||
llvm::Value *pow(llvm::Value *in1, llvm::Value *in2);
|
||||
llvm::Value *rcp(llvm::Value *in);
|
||||
llvm::Value *rsq(llvm::Value *in);
|
||||
llvm::Value *scs(llvm::Value *in);
|
||||
llvm::Value *seq(llvm::Value *in1, llvm::Value *in2);
|
||||
llvm::Value *sfl(llvm::Value *in1, llvm::Value *in2);
|
||||
llvm::Value *sge(llvm::Value *in1, llvm::Value *in2);
|
||||
llvm::Value *sgt(llvm::Value *in1, llvm::Value *in2);
|
||||
llvm::Value *sin(llvm::Value *in);
|
||||
llvm::Value *sle(llvm::Value *in1, llvm::Value *in2);
|
||||
llvm::Value *slt(llvm::Value *in1, llvm::Value *in2);
|
||||
llvm::Value *sne(llvm::Value *in1, llvm::Value *in2);
|
||||
llvm::Value *str(llvm::Value *in1, llvm::Value *in2);
|
||||
llvm::Value *sub(llvm::Value *in1, llvm::Value *in2);
|
||||
llvm::Value *trunc(llvm::Value *in);
|
||||
llvm::Value *x2d(llvm::Value *in1, llvm::Value *in2, llvm::Value *in3);
|
||||
|
||||
void printVector(llvm::Value *val);
|
||||
private:
|
||||
const char *name(const char *prefix);
|
||||
|
||||
llvm::Value *callFAbs(llvm::Value *val);
|
||||
llvm::Value *callFExp(llvm::Value *val);
|
||||
llvm::Value *callFLog(llvm::Value *val);
|
||||
llvm::Value *callFloor(llvm::Value *val);
|
||||
llvm::Value *callFSqrt(llvm::Value *val);
|
||||
llvm::Value *callFLog(llvm::Value *val);
|
||||
llvm::Value *callPow(llvm::Value *val1, llvm::Value *val2);
|
||||
|
||||
llvm::Value *vectorFromVals(llvm::Value *x, llvm::Value *y,
|
||||
|
|
@ -135,6 +152,7 @@ private:
|
|||
llvm::Function *m_llvmPow;
|
||||
llvm::Function *m_llvmFloor;
|
||||
llvm::Function *m_llvmFlog;
|
||||
llvm::Function *m_llvmFexp;
|
||||
llvm::Function *m_llvmLit;
|
||||
|
||||
llvm::Constant *m_fmtPtr;
|
||||
|
|
|
|||
|
|
@ -286,9 +286,13 @@ translate_instruction(llvm::Module *module,
|
|||
out = instr->rsq(inputs[0]);
|
||||
}
|
||||
break;
|
||||
case TGSI_OPCODE_EXP:
|
||||
case TGSI_OPCODE_EXP: {
|
||||
out = instr->exp(inputs[0]);
|
||||
}
|
||||
break;
|
||||
case TGSI_OPCODE_LOG:
|
||||
case TGSI_OPCODE_LOG: {
|
||||
out = instr->log(inputs[0]);
|
||||
}
|
||||
break;
|
||||
case TGSI_OPCODE_MUL: {
|
||||
out = instr->mul(inputs[0], inputs[1]);
|
||||
|
|
@ -338,21 +342,31 @@ translate_instruction(llvm::Module *module,
|
|||
out = instr->lerp(inputs[0], inputs[1], inputs[2]);
|
||||
}
|
||||
break;
|
||||
case TGSI_OPCODE_CND:
|
||||
case TGSI_OPCODE_CND: {
|
||||
out = instr->cnd(inputs[0], inputs[1], inputs[2]);
|
||||
}
|
||||
break;
|
||||
case TGSI_OPCODE_CND0:
|
||||
case TGSI_OPCODE_CND0: {
|
||||
out = instr->cnd0(inputs[0], inputs[1], inputs[2]);
|
||||
}
|
||||
break;
|
||||
case TGSI_OPCODE_DOT2ADD:
|
||||
case TGSI_OPCODE_DOT2ADD: {
|
||||
out = instr->dot2add(inputs[0], inputs[1], inputs[2]);
|
||||
}
|
||||
break;
|
||||
case TGSI_OPCODE_INDEX:
|
||||
break;
|
||||
case TGSI_OPCODE_NEGATE:
|
||||
case TGSI_OPCODE_NEGATE: {
|
||||
out = instr->neg(inputs[0]);
|
||||
}
|
||||
break;
|
||||
case TGSI_OPCODE_FRAC: {
|
||||
out = instr->frc(inputs[0]);
|
||||
}
|
||||
break;
|
||||
case TGSI_OPCODE_CLAMP:
|
||||
case TGSI_OPCODE_CLAMP: {
|
||||
out = instr->clamp(inputs[0]);
|
||||
}
|
||||
break;
|
||||
case TGSI_OPCODE_FLOOR: {
|
||||
out = instr->floor(inputs[0]);
|
||||
|
|
@ -392,9 +406,13 @@ translate_instruction(llvm::Module *module,
|
|||
out = instr->cos(inputs[0]);
|
||||
}
|
||||
break;
|
||||
case TGSI_OPCODE_DDX:
|
||||
case TGSI_OPCODE_DDX: {
|
||||
out = instr->ddx(inputs[0]);
|
||||
}
|
||||
break;
|
||||
case TGSI_OPCODE_DDY:
|
||||
case TGSI_OPCODE_DDY: {
|
||||
out = instr->ddy(inputs[0]);
|
||||
}
|
||||
break;
|
||||
case TGSI_OPCODE_KILP:
|
||||
break;
|
||||
|
|
@ -408,9 +426,13 @@ translate_instruction(llvm::Module *module,
|
|||
break;
|
||||
case TGSI_OPCODE_RFL:
|
||||
break;
|
||||
case TGSI_OPCODE_SEQ:
|
||||
case TGSI_OPCODE_SEQ: {
|
||||
out = instr->seq(inputs[0], inputs[1]);
|
||||
}
|
||||
break;
|
||||
case TGSI_OPCODE_SFL:
|
||||
case TGSI_OPCODE_SFL: {
|
||||
out = instr->sfl(inputs[0], inputs[1]);
|
||||
}
|
||||
break;
|
||||
case TGSI_OPCODE_SGT: {
|
||||
out = instr->sgt(inputs[0], inputs[1]);
|
||||
|
|
@ -420,11 +442,17 @@ translate_instruction(llvm::Module *module,
|
|||
out = instr->sin(inputs[0]);
|
||||
}
|
||||
break;
|
||||
case TGSI_OPCODE_SLE:
|
||||
case TGSI_OPCODE_SLE: {
|
||||
out = instr->sle(inputs[0], inputs[1]);
|
||||
}
|
||||
break;
|
||||
case TGSI_OPCODE_SNE:
|
||||
case TGSI_OPCODE_SNE: {
|
||||
out = instr->sne(inputs[0], inputs[1]);
|
||||
}
|
||||
break;
|
||||
case TGSI_OPCODE_STR:
|
||||
case TGSI_OPCODE_STR: {
|
||||
out = instr->str(inputs[0], inputs[1]);
|
||||
}
|
||||
break;
|
||||
case TGSI_OPCODE_TEX:
|
||||
break;
|
||||
|
|
@ -438,7 +466,9 @@ translate_instruction(llvm::Module *module,
|
|||
break;
|
||||
case TGSI_OPCODE_UP4UB:
|
||||
break;
|
||||
case TGSI_OPCODE_X2D:
|
||||
case TGSI_OPCODE_X2D: {
|
||||
out = instr->x2d(inputs[0], inputs[1], inputs[2]);
|
||||
}
|
||||
break;
|
||||
case TGSI_OPCODE_ARA:
|
||||
break;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue