Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2788)

Unified Diff: Source/platform/graphics/gpu/WebGLImageConversion.cpp

Issue 1190423002: Upgrade WebGLImageConversion to ES3: Part II. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/platform/graphics/gpu/WebGLImageConversion.cpp
diff --git a/Source/platform/graphics/gpu/WebGLImageConversion.cpp b/Source/platform/graphics/gpu/WebGLImageConversion.cpp
index d1906366ee7d12f765ec231812eb1de147dc444f..a6945a308bda089d5125772fdde273f12256c0c6 100644
--- a/Source/platform/graphics/gpu/WebGLImageConversion.cpp
+++ b/Source/platform/graphics/gpu/WebGLImageConversion.cpp
@@ -536,6 +536,12 @@ template<> void unpack<WebGLImageConversion::DataFormatRA32F, float, float>(cons
}
}
+template<> void unpack<WebGLImageConversion::DataFormatRGBA2_10_10_10, uint32_t, uint16_t>(const uint32_t* source, uint16_t* destination, unsigned pixelsPerRow)
+{
+ // FIXME: Implement this.
+ ASSERT_NOT_REACHED();
+}
+
//----------------------------------------------------------------------
// Pixel packing routines.
//
@@ -664,12 +670,6 @@ template<> void pack<WebGLImageConversion::DataFormatRGB8, WebGLImageConversion:
}
}
-
-template<> void pack<WebGLImageConversion::DataFormatRGBA8, WebGLImageConversion::AlphaDoNothing, uint8_t, uint8_t>(const uint8_t* source, uint8_t* destination, unsigned pixelsPerRow)
-{
- memcpy(destination, source, pixelsPerRow * 4);
-}
-
template<> void pack<WebGLImageConversion::DataFormatRGBA8, WebGLImageConversion::AlphaDoPremultiply, uint8_t, uint8_t>(const uint8_t* source, uint8_t* destination, unsigned pixelsPerRow)
{
for (unsigned i = 0; i < pixelsPerRow; ++i) {
@@ -879,12 +879,6 @@ template<> void pack<WebGLImageConversion::DataFormatRGB32F, WebGLImageConversio
}
}
-// Used only during RGBA8 or BGRA8 -> floating-point uploads.
-template<> void pack<WebGLImageConversion::DataFormatRGBA32F, WebGLImageConversion::AlphaDoNothing, float, float>(const float* source, float* destination, unsigned pixelsPerRow)
-{
- memcpy(destination, source, pixelsPerRow * 4 * sizeof(float));
-}
-
template<> void pack<WebGLImageConversion::DataFormatRGBA32F, WebGLImageConversion::AlphaDoPremultiply, float, float>(const float* source, float* destination, unsigned pixelsPerRow)
{
for (unsigned i = 0; i < pixelsPerRow; ++i) {
@@ -1124,6 +1118,160 @@ template<> void pack<WebGLImageConversion::DataFormatA16F, WebGLImageConversion:
}
}
+template<> void pack<WebGLImageConversion::DataFormatRGBA8_S, WebGLImageConversion::AlphaDoPremultiply, int8_t, int8_t>(const int8_t* source, int8_t* destination, unsigned pixelsPerRow)
+{
+ // FIXME: Implement this.
+ ASSERT_NOT_REACHED();
+}
+
+// FIXME: this routine is lossy and must be removed.
+template<> void pack<WebGLImageConversion::DataFormatRGBA8_S, WebGLImageConversion::AlphaDoUnmultiply, int8_t, int8_t>(const int8_t* source, int8_t* destination, unsigned pixelsPerRow)
Ken Russell (switch to Gerrit) 2015/06/20 02:42:23 The only situation where un-multiplication is need
Zhenyao Mo 2015/06/23 19:12:00 Agree. Will revise in a followup.
+{
+ // FIXME: Implement this.
+ ASSERT_NOT_REACHED();
+}
+
+template<> void pack<WebGLImageConversion::DataFormatRGBA16, WebGLImageConversion::AlphaDoPremultiply, uint16_t, uint16_t>(const uint16_t* source, uint16_t* destination, unsigned pixelsPerRow)
+{
+ // FIXME: Implement this.
+ ASSERT_NOT_REACHED();
+}
+
+// FIXME: this routine is lossy and must be removed.
+template<> void pack<WebGLImageConversion::DataFormatRGBA16, WebGLImageConversion::AlphaDoUnmultiply, uint16_t, uint16_t>(const uint16_t* source, uint16_t* destination, unsigned pixelsPerRow)
+{
+ // FIXME: Implement this.
+ ASSERT_NOT_REACHED();
+}
+
+template<> void pack<WebGLImageConversion::DataFormatRGBA16_S, WebGLImageConversion::AlphaDoPremultiply, int16_t, int16_t>(const int16_t* source, int16_t* destination, unsigned pixelsPerRow)
+{
+ // FIXME: Implement this.
+ ASSERT_NOT_REACHED();
+}
+
+// FIXME: this routine is lossy and must be removed.
+template<> void pack<WebGLImageConversion::DataFormatRGBA16_S, WebGLImageConversion::AlphaDoUnmultiply, int16_t, int16_t>(const int16_t* source, int16_t* destination, unsigned pixelsPerRow)
+{
+ // FIXME: Implement this.
+ ASSERT_NOT_REACHED();
+}
+
+template<> void pack<WebGLImageConversion::DataFormatRGBA32, WebGLImageConversion::AlphaDoPremultiply, uint32_t, uint32_t>(const uint32_t* source, uint32_t* destination, unsigned pixelsPerRow)
+{
+ // FIXME: Implement this.
+ ASSERT_NOT_REACHED();
+}
+
+// FIXME: this routine is lossy and must be removed.
+template<> void pack<WebGLImageConversion::DataFormatRGBA32, WebGLImageConversion::AlphaDoUnmultiply, uint32_t, uint32_t>(const uint32_t* source, uint32_t* destination, unsigned pixelsPerRow)
+{
+ // FIXME: Implement this.
+ ASSERT_NOT_REACHED();
+}
+
+template<> void pack<WebGLImageConversion::DataFormatRGBA32_S, WebGLImageConversion::AlphaDoPremultiply, int32_t, int32_t>(const int32_t* source, int32_t* destination, unsigned pixelsPerRow)
+{
+ // FIXME: Implement this.
+ ASSERT_NOT_REACHED();
+}
+
+// FIXME: this routine is lossy and must be removed.
+template<> void pack<WebGLImageConversion::DataFormatRGBA32_S, WebGLImageConversion::AlphaDoUnmultiply, int32_t, int32_t>(const int32_t* source, int32_t* destination, unsigned pixelsPerRow)
+{
+ // FIXME: Implement this.
+ ASSERT_NOT_REACHED();
+}
+
+template<> void pack<WebGLImageConversion::DataFormatRGBA2_10_10_10, WebGLImageConversion::AlphaDoPremultiply, uint16_t, uint32_t>(const uint16_t* source, uint32_t* destination, unsigned pixelsPerRow)
+{
+ // FIXME: Implement this.
+ ASSERT_NOT_REACHED();
+}
+
+// FIXME: this routine is lossy and must be removed.
+template<> void pack<WebGLImageConversion::DataFormatRGBA2_10_10_10, WebGLImageConversion::AlphaDoUnmultiply, uint16_t, uint32_t>(const uint16_t* source, uint32_t* destination, unsigned pixelsPerRow)
+{
+ // FIXME: Implement this.
+ ASSERT_NOT_REACHED();
+}
+
+template<> void pack<WebGLImageConversion::DataFormatRGB10F11F11F, WebGLImageConversion::AlphaDoNothing, float, uint32_t>(const float* source, uint32_t* destination, unsigned pixelsPerRow)
+{
+ // FIXME: Implement this.
+ ASSERT_NOT_REACHED();
+}
+
+template<> void pack<WebGLImageConversion::DataFormatRGB10F11F11F, WebGLImageConversion::AlphaDoPremultiply, float, uint32_t>(const float* source, uint32_t* destination, unsigned pixelsPerRow)
+{
+ // FIXME: Implement this.
+ ASSERT_NOT_REACHED();
+}
+
+// FIXME: this routine is lossy and must be removed.
+template<> void pack<WebGLImageConversion::DataFormatRGB10F11F11F, WebGLImageConversion::AlphaDoUnmultiply, float, uint32_t>(const float* source, uint32_t* destination, unsigned pixelsPerRow)
+{
+ // FIXME: Implement this.
+ ASSERT_NOT_REACHED();
+}
+
+template<> void pack<WebGLImageConversion::DataFormatRG8, WebGLImageConversion::AlphaDoNothing, uint8_t, uint8_t>(const uint8_t* source, uint8_t* destination, unsigned pixelsPerRow)
+{
+ // FIXME: Implement this.
+ ASSERT_NOT_REACHED();
+}
+
+template<> void pack<WebGLImageConversion::DataFormatRG8, WebGLImageConversion::AlphaDoPremultiply, uint8_t, uint8_t>(const uint8_t* source, uint8_t* destination, unsigned pixelsPerRow)
+{
+ // FIXME: Implement this.
+ ASSERT_NOT_REACHED();
+}
+
+// FIXME: this routine is lossy and must be removed.
+template<> void pack<WebGLImageConversion::DataFormatRG8, WebGLImageConversion::AlphaDoUnmultiply, uint8_t, uint8_t>(const uint8_t* source, uint8_t* destination, unsigned pixelsPerRow)
+{
+ // FIXME: Implement this.
+ ASSERT_NOT_REACHED();
+}
+
+template<> void pack<WebGLImageConversion::DataFormatRG16F, WebGLImageConversion::AlphaDoNothing, float, uint16_t>(const float* source, uint16_t* destination, unsigned pixelsPerRow)
+{
+ // FIXME: Implement this.
+ ASSERT_NOT_REACHED();
+}
+
+template<> void pack<WebGLImageConversion::DataFormatRG16F, WebGLImageConversion::AlphaDoPremultiply, float, uint16_t>(const float* source, uint16_t* destination, unsigned pixelsPerRow)
+{
+ // FIXME: Implement this.
+ ASSERT_NOT_REACHED();
+}
+
+// FIXME: this routine is lossy and must be removed.
+template<> void pack<WebGLImageConversion::DataFormatRG16F, WebGLImageConversion::AlphaDoUnmultiply, float, uint16_t>(const float* source, uint16_t* destination, unsigned pixelsPerRow)
+{
+ // FIXME: Implement this.
+ ASSERT_NOT_REACHED();
+}
+
+template<> void pack<WebGLImageConversion::DataFormatRG32F, WebGLImageConversion::AlphaDoNothing, float, float>(const float* source, float* destination, unsigned pixelsPerRow)
+{
+ // FIXME: Implement this.
+ ASSERT_NOT_REACHED();
+}
+
+template<> void pack<WebGLImageConversion::DataFormatRG32F, WebGLImageConversion::AlphaDoPremultiply, float, float>(const float* source, float* destination, unsigned pixelsPerRow)
+{
+ // FIXME: Implement this.
+ ASSERT_NOT_REACHED();
+}
+
+// FIXME: this routine is lossy and must be removed.
+template<> void pack<WebGLImageConversion::DataFormatRG32F, WebGLImageConversion::AlphaDoUnmultiply, float, float>(const float* source, float* destination, unsigned pixelsPerRow)
+{
+ // FIXME: Implement this.
+ ASSERT_NOT_REACHED();
+}
+
bool HasAlpha(int format)
{
return format == WebGLImageConversion::DataFormatA8
@@ -1503,6 +1651,7 @@ void FormatConverter::convert(WebGLImageConversion::DataFormat srcFormat, WebGLI
FORMATCONVERTER_CASE_SRCFORMAT(WebGLImageConversion::DataFormatRGBA5551)
FORMATCONVERTER_CASE_SRCFORMAT(WebGLImageConversion::DataFormatRGBA4444)
FORMATCONVERTER_CASE_SRCFORMAT(WebGLImageConversion::DataFormatRGBA32F)
+ FORMATCONVERTER_CASE_SRCFORMAT(WebGLImageConversion::DataFormatRGBA2_10_10_10)
default:
ASSERT_NOT_REACHED();
}
@@ -1535,6 +1684,16 @@ void FormatConverter::convert(WebGLImageConversion::DataFormat dstFormat, WebGLI
FORMATCONVERTER_CASE_DSTFORMAT(WebGLImageConversion::DataFormatRGBA4444)
FORMATCONVERTER_CASE_DSTFORMAT(WebGLImageConversion::DataFormatRGBA16F)
FORMATCONVERTER_CASE_DSTFORMAT(WebGLImageConversion::DataFormatRGBA32F)
+ FORMATCONVERTER_CASE_DSTFORMAT(WebGLImageConversion::DataFormatRGBA8_S)
+ FORMATCONVERTER_CASE_DSTFORMAT(WebGLImageConversion::DataFormatRGBA16)
+ FORMATCONVERTER_CASE_DSTFORMAT(WebGLImageConversion::DataFormatRGBA16_S)
+ FORMATCONVERTER_CASE_DSTFORMAT(WebGLImageConversion::DataFormatRGBA32)
+ FORMATCONVERTER_CASE_DSTFORMAT(WebGLImageConversion::DataFormatRGBA32_S)
+ FORMATCONVERTER_CASE_DSTFORMAT(WebGLImageConversion::DataFormatRGBA2_10_10_10)
+ FORMATCONVERTER_CASE_DSTFORMAT(WebGLImageConversion::DataFormatRGB10F11F11F)
+ FORMATCONVERTER_CASE_DSTFORMAT(WebGLImageConversion::DataFormatRG8)
+ FORMATCONVERTER_CASE_DSTFORMAT(WebGLImageConversion::DataFormatRG16F)
+ FORMATCONVERTER_CASE_DSTFORMAT(WebGLImageConversion::DataFormatRG32F)
default:
ASSERT_NOT_REACHED();
}
@@ -1596,7 +1755,7 @@ void FormatConverter::convert()
const ptrdiff_t srcStrideInElements = m_srcStride / sizeof(SrcType);
const ptrdiff_t dstStrideInElements = m_dstStride / sizeof(DstType);
const bool trivialUnpack = SrcFormat == IntermFormat;
- const bool trivialPack = DstFormat == IntermFormat && alphaOp == WebGLImageConversion::AlphaDoNothing && m_dstStride > 0;
+ const bool trivialPack = DstFormat == IntermFormat && alphaOp == WebGLImageConversion::AlphaDoNothing;
ASSERT(!trivialUnpack || !trivialPack);
const SrcType *srcRowStart = static_cast<const SrcType*>(m_srcStart);
@@ -1998,7 +2157,7 @@ bool WebGLImageConversion::packPixels(
DataFormat dstDataFormat = getDataFormat(destinationFormat, destinationType);
int dstStride = width * TexelBytesForFormat(dstDataFormat);
if (flipY) {
- destinationData = static_cast<uint8_t*>(destinationData) + dstStride*(height - 1);
+ destinationData = static_cast<uint8_t*>(destinationData) + dstStride * (height - 1);
dstStride = -dstStride;
}
if (!HasAlpha(sourceDataFormat) || !HasColor(sourceDataFormat) || !HasColor(dstDataFormat))
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698