// mcpro24fps HLG 87% to 2.4 gamma // ver. 2020-04-13 __CONSTANT__ float A = 0.17883277; __CONSTANT__ float B = 0.28466892; __CONSTANT__ float C = 0.55991073; __CONSTANT__ float BLACK = 0.02; __CONSTANT__ float WHITE = 0.87; __DEVICE__ float3 transform(int p_Width, int p_Height, int p_X, int p_Y, float p_R, float p_G, float p_B) { float3 rgb; rgb.x = p_R; rgb.y = p_G; rgb.z = p_B; //HLG 95 if(rgb.x < BLACK) rgb.x = 0.0; else { rgb.x = (rgb.x - BLACK)/(WHITE - BLACK); rgb.x = rgb.x < 0.5 ? _powf(rgb.x,2.0)/3.0 : (_expf((rgb.x-C)/A) + B)/12.0; } if(rgb.y < BLACK) rgb.y = 0.0; else { rgb.y = (rgb.y - BLACK)/(WHITE - BLACK); rgb.y = rgb.y < 0.5 ? _powf(rgb.y,2.0)/3.0 : (_expf((rgb.y-C)/A) + B)/12.0; } if(rgb.z < BLACK) rgb.z = 0.0; else { rgb.z = (rgb.z - BLACK)/(WHITE - BLACK); rgb.z = rgb.z < 0.5 ? _powf(rgb.z,2.0)/3.0 : (_expf((rgb.z-C)/A) + B)/12.0; } //Gamma 2.4 rgb.x = rgb.x < 0 ? 0 : _powf(rgb.x, 1.0f/2.4f); rgb.y = rgb.y < 0 ? 0 : _powf(rgb.y, 1.0f/2.4f); rgb.z = rgb.z < 0 ? 0 : _powf(rgb.z, 1.0f/2.4f); return rgb; }