summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/TextureConversionShader.cpp
diff options
context:
space:
mode:
authorMat M <mathew1800@gmail.com>2016-09-30 19:15:50 -0400
committerGitHub <noreply@github.com>2016-09-30 19:15:50 -0400
commit46b9383280a623753686ab6df6c479e784e416ae (patch)
tree9ffb2cbdba6d39a29d6fed9df4db03166755a20d /Source/Core/VideoCommon/TextureConversionShader.cpp
parentf3cdc6433cba253fa4485cd7e27025c31410ed0c (diff)
parenta8194cff3ca8f9b85a779da6b8214b58ba3fa7d0 (diff)
Merge pull request #3935 from stenzek/vulkan-pr
Vulkan Backend
Diffstat (limited to 'Source/Core/VideoCommon/TextureConversionShader.cpp')
-rw-r--r--Source/Core/VideoCommon/TextureConversionShader.cpp23
1 files changed, 20 insertions, 3 deletions
diff --git a/Source/Core/VideoCommon/TextureConversionShader.cpp b/Source/Core/VideoCommon/TextureConversionShader.cpp
index cccb7e7334..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);
@@ -92,12 +95,23 @@ 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"
" 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);