#version 450
#extension GL_GOOGLE_include_directive : enable

#include "d3d9_convert_common.h"

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;

    // Sign-extend magic!
    int u5  = bitfieldExtract(int (value), 0,  5);
    int v5  = bitfieldExtract(int (value), 5,  5);
    uint l6 = bitfieldExtract(uint(value), 10, 6);

    vec4 color = vec4(
      snormalize(u5, 5),
      snormalize(v5, 5),
      unormalize(l6, 6),
      1.0f);
    
    imageStore(dst, thread_id.xy, color);
  }
}