From d9c034e8ccaad6db870df765e01d5963af84c9c5 Mon Sep 17 00:00:00 2001 From: Stenzek Date: Sat, 13 Aug 2016 00:40:18 +1000 Subject: ShaderGen: Specify attribute/output locations/bindings explicitly This also shifts the SSBO index from index 3 to index 0. --- Source/Core/VideoCommon/TextureConversionShader.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Source/Core/VideoCommon/TextureConversionShader.cpp') diff --git a/Source/Core/VideoCommon/TextureConversionShader.cpp b/Source/Core/VideoCommon/TextureConversionShader.cpp index cccb7e7334..16ea016675 100644 --- a/Source/Core/VideoCommon/TextureConversionShader.cpp +++ b/Source/Core/VideoCommon/TextureConversionShader.cpp @@ -92,7 +92,7 @@ static void WriteSwizzler(char*& p, u32 format, APIType ApiType) WRITE(p, "#define samp0 samp9\n"); WRITE(p, "SAMPLER_BINDING(9) uniform sampler2DArray samp0;\n"); - WRITE(p, " out vec4 ocol0;\n"); + WRITE(p, "FRAGMENT_OUTPUT_LOCATION(0) out vec4 ocol0;\n"); WRITE(p, "void main()\n"); WRITE(p, "{\n" " int2 sampleUv;\n" -- cgit v1.2.3 From a71381e80a1e60b48b815f3e6a1a6290a918b596 Mon Sep 17 00:00:00 2001 From: Stenzek Date: Sat, 13 Aug 2016 00:55:00 +1000 Subject: VideoCommon: Add APIType entry for Vulkan --- Source/Core/VideoCommon/TextureConversionShader.cpp | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) (limited to 'Source/Core/VideoCommon/TextureConversionShader.cpp') diff --git a/Source/Core/VideoCommon/TextureConversionShader.cpp b/Source/Core/VideoCommon/TextureConversionShader.cpp index 16ea016675..bd4e1349df 100644 --- a/Source/Core/VideoCommon/TextureConversionShader.cpp +++ b/Source/Core/VideoCommon/TextureConversionShader.cpp @@ -81,7 +81,10 @@ static void WriteSwizzler(char*& p, u32 format, APIType ApiType) { // left, top, of source rectangle within source texture // width of the destination rectangle, scale_factor (1 or 2) - WRITE(p, "uniform int4 position;\n"); + if (ApiType == APIType::Vulkan) + WRITE(p, "layout(std140, push_constant) uniform PCBlock { int4 position; } PC;\n"); + else + WRITE(p, "uniform int4 position;\n"); int blkW = TexDecoder_GetBlockWidthInTexels(format); int blkH = TexDecoder_GetBlockHeightInTexels(format); @@ -98,6 +101,17 @@ static void WriteSwizzler(char*& p, u32 format, APIType ApiType) " int2 sampleUv;\n" " int2 uv1 = int2(gl_FragCoord.xy);\n"); } + else if (ApiType == APIType::Vulkan) + { + WRITE(p, "SAMPLER_BINDING(0) uniform sampler2DArray samp0;\n"); + WRITE(p, "FRAGMENT_OUTPUT_LOCATION(0) out vec4 ocol0;\n"); + + WRITE(p, "void main()\n"); + WRITE(p, "{\n" + " int2 sampleUv;\n" + " int2 uv1 = int2(gl_FragCoord.xy);\n" + " int4 position = PC.position;\n"); + } else // D3D { WRITE(p, "sampler samp0 : register(s0);\n"); @@ -146,7 +160,7 @@ static void WriteSwizzler(char*& p, u32 format, APIType ApiType) static void WriteSampleColor(char*& p, const char* colorComp, const char* dest, int xoffset, APIType ApiType, bool depth = false) { - if (ApiType == APIType::OpenGL) + if (ApiType == APIType::OpenGL || ApiType == APIType::Vulkan) { WRITE(p, " %s = texture(samp0, float3(uv0 + float2(%d, 0) * sample_offset, 0.0)).%s;\n", dest, xoffset, colorComp); @@ -155,7 +169,10 @@ static void WriteSampleColor(char*& p, const char* colorComp, const char* dest, { WRITE(p, " %s = Tex0.Sample(samp0, float3(uv0 + float2(%d, 0) * sample_offset, 0.0)).%s;\n", dest, xoffset, colorComp); + } + if (ApiType == APIType::D3D || ApiType == APIType::Vulkan) + { // Handle D3D depth inversion. if (depth) WRITE(p, " %s = 1.0 - %s;\n", dest, dest); -- cgit v1.2.3