blob: ca84dd25775828a83fc166d4beb7bf46aba285f2 [file] [log] [blame]
#version 450
#extension GL_ARB_separate_shader_objects : enable
#extension GL_EXT_control_flow_attributes : enable
layout(location = 0) in vec2 uvCoords;
layout(set = 0, binding = 0) uniform sampler2D image;
layout(std140, push_constant) uniform PushConstant {
layout(offset=80) vec4 color;
layout(offset=96) float gamma_power;
};
layout(location = 0) out vec4 outColor;
void main() {
outColor = color;
vec4 material_color = texture(image, uvCoords);
[[dont_flatten]]
if (gamma_power != 1.0) {
// Gamma correction is required. Check whether we can avoid pow().
[[dont_flatten]]
if (gamma_power == 2.0) {
// Squaring is cheaper than pow().
material_color.rgb *= material_color.rgb;
} else {
// pow() is required in the general case.
material_color.rgb = pow(material_color.rgb, vec3(gamma_power));
}
}
outColor *= material_color;
}