1
0
mirror of https://github.com/EduApps-CDG/OpenDX synced 2024-12-30 09:45:37 +01:00
OpenDX/src/d3d9/shaders/d3d9_convert_yuy2_uyvy.comp
Philip Rebohle 01a511aa99
[dxvk,dxgi,d3d9] Fix shader spec constant IDs
These changed after changing the render target output swizzle stuff.
2021-01-29 16:46:01 +01:00

53 lines
1.3 KiB
Plaintext

#version 450
#extension GL_GOOGLE_include_directive : enable
#include "d3d9_convert_common.h"
layout(constant_id = 1225) const bool s_is_uyvy = false;
layout(
local_size_x = 8,
local_size_y = 8,
local_size_z = 1) in;
layout(binding = 0)
writeonly uniform image2D dst;
layout(binding = 1) uniform usamplerBuffer src;
layout(push_constant)
uniform u_info_t {
uvec2 extent;
} u_info;
void main() {
ivec3 thread_id = ivec3(gl_GlobalInvocationID);
if (all(lessThan(thread_id.xy, u_info.extent))) {
uint offset = thread_id.x
+ thread_id.y * u_info.extent.x;
uint value = texelFetch(src, int(offset)).r;
vec4 data = unpackUnorm4x8(value);
// Flip around stuff for UYVY
if (s_is_uyvy)
data = data.yxwz;
float y0 = data.x - (16 / 255.0);
float u = data.y - (128 / 255.0);
float y1 = data.z - (16 / 255.0);
float v = data.w - (128 / 255.0);
vec4 color0 = convertYUV(vec3(y0, u, v));
vec4 color1 = convertYUV(vec3(y1, u, v));
// YUY2 has a macropixel of [2, 1]
// so we write 2 pixels in this run.
ivec2 writePos = thread_id.xy * ivec2(2, 1);
imageStore(dst, ivec2(writePos.x, writePos.y), color0);
imageStore(dst, ivec2(writePos.x + 1, writePos.y), color1);
}
}