#version 450 #include "AstcDecompressor.glsl" #include "Common.comp" precision highp int; layout(local_size_x = 8, local_size_y = 8, local_size_z = 1) in; layout(push_constant) uniform ImageFormatBlock { uvec2 blockSize; uint baseLayer; uint smallBlock; // TODO(gregschlom) Remove this once we remove the old decoder. } u_pushConstant; layout(binding = 0, rgba32ui) readonly uniform WITH_TYPE(uimage) srcImage; layout(binding = 1, rgba8ui) writeonly uniform WITH_TYPE(uimage) dstImage; void main() { uvec2 texelPos = gl_GlobalInvocationID.xy; uint layer = u_pushConstant.baseLayer + gl_GlobalInvocationID.z; uvec2 blockPos = texelPos / u_pushConstant.blockSize; uvec2 posInBlock = texelPos % u_pushConstant.blockSize; uvec4 astcBlock = imageLoad(srcImage, WITH_TYPE(getPos)(ivec3(blockPos, layer))).wzyx; astcDecoderInitialize(astcBlock, u_pushConstant.blockSize); uvec4 texel = astcDecodeTexel(posInBlock); imageStore(dstImage, WITH_TYPE(getPos)(ivec3(texelPos, layer)), texel); }