diff --git a/webrender/res/brush_yuv_image.glsl b/webrender/res/brush_yuv_image.glsl index a8407acfa2..efb060fece 100644 --- a/webrender/res/brush_yuv_image.glsl +++ b/webrender/res/brush_yuv_image.glsl @@ -41,6 +41,12 @@ varying vec2 vLocalPos; flat varying vec4 vUvBounds_YUV; #endif +#ifdef WR_FEATURE_TEXTURE_RECT + #define TEX_SIZE(sampler) vec2(1.0) +#else + #define TEX_SIZE(sampler) vec2(textureSize(sampler, 0).xy) +#endif + #ifdef WR_VERTEX_SHADER void write_uv_rect( int resource_id, @@ -78,14 +84,14 @@ void brush_vs( #endif #if defined (WR_FEATURE_YUV_PLANAR) - write_uv_rect(user_data.x, f, vec2(textureSize(sColor0, 0).xy), vUv_Y, vUvBounds_Y); - write_uv_rect(user_data.y, f, vec2(textureSize(sColor1, 0).xy), vUv_U, vUvBounds_U); - write_uv_rect(user_data.z, f, vec2(textureSize(sColor2, 0).xy), vUv_V, vUvBounds_V); + write_uv_rect(user_data.x, f, TEX_SIZE(sColor0), vUv_Y, vUvBounds_Y); + write_uv_rect(user_data.y, f, TEX_SIZE(sColor1), vUv_U, vUvBounds_U); + write_uv_rect(user_data.z, f, TEX_SIZE(sColor2), vUv_V, vUvBounds_V); #elif defined (WR_FEATURE_YUV_NV12) - write_uv_rect(user_data.x, f, vec2(textureSize(sColor0, 0).xy), vUv_Y, vUvBounds_Y); - write_uv_rect(user_data.y, f, vec2(textureSize(sColor1, 0).xy), vUv_UV, vUvBounds_UV); + write_uv_rect(user_data.x, f, TEX_SIZE(sColor0), vUv_Y, vUvBounds_Y); + write_uv_rect(user_data.y, f, TEX_SIZE(sColor1), vUv_UV, vUvBounds_UV); #elif defined (WR_FEATURE_YUV_INTERLEAVED) - write_uv_rect(user_data.x, f, vec2(textureSize(sColor0, 0).xy), vUv_YUV, vUvBounds_YUV); + write_uv_rect(user_data.x, f, TEX_SIZE(sColor0), vUv_YUV, vUvBounds_YUV); #endif //WR_FEATURE_YUV_* } #endif diff --git a/webrender/res/shared.glsl b/webrender/res/shared.glsl index 6d1b942d44..0946941ffb 100644 --- a/webrender/res/shared.glsl +++ b/webrender/res/shared.glsl @@ -14,16 +14,9 @@ #include base -// The textureLod() doesn't support samplerExternalOES for WR_FEATURE_TEXTURE_EXTERNAL. -// https://www.khronos.org/registry/OpenGL/extensions/OES/OES_EGL_image_external_essl3.txt -// -// The textureLod() doesn't support sampler2DRect for WR_FEATURE_TEXTURE_RECT, too. -// -// Use texture() instead. #if defined(WR_FEATURE_TEXTURE_EXTERNAL) || defined(WR_FEATURE_TEXTURE_RECT) || defined(WR_FEATURE_TEXTURE_2D) #define TEX_SAMPLE(sampler, tex_coord) texture(sampler, tex_coord.xy) #else -// In normal case, we use textureLod(). We haven't used the lod yet. So, we always pass 0.0 now. #define TEX_SAMPLE(sampler, tex_coord) texture(sampler, tex_coord) #endif diff --git a/webrender/tests/angle_shader_validation.rs b/webrender/tests/angle_shader_validation.rs index baf91e9dcc..3f57b6d700 100644 --- a/webrender/tests/angle_shader_validation.rs +++ b/webrender/tests/angle_shader_validation.rs @@ -73,7 +73,7 @@ const SHADERS: &[Shader] = &[ // Brush shaders Shader { name: "brush_yuv_image", - features: &["", "YUV_NV12", "YUV_PLANAR", "YUV_INTERLEAVED"], + features: &["", "YUV_NV12", "YUV_PLANAR", "YUV_INTERLEAVED", "YUV_NV12,TEXTURE_RECT"], }, Shader { name: "brush_mask",