mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-08-25 07:56:33 +00:00
Add logical comparisons and any/all operators
This commit is contained in:
@@ -951,6 +951,10 @@ void ThreadState::StepNext(ShaderDebugState *state, const rdcarray<ThreadState>
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
case Op::LogicalEqual:
|
||||
case Op::LogicalNotEqual:
|
||||
case Op::LogicalOr:
|
||||
case Op::LogicalAnd:
|
||||
case Op::IEqual:
|
||||
case Op::INotEqual:
|
||||
case Op::UGreaterThan:
|
||||
@@ -979,16 +983,26 @@ void ThreadState::StepNext(ShaderDebugState *state, const rdcarray<ThreadState>
|
||||
ShaderVariable var = GetSrc(comp.operand1);
|
||||
ShaderVariable b = GetSrc(comp.operand2);
|
||||
|
||||
if(opdata.op == Op::IEqual)
|
||||
if(opdata.op == Op::IEqual || opdata.op == Op::LogicalEqual)
|
||||
{
|
||||
for(uint8_t c = 0; c < var.columns; c++)
|
||||
var.value.uv[c] = (var.value.uv[c] == b.value.uv[c]) ? 1 : 0;
|
||||
}
|
||||
else if(opdata.op == Op::INotEqual)
|
||||
else if(opdata.op == Op::INotEqual || opdata.op == Op::LogicalNotEqual)
|
||||
{
|
||||
for(uint8_t c = 0; c < var.columns; c++)
|
||||
var.value.uv[c] = (var.value.uv[c] != b.value.uv[c]) ? 1 : 0;
|
||||
}
|
||||
else if(opdata.op == Op::LogicalAnd)
|
||||
{
|
||||
for(uint8_t c = 0; c < var.columns; c++)
|
||||
var.value.uv[c] = var.value.uv[c] & b.value.uv[c];
|
||||
}
|
||||
else if(opdata.op == Op::LogicalOr)
|
||||
{
|
||||
for(uint8_t c = 0; c < var.columns; c++)
|
||||
var.value.uv[c] = var.value.uv[c] | b.value.uv[c];
|
||||
}
|
||||
else if(opdata.op == Op::UGreaterThan)
|
||||
{
|
||||
for(uint8_t c = 0; c < var.columns; c++)
|
||||
@@ -1111,6 +1125,38 @@ void ThreadState::StepNext(ShaderDebugState *state, const rdcarray<ThreadState>
|
||||
SetDst(state, comp.result, var);
|
||||
break;
|
||||
}
|
||||
case Op::LogicalNot:
|
||||
{
|
||||
OpLogicalNot negate(it);
|
||||
|
||||
ShaderVariable var = GetSrc(negate.operand);
|
||||
|
||||
for(uint8_t c = 0; c < var.columns; c++)
|
||||
var.value.uv[c] = 1U - var.value.uv[c];
|
||||
|
||||
SetDst(state, negate.result, var);
|
||||
break;
|
||||
}
|
||||
case Op::Any:
|
||||
case Op::All:
|
||||
{
|
||||
OpAny any(it);
|
||||
|
||||
ShaderVariable var = GetSrc(any.vector);
|
||||
|
||||
for(uint8_t c = 1; c < var.columns; c++)
|
||||
{
|
||||
if(opdata.op == Op::Any)
|
||||
var.value.uv[0] |= var.value.uv[c];
|
||||
else
|
||||
var.value.uv[0] &= var.value.uv[c];
|
||||
}
|
||||
|
||||
var.columns = 1;
|
||||
|
||||
SetDst(state, any.result, var);
|
||||
break;
|
||||
}
|
||||
case Op::IsNan:
|
||||
{
|
||||
OpIsNan is(it);
|
||||
|
||||
@@ -581,6 +581,74 @@ void main()
|
||||
Color = vec4(radians(negone*164.2f), radians(posone*164.2f), radians(zerof), radians(posone*3456.78f));
|
||||
break;
|
||||
}
|
||||
case 71:
|
||||
{
|
||||
vec4 a = vec4(posone*2.4f, posone*2.5f, posone*2.6f, posone*2.7f);
|
||||
vec4 b = vec4(zerof+2.5f, zerof+2.5f, zerof+2.5f, zerof+2.5f);
|
||||
Color = vec4(float(a.x < b.x), float(a.x <= b.x), float(a.x > b.x), float(a.x >= b.x));
|
||||
break;
|
||||
}
|
||||
case 72:
|
||||
{
|
||||
vec4 a = vec4(posone*2.4f, posone*2.5f, posone*2.6f, posone*2.7f);
|
||||
vec4 b = vec4(zerof+2.5f, zerof+2.5f, zerof+2.5f, zerof+2.5f);
|
||||
bvec4 c = lessThanEqual(a, b);
|
||||
Color = vec4(float(a.x == b.x), float(a.x != b.x), 0.0f, 1.0f);
|
||||
break;
|
||||
}
|
||||
case 73:
|
||||
{
|
||||
ivec4 a = ivec4(zeroi+2, zeroi+3, zeroi+4, zeroi+5);
|
||||
ivec4 b = ivec4(zeroi+4, zeroi+4, zeroi+4, zeroi+4);
|
||||
Color = vec4(float(a.x < b.x), float(a.x <= b.x), float(a.x > b.x), float(a.x >= b.x));
|
||||
break;
|
||||
}
|
||||
case 74:
|
||||
{
|
||||
ivec4 a = ivec4(zeroi+2, zeroi+3, zeroi+4, zeroi+5);
|
||||
ivec4 b = ivec4(zeroi+4, zeroi+4, zeroi+4, zeroi+4);
|
||||
Color = vec4(float(a.x == b.x), float(a.x != b.x), 0.0f, 1.0f);
|
||||
break;
|
||||
}
|
||||
case 75:
|
||||
{
|
||||
uvec4 a = uvec4(zerou+2, zerou+3, zerou+4, zerou+5);
|
||||
uvec4 b = uvec4(zerou+4, zerou+4, zerou+4, zerou+4);
|
||||
Color = vec4(float(a.x < b.x), float(a.x <= b.x), float(a.x > b.x), float(a.x >= b.x));
|
||||
break;
|
||||
}
|
||||
case 76:
|
||||
{
|
||||
uvec4 a = uvec4(zerou+2, zerou+3, zerou+4, zerou+5);
|
||||
uvec4 b = uvec4(zerou+4, zerou+4, zerou+4, zerou+4);
|
||||
Color = vec4(float(a.x == b.x), float(a.x != b.x), 0.0f, 1.0f);
|
||||
break;
|
||||
}
|
||||
case 77:
|
||||
{
|
||||
vec4 a = vec4(posone*2.4f, posone*2.5f, posone*2.6f, posone*2.7f);
|
||||
vec4 b = vec4(zerof+2.5f, zerof+2.5f, zerof+2.5f, zerof+2.5f);
|
||||
bvec4 c = lessThanEqual(a, b);
|
||||
Color = vec4(float(any(c)), float(all(c)), float(c.x == c.z), float(c.x != c.w));
|
||||
break;
|
||||
}
|
||||
case 78:
|
||||
{
|
||||
vec4 a = vec4(posone*2.4f, posone*2.5f, posone*2.6f, posone*2.7f);
|
||||
vec4 b = vec4(zerof+2.5f, zerof+2.5f, zerof+2.5f, zerof+2.5f);
|
||||
bvec4 c = lessThanEqual(a, b);
|
||||
Color = vec4(float(c.x || c.y), float(c.x && c.y), float(!c.x), 1.0f);
|
||||
break;
|
||||
}
|
||||
case 79:
|
||||
{
|
||||
vec4 a = vec4(posone*2.4f, posone*2.5f, posone*2.6f, posone*2.7f);
|
||||
vec4 b = vec4(zerof+2.5f, zerof+2.5f, zerof+2.5f, zerof+2.5f);
|
||||
bvec4 c = lessThanEqual(a, b);
|
||||
Color = mix(vec4(posone*9.0f, posone*8.0f, posone*7.0f, posone*6.0f),
|
||||
vec4(posone*1.0f, posone*2.0f, posone*3.0f, posone*4.0f), c);
|
||||
break;
|
||||
}
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user