do the lit (some artifacts present)
This commit is contained in:
parent
ea1a607292
commit
1d1cf8edf6
|
@ -179,6 +179,7 @@ void InstructionsSoa::createFunctionMap()
|
|||
m_functionsMap[TGSI_OPCODE_MIN] = "min";
|
||||
m_functionsMap[TGSI_OPCODE_MAX] = "max";
|
||||
m_functionsMap[TGSI_OPCODE_POWER] = "pow";
|
||||
m_functionsMap[TGSI_OPCODE_LIT] = "lit";
|
||||
}
|
||||
|
||||
void InstructionsSoa::createDependencies()
|
||||
|
@ -204,6 +205,14 @@ void InstructionsSoa::createDependencies()
|
|||
minDeps[0] = "minvec";
|
||||
m_builtinDependencies["min"] = minDeps;
|
||||
}
|
||||
{
|
||||
std::vector<std::string> litDeps(4);
|
||||
litDeps[0] = "minvec";
|
||||
litDeps[1] = "maxvec";
|
||||
litDeps[2] = "powf";
|
||||
litDeps[3] = "powvec";
|
||||
m_builtinDependencies["lit"] = litDeps;
|
||||
}
|
||||
}
|
||||
|
||||
llvm::Function * InstructionsSoa::function(int op)
|
||||
|
@ -475,3 +484,9 @@ std::vector<llvm::Value*> InstructionsSoa::sub(const std::vector<llvm::Value*> i
|
|||
return res;
|
||||
}
|
||||
|
||||
std::vector<llvm::Value*> InstructionsSoa::lit(const std::vector<llvm::Value*> in)
|
||||
{
|
||||
llvm::Function *func = function(TGSI_OPCODE_LIT);
|
||||
return callBuiltin(func, in);
|
||||
}
|
||||
|
||||
|
|
|
@ -56,6 +56,7 @@ public:
|
|||
const std::vector<llvm::Value*> in2);
|
||||
std::vector<llvm::Value*> dp4(const std::vector<llvm::Value*> in1,
|
||||
const std::vector<llvm::Value*> in2);
|
||||
std::vector<llvm::Value*> lit(const std::vector<llvm::Value*> in);
|
||||
std::vector<llvm::Value*> madd(const std::vector<llvm::Value*> in1,
|
||||
const std::vector<llvm::Value*> in2,
|
||||
const std::vector<llvm::Value*> in3);
|
||||
|
|
|
@ -109,20 +109,6 @@ void pow(float4 *res,
|
|||
res[3] = res[0];
|
||||
}
|
||||
|
||||
void lit(float4 *res,
|
||||
float4 tmp0x, float4 tmp0y, float4 tmp0z, float4 tmp0w,
|
||||
float4 tmp1x, float4 tmp1y, float4 tmp1z, float4 tmp1w)
|
||||
{
|
||||
const float4 zerovec = (float4) {0, 0, 0, 0};
|
||||
float4 tmpx = tmp0x;
|
||||
float4 tmpy = tmp0y;
|
||||
|
||||
res[0] = (float4){1.0, 1.0, 1.0, 1.0};
|
||||
res[1] = tmpx;
|
||||
res[2] = tmpy;
|
||||
res[3] = (float4){1.0, 1.0, 1.0, 1.0};
|
||||
}
|
||||
|
||||
float4 minvec(float4 a, float4 b)
|
||||
{
|
||||
return (float4){(a.x < b.x) ? a.x : b.x,
|
||||
|
@ -159,3 +145,26 @@ void max(float4 *res,
|
|||
res[2] = maxvec(tmp0z, tmp1z);
|
||||
res[3] = maxvec(tmp0w, tmp1w);
|
||||
}
|
||||
|
||||
|
||||
void lit(float4 *res,
|
||||
float4 tmp0x, float4 tmp0y, float4 tmp0z, float4 tmp0w)
|
||||
{
|
||||
const float4 zerovec = (float4) {0, 0, 0, 0};
|
||||
const float4 min128 = (float4) {-128.f, -128.f, -128.f, -128.f};
|
||||
const float4 plus128 = (float4) {128.f, 128.f, 128.f, 128.f};
|
||||
|
||||
res[0] = (float4){1.0, 1.0, 1.0, 1.0};
|
||||
if (tmp0x.x > 0) {
|
||||
float4 tmpx = maxvec(tmpx, zerovec);
|
||||
float4 tmpy = maxvec(tmp0y, zerovec);
|
||||
float4 tmpw = minvec(tmp0w, plus128);
|
||||
tmpw = maxvec(tmpw, min128);
|
||||
res[1] = tmpx;
|
||||
res[2] = powvec(tmpy, tmpw);
|
||||
} else {
|
||||
res[1] = zerovec;
|
||||
res[2] = zerovec;
|
||||
}
|
||||
res[3] = (float4){1.0, 1.0, 1.0, 1.0};
|
||||
}
|
||||
|
|
|
@ -692,6 +692,7 @@ translate_instructionir(llvm::Module *module,
|
|||
}
|
||||
break;
|
||||
case TGSI_OPCODE_LIT: {
|
||||
out = instr->lit(inputs[0]);
|
||||
}
|
||||
break;
|
||||
case TGSI_OPCODE_RCP: {
|
||||
|
|
Loading…
Reference in New Issue