Commit ad5c2952 by Nicolas Capens Committed by Nicolas Capens

Move ConvertReadFormatType to utilities.

Bug swiftshader:104 Change-Id: Ifcdffd3f960d7bb4982495381465da15ef671c3f Reviewed-on: https://swiftshader-review.googlesource.com/18429Reviewed-by: 's avatarAlexis Hétu <sugoi@google.com> Tested-by: 's avatarNicolas Capens <nicolascapens@google.com>
parent 838fe3db
...@@ -31,151 +31,6 @@ ...@@ -31,151 +31,6 @@
namespace gl namespace gl
{ {
sw::Format ConvertReadFormatType(GLenum format, GLenum type)
{
switch(format)
{
case GL_LUMINANCE:
switch(type)
{
case GL_UNSIGNED_BYTE: return sw::FORMAT_L8;
case GL_HALF_FLOAT: return sw::FORMAT_L16F;
case GL_HALF_FLOAT_OES: return sw::FORMAT_L16F;
case GL_FLOAT: return sw::FORMAT_L32F;
default: UNREACHABLE(type);
}
break;
case GL_LUMINANCE_ALPHA:
switch(type)
{
case GL_UNSIGNED_BYTE: return sw::FORMAT_A8L8;
case GL_HALF_FLOAT: return sw::FORMAT_A16L16F;
case GL_HALF_FLOAT_OES: return sw::FORMAT_A16L16F;
case GL_FLOAT: return sw::FORMAT_A32L32F;
default: UNREACHABLE(type);
}
break;
case GL_RGBA:
switch(type)
{
case GL_UNSIGNED_BYTE: return sw::FORMAT_A8B8G8R8;
case GL_UNSIGNED_SHORT_4_4_4_4: return sw::FORMAT_R4G4B4A4;
case GL_UNSIGNED_SHORT_5_5_5_1: return sw::FORMAT_R5G5B5A1;
case GL_HALF_FLOAT: return sw::FORMAT_A16B16G16R16F;
case GL_HALF_FLOAT_OES: return sw::FORMAT_A16B16G16R16F;
case GL_FLOAT: return sw::FORMAT_A32B32G32R32F;
case GL_UNSIGNED_INT_2_10_10_10_REV_EXT: return sw::FORMAT_A2B10G10R10;
default: UNREACHABLE(type);
}
break;
case GL_BGRA_EXT:
switch(type)
{
case GL_UNSIGNED_BYTE: return sw::FORMAT_A8R8G8B8;
case GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT: return sw::FORMAT_A4R4G4B4;
case GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT: return sw::FORMAT_A1R5G5B5;
default: UNREACHABLE(type);
}
break;
case GL_RGB:
switch(type)
{
case GL_UNSIGNED_BYTE: return sw::FORMAT_B8G8R8;
case GL_UNSIGNED_SHORT_5_6_5: return sw::FORMAT_R5G6B5;
case GL_HALF_FLOAT: return sw::FORMAT_B16G16R16F;
case GL_HALF_FLOAT_OES: return sw::FORMAT_B16G16R16F;
case GL_FLOAT: return sw::FORMAT_B32G32R32F;
default: UNREACHABLE(type);
}
break;
case GL_RG:
switch(type)
{
case GL_UNSIGNED_BYTE: return sw::FORMAT_G8R8;
case GL_HALF_FLOAT: return sw::FORMAT_G16R16F;
case GL_HALF_FLOAT_OES: return sw::FORMAT_G16R16F;
case GL_FLOAT: return sw::FORMAT_G32R32F;
default: UNREACHABLE(type);
}
break;
case GL_RED:
switch(type)
{
case GL_UNSIGNED_BYTE: return sw::FORMAT_R8;
case GL_HALF_FLOAT: return sw::FORMAT_R16F;
case GL_HALF_FLOAT_OES: return sw::FORMAT_R16F;
case GL_FLOAT: return sw::FORMAT_R32F;
default: UNREACHABLE(type);
}
break;
case GL_ALPHA:
switch(type)
{
case GL_UNSIGNED_BYTE: return sw::FORMAT_A8;
case GL_HALF_FLOAT: return sw::FORMAT_A16F;
case GL_HALF_FLOAT_OES: return sw::FORMAT_A16F;
case GL_FLOAT: return sw::FORMAT_A32F;
default: UNREACHABLE(type);
}
break;
case GL_RED_INTEGER:
switch(type)
{
case GL_INT: return sw::FORMAT_R32I;
case GL_UNSIGNED_INT: return sw::FORMAT_R32UI;
default: UNREACHABLE(type);
}
break;
case GL_RG_INTEGER:
switch(type)
{
case GL_INT: return sw::FORMAT_G32R32I;
case GL_UNSIGNED_INT: return sw::FORMAT_G32R32UI;
default: UNREACHABLE(type);
}
break;
case GL_RGB_INTEGER:
switch(type)
{
case GL_INT: return sw::FORMAT_X32B32G32R32I;
case GL_UNSIGNED_INT: return sw::FORMAT_X32B32G32R32UI;
default: UNREACHABLE(type);
}
break;
case GL_RGBA_INTEGER:
switch(type)
{
case GL_INT: return sw::FORMAT_A32B32G32R32I;
case GL_UNSIGNED_INT: return sw::FORMAT_A32B32G32R32UI;
case GL_UNSIGNED_INT_2_10_10_10_REV: return sw::FORMAT_A2B10G10R10UI;
default: UNREACHABLE(type);
}
break;
case GL_DEPTH_COMPONENT:
switch(type)
{
case GL_UNSIGNED_SHORT: return sw::FORMAT_D16;
case GL_UNSIGNED_INT_24_8_OES: return sw::FORMAT_D24X8;
case GL_FLOAT: return sw::FORMAT_D32F_LOCKABLE;
default: UNREACHABLE(type);
}
break;
case GL_STENCIL_INDEX_OES:
switch(type)
{
case GL_UNSIGNED_BYTE: return sw::FORMAT_S8;
default: UNREACHABLE(type);
}
break;
case GL_DEPTH_STENCIL_OES: // Cannot be read as one format. Handled separately.
default:
UNREACHABLE(format);
break;
}
return sw::FORMAT_NULL;
}
bool IsUnsizedInternalFormat(GLint internalformat) bool IsUnsizedInternalFormat(GLint internalformat)
{ {
switch(internalformat) switch(internalformat)
......
...@@ -53,7 +53,6 @@ struct PixelStorageModes ...@@ -53,7 +53,6 @@ struct PixelStorageModes
}; };
GLint GetSizedInternalFormat(GLint internalFormat, GLenum type); GLint GetSizedInternalFormat(GLint internalFormat, GLenum type);
sw::Format ConvertReadFormatType(GLenum format, GLenum type);
sw::Format SelectInternalFormat(GLint format); sw::Format SelectInternalFormat(GLint format);
bool IsUnsizedInternalFormat(GLint internalformat); bool IsUnsizedInternalFormat(GLint internalformat);
GLenum GetBaseInternalFormat(GLint internalformat); GLenum GetBaseInternalFormat(GLint internalformat);
......
...@@ -3345,7 +3345,7 @@ void Context::readPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum ...@@ -3345,7 +3345,7 @@ void Context::readPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum
if(format != GL_DEPTH_STENCIL_OES) // The blitter only handles reading either depth or stencil. if(format != GL_DEPTH_STENCIL_OES) // The blitter only handles reading either depth or stencil.
{ {
sw::Surface *externalSurface = sw::Surface::create(width, height, 1, gl::ConvertReadFormatType(format, type), pixels, outputPitch, outputPitch * outputHeight); sw::Surface *externalSurface = sw::Surface::create(width, height, 1, es2::ConvertReadFormatType(format, type), pixels, outputPitch, outputPitch * outputHeight);
device->blit(renderTarget, srcRect, externalSurface, dstRect, false, false, false); device->blit(renderTarget, srcRect, externalSurface, dstRect, false, false, false);
externalSurface->lockExternal(0, 0, 0, sw::LOCK_READONLY, sw::PUBLIC); externalSurface->lockExternal(0, 0, 0, sw::LOCK_READONLY, sw::PUBLIC);
externalSurface->unlockExternal(); externalSurface->unlockExternal();
......
...@@ -1245,6 +1245,151 @@ namespace es2 ...@@ -1245,6 +1245,151 @@ namespace es2
return 1; return 1;
} }
sw::Format ConvertReadFormatType(GLenum format, GLenum type)
{
switch(format)
{
case GL_LUMINANCE:
switch(type)
{
case GL_UNSIGNED_BYTE: return sw::FORMAT_L8;
case GL_HALF_FLOAT: return sw::FORMAT_L16F;
case GL_HALF_FLOAT_OES: return sw::FORMAT_L16F;
case GL_FLOAT: return sw::FORMAT_L32F;
default: UNREACHABLE(type);
}
break;
case GL_LUMINANCE_ALPHA:
switch(type)
{
case GL_UNSIGNED_BYTE: return sw::FORMAT_A8L8;
case GL_HALF_FLOAT: return sw::FORMAT_A16L16F;
case GL_HALF_FLOAT_OES: return sw::FORMAT_A16L16F;
case GL_FLOAT: return sw::FORMAT_A32L32F;
default: UNREACHABLE(type);
}
break;
case GL_RGBA:
switch(type)
{
case GL_UNSIGNED_BYTE: return sw::FORMAT_A8B8G8R8;
case GL_UNSIGNED_SHORT_4_4_4_4: return sw::FORMAT_R4G4B4A4;
case GL_UNSIGNED_SHORT_5_5_5_1: return sw::FORMAT_R5G5B5A1;
case GL_HALF_FLOAT: return sw::FORMAT_A16B16G16R16F;
case GL_HALF_FLOAT_OES: return sw::FORMAT_A16B16G16R16F;
case GL_FLOAT: return sw::FORMAT_A32B32G32R32F;
case GL_UNSIGNED_INT_2_10_10_10_REV_EXT: return sw::FORMAT_A2B10G10R10;
default: UNREACHABLE(type);
}
break;
case GL_BGRA_EXT:
switch(type)
{
case GL_UNSIGNED_BYTE: return sw::FORMAT_A8R8G8B8;
case GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT: return sw::FORMAT_A4R4G4B4;
case GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT: return sw::FORMAT_A1R5G5B5;
default: UNREACHABLE(type);
}
break;
case GL_RGB:
switch(type)
{
case GL_UNSIGNED_BYTE: return sw::FORMAT_B8G8R8;
case GL_UNSIGNED_SHORT_5_6_5: return sw::FORMAT_R5G6B5;
case GL_HALF_FLOAT: return sw::FORMAT_B16G16R16F;
case GL_HALF_FLOAT_OES: return sw::FORMAT_B16G16R16F;
case GL_FLOAT: return sw::FORMAT_B32G32R32F;
default: UNREACHABLE(type);
}
break;
case GL_RG:
switch(type)
{
case GL_UNSIGNED_BYTE: return sw::FORMAT_G8R8;
case GL_HALF_FLOAT: return sw::FORMAT_G16R16F;
case GL_HALF_FLOAT_OES: return sw::FORMAT_G16R16F;
case GL_FLOAT: return sw::FORMAT_G32R32F;
default: UNREACHABLE(type);
}
break;
case GL_RED:
switch(type)
{
case GL_UNSIGNED_BYTE: return sw::FORMAT_R8;
case GL_HALF_FLOAT: return sw::FORMAT_R16F;
case GL_HALF_FLOAT_OES: return sw::FORMAT_R16F;
case GL_FLOAT: return sw::FORMAT_R32F;
default: UNREACHABLE(type);
}
break;
case GL_ALPHA:
switch(type)
{
case GL_UNSIGNED_BYTE: return sw::FORMAT_A8;
case GL_HALF_FLOAT: return sw::FORMAT_A16F;
case GL_HALF_FLOAT_OES: return sw::FORMAT_A16F;
case GL_FLOAT: return sw::FORMAT_A32F;
default: UNREACHABLE(type);
}
break;
case GL_RED_INTEGER:
switch(type)
{
case GL_INT: return sw::FORMAT_R32I;
case GL_UNSIGNED_INT: return sw::FORMAT_R32UI;
default: UNREACHABLE(type);
}
break;
case GL_RG_INTEGER:
switch(type)
{
case GL_INT: return sw::FORMAT_G32R32I;
case GL_UNSIGNED_INT: return sw::FORMAT_G32R32UI;
default: UNREACHABLE(type);
}
break;
case GL_RGB_INTEGER:
switch(type)
{
case GL_INT: return sw::FORMAT_X32B32G32R32I;
case GL_UNSIGNED_INT: return sw::FORMAT_X32B32G32R32UI;
default: UNREACHABLE(type);
}
break;
case GL_RGBA_INTEGER:
switch(type)
{
case GL_INT: return sw::FORMAT_A32B32G32R32I;
case GL_UNSIGNED_INT: return sw::FORMAT_A32B32G32R32UI;
case GL_UNSIGNED_INT_2_10_10_10_REV: return sw::FORMAT_A2B10G10R10UI;
default: UNREACHABLE(type);
}
break;
case GL_DEPTH_COMPONENT:
switch(type)
{
case GL_UNSIGNED_SHORT: return sw::FORMAT_D16;
case GL_UNSIGNED_INT_24_8_OES: return sw::FORMAT_D24X8;
case GL_FLOAT: return sw::FORMAT_D32F_LOCKABLE;
default: UNREACHABLE(type);
}
break;
case GL_STENCIL_INDEX_OES:
switch(type)
{
case GL_UNSIGNED_BYTE: return sw::FORMAT_S8;
default: UNREACHABLE(type);
}
break;
case GL_DEPTH_STENCIL_OES: // Cannot be read as one format. Handled separately.
default:
UNREACHABLE(format);
break;
}
return sw::FORMAT_NULL;
}
bool IsColorRenderable(GLint internalformat) bool IsColorRenderable(GLint internalformat)
{ {
if(IsCompressed(internalformat)) if(IsCompressed(internalformat))
......
...@@ -59,6 +59,7 @@ namespace es2 ...@@ -59,6 +59,7 @@ namespace es2
bool IsTextureTarget(GLenum target); bool IsTextureTarget(GLenum target);
GLenum ValidateTextureFormatType(GLenum format, GLenum type, GLint internalformat, GLenum target); GLenum ValidateTextureFormatType(GLenum format, GLenum type, GLint internalformat, GLenum target);
size_t GetTypeSize(GLenum type); size_t GetTypeSize(GLenum type);
sw::Format ConvertReadFormatType(GLenum format, GLenum type);
bool IsColorRenderable(GLint internalformat); bool IsColorRenderable(GLint internalformat);
bool IsDepthRenderable(GLint internalformat); bool IsDepthRenderable(GLint internalformat);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment