mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-12 04:50:35 +00:00
Add support for glsl450 min/max/clamp
This commit is contained in:
@@ -78,6 +78,138 @@ ShaderVariable Pow(ThreadState &state, const rdcarray<Id> ¶ms)
|
||||
return var;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
static T GLSLMax(T x, T y)
|
||||
{
|
||||
return x < y ? y : x;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
static T GLSLMin(T x, T y)
|
||||
{
|
||||
return y < x ? y : x;
|
||||
}
|
||||
|
||||
ShaderVariable FMax(ThreadState &state, const rdcarray<Id> ¶ms)
|
||||
{
|
||||
CHECK_PARAMS(2);
|
||||
|
||||
ShaderVariable var = state.GetSrc(params[0]);
|
||||
ShaderVariable y = state.GetSrc(params[1]);
|
||||
|
||||
for(uint32_t c = 0; c < var.columns; c++)
|
||||
var.value.fv[c] = GLSLMax(var.value.fv[c], y.value.fv[c]);
|
||||
|
||||
return var;
|
||||
}
|
||||
|
||||
ShaderVariable UMax(ThreadState &state, const rdcarray<Id> ¶ms)
|
||||
{
|
||||
CHECK_PARAMS(2);
|
||||
|
||||
ShaderVariable var = state.GetSrc(params[0]);
|
||||
ShaderVariable y = state.GetSrc(params[1]);
|
||||
|
||||
for(uint32_t c = 0; c < var.columns; c++)
|
||||
var.value.uv[c] = GLSLMax(var.value.uv[c], y.value.uv[c]);
|
||||
|
||||
return var;
|
||||
}
|
||||
|
||||
ShaderVariable SMax(ThreadState &state, const rdcarray<Id> ¶ms)
|
||||
{
|
||||
CHECK_PARAMS(2);
|
||||
|
||||
ShaderVariable var = state.GetSrc(params[0]);
|
||||
ShaderVariable y = state.GetSrc(params[1]);
|
||||
|
||||
for(uint32_t c = 0; c < var.columns; c++)
|
||||
var.value.iv[c] = GLSLMax(var.value.iv[c], y.value.iv[c]);
|
||||
|
||||
return var;
|
||||
}
|
||||
|
||||
ShaderVariable FMin(ThreadState &state, const rdcarray<Id> ¶ms)
|
||||
{
|
||||
CHECK_PARAMS(2);
|
||||
|
||||
ShaderVariable var = state.GetSrc(params[0]);
|
||||
ShaderVariable y = state.GetSrc(params[1]);
|
||||
|
||||
for(uint32_t c = 0; c < var.columns; c++)
|
||||
var.value.fv[c] = GLSLMin(var.value.fv[c], y.value.fv[c]);
|
||||
|
||||
return var;
|
||||
}
|
||||
|
||||
ShaderVariable UMin(ThreadState &state, const rdcarray<Id> ¶ms)
|
||||
{
|
||||
CHECK_PARAMS(2);
|
||||
|
||||
ShaderVariable var = state.GetSrc(params[0]);
|
||||
ShaderVariable y = state.GetSrc(params[1]);
|
||||
|
||||
for(uint32_t c = 0; c < var.columns; c++)
|
||||
var.value.uv[c] = GLSLMin(var.value.uv[c], y.value.uv[c]);
|
||||
|
||||
return var;
|
||||
}
|
||||
|
||||
ShaderVariable SMin(ThreadState &state, const rdcarray<Id> ¶ms)
|
||||
{
|
||||
CHECK_PARAMS(2);
|
||||
|
||||
ShaderVariable var = state.GetSrc(params[0]);
|
||||
ShaderVariable y = state.GetSrc(params[1]);
|
||||
|
||||
for(uint32_t c = 0; c < var.columns; c++)
|
||||
var.value.iv[c] = GLSLMin(var.value.iv[c], y.value.iv[c]);
|
||||
|
||||
return var;
|
||||
}
|
||||
|
||||
ShaderVariable FClamp(ThreadState &state, const rdcarray<Id> ¶ms)
|
||||
{
|
||||
CHECK_PARAMS(3);
|
||||
|
||||
ShaderVariable var = state.GetSrc(params[0]);
|
||||
ShaderVariable minVal = state.GetSrc(params[1]);
|
||||
ShaderVariable maxVal = state.GetSrc(params[2]);
|
||||
|
||||
for(uint32_t c = 0; c < var.columns; c++)
|
||||
var.value.fv[c] = GLSLMin(GLSLMax(var.value.fv[c], minVal.value.fv[c]), maxVal.value.fv[c]);
|
||||
|
||||
return var;
|
||||
}
|
||||
|
||||
ShaderVariable UClamp(ThreadState &state, const rdcarray<Id> ¶ms)
|
||||
{
|
||||
CHECK_PARAMS(3);
|
||||
|
||||
ShaderVariable var = state.GetSrc(params[0]);
|
||||
ShaderVariable minVal = state.GetSrc(params[1]);
|
||||
ShaderVariable maxVal = state.GetSrc(params[2]);
|
||||
|
||||
for(uint32_t c = 0; c < var.columns; c++)
|
||||
var.value.uv[c] = GLSLMin(GLSLMax(var.value.uv[c], minVal.value.uv[c]), maxVal.value.uv[c]);
|
||||
|
||||
return var;
|
||||
}
|
||||
|
||||
ShaderVariable SClamp(ThreadState &state, const rdcarray<Id> ¶ms)
|
||||
{
|
||||
CHECK_PARAMS(3);
|
||||
|
||||
ShaderVariable var = state.GetSrc(params[0]);
|
||||
ShaderVariable minVal = state.GetSrc(params[1]);
|
||||
ShaderVariable maxVal = state.GetSrc(params[2]);
|
||||
|
||||
for(uint32_t c = 0; c < var.columns; c++)
|
||||
var.value.iv[c] = GLSLMin(GLSLMax(var.value.iv[c], minVal.value.iv[c]), maxVal.value.iv[c]);
|
||||
|
||||
return var;
|
||||
}
|
||||
|
||||
ShaderVariable FMix(ThreadState &state, const rdcarray<Id> ¶ms)
|
||||
{
|
||||
CHECK_PARAMS(3);
|
||||
@@ -148,6 +280,15 @@ void ConfigureGLSLStd450(ExtInstDispatcher &extinst)
|
||||
EXT(FAbs);
|
||||
EXT(Floor);
|
||||
EXT(Pow);
|
||||
EXT(FMin);
|
||||
EXT(UMin);
|
||||
EXT(SMin);
|
||||
EXT(FMax);
|
||||
EXT(UMax);
|
||||
EXT(SMax);
|
||||
EXT(FClamp);
|
||||
EXT(UClamp);
|
||||
EXT(SClamp);
|
||||
EXT(FMix);
|
||||
EXT(Cross);
|
||||
EXT(Normalize);
|
||||
|
||||
@@ -359,6 +359,88 @@ void main()
|
||||
Color = texture(linearSampledImage, inpos);
|
||||
break;
|
||||
}
|
||||
case 35:
|
||||
{
|
||||
Color = vec4(max(posone*3.3f, posone*4.4f),
|
||||
max(posone*4.4f, posone*3.3f),
|
||||
max(posone, posinf),
|
||||
max(posone, neginf));
|
||||
break;
|
||||
}
|
||||
case 36:
|
||||
{
|
||||
Color = vec4(max(negone*3.3f, negone*4.4f),
|
||||
max(negone*4.4f, negone*3.3f),
|
||||
max(negone, posinf),
|
||||
max(negone, neginf));
|
||||
break;
|
||||
}
|
||||
case 37:
|
||||
{
|
||||
Color = vec4(min(posone*3.3f, posone*4.4f),
|
||||
min(posone*4.4f, posone*3.3f),
|
||||
min(posone, posinf),
|
||||
min(posone, neginf));
|
||||
break;
|
||||
}
|
||||
case 38:
|
||||
{
|
||||
Color = vec4(min(negone*3.3f, negone*4.4f),
|
||||
min(negone*4.4f, negone*3.3f),
|
||||
min(negone, posinf),
|
||||
min(negone, neginf));
|
||||
break;
|
||||
}
|
||||
case 39:
|
||||
{
|
||||
Color = vec4(float(max(zeroi+5, zeroi+8)),
|
||||
float(max(zeroi+8, zeroi+5)),
|
||||
float(max(zeroi-8, zeroi-5)),
|
||||
float(max(zeroi-5, zeroi-8)));
|
||||
break;
|
||||
}
|
||||
case 40:
|
||||
{
|
||||
Color = vec4(float(min(zeroi+5, zeroi+8)),
|
||||
float(min(zeroi+8, zeroi+5)),
|
||||
float(min(zeroi-8, zeroi-5)),
|
||||
float(min(zeroi-5, zeroi-8)));
|
||||
break;
|
||||
}
|
||||
case 41:
|
||||
{
|
||||
Color = vec4(float(max(zerou+5, zerou+8)),
|
||||
float(max(zerou+8, zerou+5)),
|
||||
float(min(zerou+8, zerou+5)),
|
||||
float(min(zerou+5, zerou+8)));
|
||||
break;
|
||||
}
|
||||
case 42:
|
||||
{
|
||||
Color = vec4(clamp(posone*3.3f, posone, posone*5.0f),
|
||||
clamp(posone*0.3f, posone, posone*5.0f),
|
||||
clamp(posone*8.3f, posone, posone*5.0f),
|
||||
1.0f);
|
||||
break;
|
||||
}
|
||||
case 43:
|
||||
{
|
||||
uint x = uint(posone);
|
||||
Color = vec4(float(clamp(x*4, zerou+2, zerou+50)),
|
||||
float(clamp(x, zerou+2, zerou+50)),
|
||||
float(clamp(x*400, zerou+2, zerou+50)),
|
||||
1.0f);
|
||||
break;
|
||||
}
|
||||
case 44:
|
||||
{
|
||||
int x = int(posone);
|
||||
Color = vec4(float(clamp(x*4, zeroi+2, zeroi+50)),
|
||||
float(clamp(x, zeroi+2, zeroi+50)),
|
||||
float(clamp(x*400, zeroi+2, zeroi+50)),
|
||||
1.0f);
|
||||
break;
|
||||
}
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user