mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-29 21:30:53 +00:00
Add some type variants of supported glsl450 functions
This commit is contained in:
@@ -27,10 +27,6 @@
|
||||
#include "common/formatting.h"
|
||||
#include "spirv_op_helpers.h"
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
#define finite _finite
|
||||
#endif
|
||||
|
||||
static bool ContainsNaNInf(const ShaderVariable &val)
|
||||
{
|
||||
bool ret = false;
|
||||
@@ -1878,6 +1874,8 @@ void ThreadState::StepNext(ShaderDebugState *state, const rdcarray<ThreadState>
|
||||
case Op::PtrCastToGeneric:
|
||||
case Op::GenericCastToPtr:
|
||||
case Op::GenericCastToPtrExplicit:
|
||||
case Op::SizeOf:
|
||||
case Op::CopyMemorySized:
|
||||
case Op::IsFinite:
|
||||
case Op::IsNormal:
|
||||
case Op::SignBitSet:
|
||||
|
||||
@@ -25,10 +25,6 @@
|
||||
#include "spirv_debug.h"
|
||||
#include <math.h>
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
#define finite _finite
|
||||
#endif
|
||||
|
||||
namespace rdcspv
|
||||
{
|
||||
namespace glsl
|
||||
@@ -53,6 +49,18 @@ ShaderVariable FAbs(ThreadState &state, const rdcarray<Id> ¶ms)
|
||||
return var;
|
||||
}
|
||||
|
||||
ShaderVariable SAbs(ThreadState &state, const rdcarray<Id> ¶ms)
|
||||
{
|
||||
CHECK_PARAMS(1);
|
||||
|
||||
ShaderVariable var = state.GetSrc(params[0]);
|
||||
|
||||
for(uint32_t c = 0; c < var.columns; c++)
|
||||
var.value.iv[c] = abs(var.value.iv[c]);
|
||||
|
||||
return var;
|
||||
}
|
||||
|
||||
ShaderVariable Floor(ThreadState &state, const rdcarray<Id> ¶ms)
|
||||
{
|
||||
CHECK_PARAMS(1);
|
||||
@@ -266,6 +274,71 @@ ShaderVariable Cross(ThreadState &state, const rdcarray<Id> ¶ms)
|
||||
|
||||
return var;
|
||||
}
|
||||
|
||||
static float GLSLNMax(float x, float y)
|
||||
{
|
||||
const bool xnan = isnan(x);
|
||||
const bool ynan = isnan(y);
|
||||
if(xnan && !ynan)
|
||||
return y;
|
||||
else if(!xnan && ynan)
|
||||
return x;
|
||||
else
|
||||
return x < y ? y : x;
|
||||
}
|
||||
|
||||
static float GLSLNMin(float x, float y)
|
||||
{
|
||||
const bool xnan = isnan(x);
|
||||
const bool ynan = isnan(y);
|
||||
if(xnan && !ynan)
|
||||
return y;
|
||||
else if(!xnan && ynan)
|
||||
return x;
|
||||
else
|
||||
return y < x ? y : x;
|
||||
}
|
||||
|
||||
ShaderVariable NMin(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] = GLSLNMin(var.value.fv[c], y.value.fv[c]);
|
||||
|
||||
return var;
|
||||
}
|
||||
|
||||
ShaderVariable NMax(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] = GLSLNMax(var.value.fv[c], y.value.fv[c]);
|
||||
|
||||
return var;
|
||||
}
|
||||
|
||||
ShaderVariable NClamp(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] = GLSLNMin(GLSLNMax(var.value.fv[c], minVal.value.fv[c]), maxVal.value.fv[c]);
|
||||
|
||||
return var;
|
||||
}
|
||||
|
||||
}; // namespace glsl
|
||||
|
||||
void ConfigureGLSLStd450(ExtInstDispatcher &extinst)
|
||||
@@ -278,6 +351,7 @@ void ConfigureGLSLStd450(ExtInstDispatcher &extinst)
|
||||
|
||||
#define EXT(func) extinst.functions[(uint32_t)GLSLstd450::func] = &glsl::func;
|
||||
EXT(FAbs);
|
||||
EXT(SAbs);
|
||||
EXT(Floor);
|
||||
EXT(Pow);
|
||||
EXT(FMin);
|
||||
@@ -292,5 +366,8 @@ void ConfigureGLSLStd450(ExtInstDispatcher &extinst)
|
||||
EXT(FMix);
|
||||
EXT(Cross);
|
||||
EXT(Normalize);
|
||||
EXT(NMin);
|
||||
EXT(NMax);
|
||||
EXT(NClamp);
|
||||
}
|
||||
}; // namespace rdcspv
|
||||
|
||||
@@ -441,6 +441,14 @@ void main()
|
||||
1.0f);
|
||||
break;
|
||||
}
|
||||
case 45:
|
||||
{
|
||||
Color = vec4(float(abs(zeroi+2)),
|
||||
float(abs(zeroi)),
|
||||
float(abs(zeroi-5)),
|
||||
1.0f);
|
||||
break;
|
||||
}
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user