mirror of
https://github.com/gnif/LookingGlass.git
synced 2025-01-08 21:33:57 +00:00
[client] egl: precompute CAS filter constants on CPU
This commit is contained in:
parent
3a1a9121eb
commit
8b2db071d8
2 changed files with 26 additions and 22 deletions
|
@ -21,9 +21,11 @@
|
|||
#include "filter.h"
|
||||
#include "framebuffer.h"
|
||||
|
||||
#include "common/countedbuffer.h"
|
||||
#include "common/debug.h"
|
||||
#include "common/option.h"
|
||||
#include "cimgui.h"
|
||||
#include "ffx.h"
|
||||
|
||||
#include "basic.vert.h"
|
||||
#include "ffx_cas.frag.h"
|
||||
|
@ -34,10 +36,11 @@ typedef struct EGL_FilterFFXCAS
|
|||
|
||||
EGL_Shader * shader;
|
||||
bool enable;
|
||||
EGL_Uniform uniform;
|
||||
|
||||
enum EGL_PixelFormat pixFmt;
|
||||
unsigned int width, height;
|
||||
float sharpness;
|
||||
CountedBuffer * consts;
|
||||
bool prepared;
|
||||
|
||||
EGL_Framebuffer * fb;
|
||||
|
@ -69,6 +72,12 @@ static void egl_filterFFXCASEarlyInit(void)
|
|||
option_register(options);
|
||||
}
|
||||
|
||||
static void casUpdateConsts(EGL_FilterFFXCAS * this)
|
||||
{
|
||||
ffxCasConst((uint32_t *) this->consts->data, this->sharpness, this->width, this->height,
|
||||
this->width, this->height);
|
||||
}
|
||||
|
||||
static bool egl_filterFFXCASInit(EGL_Filter ** filter)
|
||||
{
|
||||
EGL_FilterFFXCAS * this = calloc(1, sizeof(*this));
|
||||
|
@ -93,12 +102,15 @@ static bool egl_filterFFXCASInit(EGL_Filter ** filter)
|
|||
goto error_shader;
|
||||
}
|
||||
|
||||
this->enable = option_get_bool("eglFilter", "ffxCAS");
|
||||
this->uniform.type = EGL_UNIFORM_TYPE_1F;
|
||||
this->uniform.location =
|
||||
egl_shaderGetUniform(this->shader, "uSharpness");
|
||||
this->uniform.f[0] =
|
||||
option_get_float("eglFilter", "ffxCASSharpness");
|
||||
this->consts = countedBufferNew(8 * sizeof(GLuint));
|
||||
egl_shaderSetUniforms(this->shader, &(EGL_Uniform) {
|
||||
.type = EGL_UNIFORM_TYPE_4UIV,
|
||||
.location = egl_shaderGetUniform(this->shader, "uConsts"),
|
||||
.v = this->consts,
|
||||
}, 1);
|
||||
|
||||
this->enable = option_get_bool("eglFilter", "ffxCAS");
|
||||
this->sharpness = option_get_float("eglFilter", "ffxCASSharpness");
|
||||
|
||||
if (!egl_framebufferInit(&this->fb))
|
||||
{
|
||||
|
@ -139,7 +151,7 @@ static bool egl_filterFFXCASImguiConfig(EGL_Filter * filter)
|
|||
|
||||
bool redraw = false;
|
||||
bool cas = this->enable;
|
||||
float casSharpness = this->uniform.f[0];
|
||||
float casSharpness = this->sharpness;
|
||||
|
||||
igCheckbox("AMD FidelityFX CAS", &cas);
|
||||
if (cas != this->enable)
|
||||
|
@ -156,7 +168,7 @@ static bool egl_filterFFXCASImguiConfig(EGL_Filter * filter)
|
|||
igSliderFloat("##casSharpness", &casSharpness, 0.0f, 1.0f, NULL, 0);
|
||||
igPopItemWidth();
|
||||
|
||||
if (casSharpness != this->uniform.f[0])
|
||||
if (casSharpness != this->sharpness)
|
||||
{
|
||||
// enable CAS if the sharpness was changed
|
||||
if (!cas)
|
||||
|
@ -165,7 +177,8 @@ static bool egl_filterFFXCASImguiConfig(EGL_Filter * filter)
|
|||
this->enable = true;
|
||||
}
|
||||
|
||||
this->uniform.f[0] = casSharpness;
|
||||
this->sharpness = casSharpness;
|
||||
casUpdateConsts(this);
|
||||
redraw = true;
|
||||
}
|
||||
|
||||
|
@ -190,6 +203,7 @@ static bool egl_filterFFXCASSetup(EGL_Filter * filter,
|
|||
this->width = width;
|
||||
this->height = height;
|
||||
this->prepared = false;
|
||||
casUpdateConsts(this);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -212,7 +226,6 @@ static bool egl_filterFFXCASPrepare(EGL_Filter * filter)
|
|||
if (this->prepared)
|
||||
return true;
|
||||
|
||||
egl_shaderSetUniforms(this->shader, &this->uniform, 1);
|
||||
this->prepared = true;
|
||||
|
||||
return true;
|
||||
|
|
|
@ -7,7 +7,7 @@ in vec2 fragCoord;
|
|||
out vec4 fragColor;
|
||||
|
||||
uniform sampler2D texture;
|
||||
uniform float uSharpness;
|
||||
uniform uvec4 uConsts[2];
|
||||
|
||||
#define A_GPU 1
|
||||
#define A_GLSL 1
|
||||
|
@ -32,17 +32,8 @@ void main()
|
|||
{
|
||||
vec2 res = vec2(textureSize(texture, 0));
|
||||
uvec2 point = uvec2(fragCoord * res);
|
||||
|
||||
vec4 color;
|
||||
uvec4 const0;
|
||||
uvec4 const1;
|
||||
|
||||
CasSetup(const0, const1, uSharpness,
|
||||
res.x, res.y, res.x, res.y);
|
||||
|
||||
CasFilter(
|
||||
fragColor.r, fragColor.g, fragColor.b,
|
||||
point,
|
||||
const0, const1,
|
||||
true);
|
||||
point, uConsts[0], uConsts[1], true);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue