From a60c3889718f4513a6c9d8b80f655db5d6346905 Mon Sep 17 00:00:00 2001 From: Romain Guy Date: Mon, 1 Aug 2011 15:28:16 -0700 Subject: Use high precision iterators on specific GPUs Bug #5098359 Change-Id: I52ee8c7b4c9e8d4c7bedb684eaf7bef6c44c74b9 --- libs/hwui/ProgramCache.cpp | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) (limited to 'libs/hwui/ProgramCache.cpp') diff --git a/libs/hwui/ProgramCache.cpp b/libs/hwui/ProgramCache.cpp index d419e3eab38c..c2383f4c7256 100644 --- a/libs/hwui/ProgramCache.cpp +++ b/libs/hwui/ProgramCache.cpp @@ -18,6 +18,7 @@ #include +#include "Caches.h" #include "ProgramCache.h" namespace android { @@ -64,10 +65,18 @@ const char* gVS_Header_Varyings_HasTexture = const char* gVS_Header_Varyings_IsAA = "varying float widthProportion;\n" "varying float lengthProportion;\n"; -const char* gVS_Header_Varyings_HasBitmap = - "varying vec2 outBitmapTexCoords;\n"; -const char* gVS_Header_Varyings_PointHasBitmap = - "varying vec2 outPointBitmapTexCoords;\n"; +const char* gVS_Header_Varyings_HasBitmap[2] = { + // Default precision + "varying vec2 outBitmapTexCoords;\n", + // High precision + "varying highp vec2 outBitmapTexCoords;\n" +}; +const char* gVS_Header_Varyings_PointHasBitmap[2] = { + // Default precision + "varying vec2 outPointBitmapTexCoords;\n", + // High precision + "varying highp vec2 outPointBitmapTexCoords;\n" +}; const char* gVS_Header_Varyings_HasGradient[3] = { // Linear "varying vec2 linear;\n", @@ -417,9 +426,10 @@ String8 ProgramCache::generateVertexShader(const ProgramDescription& description shader.append(gVS_Header_Varyings_HasGradient[description.gradientType]); } if (description.hasBitmap) { + int index = Caches::getInstance().extensions.needsHighpTexCoords() ? 1 : 0; shader.append(description.isPoint ? - gVS_Header_Varyings_PointHasBitmap : - gVS_Header_Varyings_HasBitmap); + gVS_Header_Varyings_PointHasBitmap[index] : + gVS_Header_Varyings_HasBitmap[index]); } // Begin the shader @@ -455,7 +465,6 @@ String8 ProgramCache::generateVertexShader(const ProgramDescription& description } String8 ProgramCache::generateFragmentShader(const ProgramDescription& description) { - // Set the default precision String8 shader; const bool blendFramebuffer = description.framebufferMode >= SkXfermode::kPlus_Mode; @@ -479,9 +488,10 @@ String8 ProgramCache::generateFragmentShader(const ProgramDescription& descripti shader.append(gVS_Header_Varyings_HasGradient[description.gradientType]); } if (description.hasBitmap) { + int index = Caches::getInstance().extensions.needsHighpTexCoords() ? 1 : 0; shader.append(description.isPoint ? - gVS_Header_Varyings_PointHasBitmap : - gVS_Header_Varyings_HasBitmap); + gVS_Header_Varyings_PointHasBitmap[index] : + gVS_Header_Varyings_HasBitmap[index]); } // Uniforms -- cgit v1.2.3-59-g8ed1b