diff --git a/Source/Core/VideoBackends/OGL/Src/TextureConverter.cpp b/Source/Core/VideoBackends/OGL/Src/TextureConverter.cpp index d2e295c4f3..2ec8ef4949 100644 --- a/Source/Core/VideoBackends/OGL/Src/TextureConverter.cpp +++ b/Source/Core/VideoBackends/OGL/Src/TextureConverter.cpp @@ -296,9 +296,9 @@ int EncodeToRamFromTexture(u32 address,GLuint source_texture, bool bFromZBuffer, s32 expandedHeight = (height + blkH) & (~blkH); texconv_shader.Bind(); - glUniform4f(texconv_shader.UniformLocations[0], - float(source.left), float(source.top), - (float)expandedWidth, bScaleByHalf ? 2.f : 1.f); + glUniform4i(texconv_shader.UniformLocations[0], + source.left, source.top, + expandedWidth, bScaleByHalf ? 2 : 1); TargetRectangle scaledSource; scaledSource.top = 0; diff --git a/Source/Core/VideoCommon/Src/TextureConversionShader.cpp b/Source/Core/VideoCommon/Src/TextureConversionShader.cpp index e7db8677eb..f271111851 100644 --- a/Source/Core/VideoCommon/Src/TextureConversionShader.cpp +++ b/Source/Core/VideoCommon/Src/TextureConversionShader.cpp @@ -62,7 +62,7 @@ void WriteSwizzler(char*& p, u32 format, API_TYPE ApiType) { // left, top, of source rectangle within source texture // width of the destination rectangle, scale_factor (1 or 2) - WRITE(p, "uniform float4 " I_COLORS";\n"); + WRITE(p, "uniform int4 " I_COLORS";\n"); int blkW = TexDecoder_GetBlockWidthInTexels(format); int blkH = TexDecoder_GetBlockHeightInTexels(format); @@ -97,7 +97,7 @@ void WriteSwizzler(char*& p, u32 format, API_TYPE ApiType) WRITE(p, " int yl = uv1.y / %d;\n", blkH); WRITE(p, " int yb = yl * %d;\n", blkH); WRITE(p, " int yoff = uv1.y - yb;\n"); - WRITE(p, " int xp = uv1.x + yoff * int(" I_COLORS".z);\n"); + WRITE(p, " int xp = uv1.x + yoff * " I_COLORS".z;\n"); WRITE(p, " int xel = xp / %d;\n", samples == 1 ? factor : blkW); WRITE(p, " int xb = xel / %d;\n", blkH); WRITE(p, " int xoff = xel - xb * %d;\n", blkH); @@ -111,13 +111,13 @@ void WriteSwizzler(char*& p, u32 format, API_TYPE ApiType) void WriteSampleColor(char*& p, const char* colorComp, const char* dest, int xoffset, API_TYPE ApiType) { - WRITE(p, // sampleUv is the sample position in (int)gx_coords - "uv0 = float2(sampleUv + int2(%d, 0));\n" // pixel offset (if more than one pixel is samped) - "uv0 *= " I_COLORS".w;\n" // scale by two (if wanted) - "uv0 += " I_COLORS".xy;\n" // move to copyed rect - "uv0 += float2(0.5, 0.5);\n" // move to center of pixel - "uv0 /= float2(%d, %d);\n" // normlize to [0:1] - "uv0.y = 1.0-uv0.y;\n" // ogl foo (disable this line for d3d) + WRITE(p, // sampleUv is the sample position in (int)gx_coords + "uv0 = float2(sampleUv + int2(%d, 0)" // pixel offset (if more than one pixel is samped) + " + " I_COLORS".xy);\n" // move to copyed rect + "uv0 += float2(0.5, 0.5);\n" // move to center of pixel + "uv0 *= float(" I_COLORS".w);\n" // scale by two if needed (this will move to pixels border to filter linear) + "uv0 /= float2(%d, %d);\n" // normlize to [0:1] + "uv0.y = 1.0-uv0.y;\n" // ogl foo (disable this line for d3d) "%s = texture(samp0, uv0).%s;\n", xoffset, EFB_WIDTH, EFB_HEIGHT, dest, colorComp );