gsdx-ogl: add a texture offset uniform parameter to vertex shader

It would be used for a new implementation of the half pixel offset hack

Hopefully it doesn't badly impact the perf on low end iGPU
This commit is contained in:
Gregory Hainaut 2016-06-21 09:45:37 +02:00
parent f6cad2235b
commit c2229e3c0b
4 changed files with 25 additions and 15 deletions

View File

@ -120,12 +120,16 @@ public:
struct alignas(32) VSConstantBuffer struct alignas(32) VSConstantBuffer
{ {
GSVector4 Vertex_Scale_Offset; GSVector4 Vertex_Scale_Offset;
GSVector4 TextureOffset;
GSVector2i DepthMask; GSVector2i DepthMask;
GSVector2 PointSize; GSVector2 PointSize;
VSConstantBuffer() VSConstantBuffer()
{ {
Vertex_Scale_Offset = GSVector4::zero(); Vertex_Scale_Offset = GSVector4::zero();
TextureOffset = GSVector4::zero();
DepthMask = GSVector2i(0); DepthMask = GSVector2i(0);
PointSize = GSVector2(0); PointSize = GSVector2(0);
} }
@ -135,7 +139,7 @@ public:
GSVector4i* a = (GSVector4i*)this; GSVector4i* a = (GSVector4i*)this;
GSVector4i* b = (GSVector4i*)cb; GSVector4i* b = (GSVector4i*)cb;
if(!((a[0] == b[0]) & (a[1] == b[1])).alltrue()) if(!((a[0] == b[0]) & (a[1] == b[1]) & (a[2] == b[2])).alltrue())
{ {
a[0] = b[0]; a[0] = b[0];
a[1] = b[1]; a[1] = b[1];

View File

@ -60,11 +60,14 @@ layout(std140, binding = 15) uniform cb15
#if defined(VERTEX_SHADER) || defined(GEOMETRY_SHADER) #if defined(VERTEX_SHADER) || defined(GEOMETRY_SHADER)
layout(std140, binding = 20) uniform cb20 layout(std140, binding = 20) uniform cb20
{ {
vec2 VertexScale; vec2 VertexScale;
vec2 VertexOffset; vec2 VertexOffset;
uint DepthMask;
uint cb20_pad; vec4 TextureOffset;
vec2 PointSize;
uint DepthMask;
uint cb20_pad;
vec2 PointSize;
}; };
#endif #endif

View File

@ -24,10 +24,10 @@ const float exp_min32 = exp2(-32.0f);
void texture_coord() void texture_coord()
{ {
vec2 uv = vec2(i_uv); vec2 uv = vec2(i_uv) - TextureOffset.xy;
// Float coordinate // Float coordinate
VSout.t_float.xy = i_st; VSout.t_float.xy = i_st - TextureOffset.zw; // FIXME or .xy check final code
VSout.t_float.w = i_q; VSout.t_float.w = i_q;
// Integer coordinate => normalized // Integer coordinate => normalized

View File

@ -88,11 +88,14 @@ static const char* const common_header_glsl =
"#if defined(VERTEX_SHADER) || defined(GEOMETRY_SHADER)\n" "#if defined(VERTEX_SHADER) || defined(GEOMETRY_SHADER)\n"
"layout(std140, binding = 20) uniform cb20\n" "layout(std140, binding = 20) uniform cb20\n"
"{\n" "{\n"
" vec2 VertexScale;\n" " vec2 VertexScale;\n"
" vec2 VertexOffset;\n" " vec2 VertexOffset;\n"
" uint DepthMask;\n" "\n"
" uint cb20_pad;\n" " vec4 TextureOffset;\n"
" vec2 PointSize;\n" "\n"
" uint DepthMask;\n"
" uint cb20_pad;\n"
" vec2 PointSize;\n"
"};\n" "};\n"
"#endif\n" "#endif\n"
"\n" "\n"
@ -764,10 +767,10 @@ static const char* const tfx_vgs_glsl =
"\n" "\n"
"void texture_coord()\n" "void texture_coord()\n"
"{\n" "{\n"
" vec2 uv = vec2(i_uv);\n" " vec2 uv = vec2(i_uv) - TextureOffset.xy;\n"
"\n" "\n"
" // Float coordinate\n" " // Float coordinate\n"
" VSout.t_float.xy = i_st;\n" " VSout.t_float.xy = i_st - TextureOffset.zw; // FIXME or .xy check final code\n"
" VSout.t_float.w = i_q;\n" " VSout.t_float.w = i_q;\n"
"\n" "\n"
" // Integer coordinate => normalized\n" " // Integer coordinate => normalized\n"