Test Vulkan code
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

49 lines
1.2 KiB

#version 450
#extension GL_EXT_shader_8bit_storage : require
#extension GL_EXT_shader_explicit_arithmetic_types_int8 : require
#extension GL_EXT_scalar_block_layout : require
//#define GL_EXT_shader_8bit_storage 1
struct ComputeParameters {
uint8_t tintMapType;
};
layout (binding = 0) uniform ParameterUBO {
ComputeParameters params;
} ubo;
layout(std430, binding = 1) readonly buffer TexelSSBOIn {
u8vec4 texelsIn[];
};
layout(std430, binding = 2) buffer TexelSSBOOut {
u8vec4 texelsOut[];
};
layout(scalar, binding = 3) readonly buffer ComputeSSBOIn {
u8vec3 tintMapIn[];
};
layout (local_size_x = 256, local_size_y = 1, local_size_z = 1) in;
void main()
{
uint idx = gl_GlobalInvocationID.x;
u8vec4 texelIn = texelsIn[idx];
// Grayscale code
// float gray = dot(vec3(texelIn.rgb), vec3(0.2627, 0.6780, 0.0593));
// texelsOut[idx] = u8vec4(u8vec3(gray), 1.0);
// TintMap code
uint8_t gray = uint8_t(dot(vec3(texelIn.rgb), vec3(0.2627, 0.6780, 0.0593)));
texelsOut[idx] = u8vec4(tintMapIn[ubo.params.tintMapType * 256 + gray], 1.0);
// texelsOut[idx] = u8vec4(tintMapIn[191], 1.0);
}