mesa: add GL_OES_copy_image support
Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu> Reviewed-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
@@ -256,7 +256,7 @@ GLES3.2, GLSL ES 3.2
|
|||||||
GL_KHR_debug DONE (all drivers)
|
GL_KHR_debug DONE (all drivers)
|
||||||
GL_KHR_robustness not started (90% done with the ARB variant)
|
GL_KHR_robustness not started (90% done with the ARB variant)
|
||||||
GL_KHR_texture_compression_astc_ldr DONE (i965/gen9+)
|
GL_KHR_texture_compression_astc_ldr DONE (i965/gen9+)
|
||||||
GL_OES_copy_image not started (based on GL_ARB_copy_image, which is done for some drivers)
|
GL_OES_copy_image DONE (core only)
|
||||||
GL_OES_draw_buffers_indexed not started
|
GL_OES_draw_buffers_indexed not started
|
||||||
GL_OES_draw_elements_base_vertex DONE (all drivers)
|
GL_OES_draw_elements_base_vertex DONE (all drivers)
|
||||||
GL_OES_geometry_shader started (Marta)
|
GL_OES_geometry_shader started (Marta)
|
||||||
|
@@ -1013,6 +1013,28 @@
|
|||||||
|
|
||||||
</category>
|
</category>
|
||||||
|
|
||||||
|
<category name="GL_OES_copy_image" number="208">
|
||||||
|
|
||||||
|
<function name="CopyImageSubDataOES" alias="CopyImageSubData" es2="3.0">
|
||||||
|
<param name="srcName" type="GLuint"/>
|
||||||
|
<param name="srcTarget" type="GLenum"/>
|
||||||
|
<param name="srcLevel" type="GLint"/>
|
||||||
|
<param name="srcX" type="GLint"/>
|
||||||
|
<param name="srcY" type="GLint"/>
|
||||||
|
<param name="srcZ" type="GLint"/>
|
||||||
|
<param name="dstName" type="GLuint"/>
|
||||||
|
<param name="dstTarget" type="GLenum"/>
|
||||||
|
<param name="dstLevel" type="GLint"/>
|
||||||
|
<param name="dstX" type="GLint"/>
|
||||||
|
<param name="dstY" type="GLint"/>
|
||||||
|
<param name="dstZ" type="GLint"/>
|
||||||
|
<param name="srcWidth" type="GLsizei"/>
|
||||||
|
<param name="srcHeight" type="GLsizei"/>
|
||||||
|
<param name="srcDepth" type="GLsizei"/>
|
||||||
|
</function>
|
||||||
|
|
||||||
|
</category>
|
||||||
|
|
||||||
<!-- 175. GL_OES_geometry_shader -->
|
<!-- 175. GL_OES_geometry_shader -->
|
||||||
<category name="GL_OES_geometry_shader" number="210">
|
<category name="GL_OES_geometry_shader" number="210">
|
||||||
<enum name="GEOMETRY_SHADER_OES" value="0x8DD9"/>
|
<enum name="GEOMETRY_SHADER_OES" value="0x8DD9"/>
|
||||||
|
@@ -25,6 +25,7 @@
|
|||||||
* Jason Ekstrand <jason.ekstrand@intel.com>
|
* Jason Ekstrand <jason.ekstrand@intel.com>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "context.h"
|
||||||
#include "glheader.h"
|
#include "glheader.h"
|
||||||
#include "errors.h"
|
#include "errors.h"
|
||||||
#include "enums.h"
|
#include "enums.h"
|
||||||
@@ -360,8 +361,32 @@ compressed_format_compatible(const struct gl_context *ctx,
|
|||||||
case GL_COMPRESSED_SIGNED_RED_RGTC1:
|
case GL_COMPRESSED_SIGNED_RED_RGTC1:
|
||||||
compressedClass = BLOCK_CLASS_64_BITS;
|
compressedClass = BLOCK_CLASS_64_BITS;
|
||||||
break;
|
break;
|
||||||
|
case GL_COMPRESSED_RGBA8_ETC2_EAC:
|
||||||
|
case GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:
|
||||||
|
case GL_COMPRESSED_RG11_EAC:
|
||||||
|
case GL_COMPRESSED_SIGNED_RG11_EAC:
|
||||||
|
if (_mesa_is_gles(ctx))
|
||||||
|
compressedClass = BLOCK_CLASS_128_BITS;
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case GL_COMPRESSED_RGB8_ETC2:
|
||||||
|
case GL_COMPRESSED_SRGB8_ETC2:
|
||||||
|
case GL_COMPRESSED_R11_EAC:
|
||||||
|
case GL_COMPRESSED_SIGNED_R11_EAC:
|
||||||
|
case GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:
|
||||||
|
case GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:
|
||||||
|
if (_mesa_is_gles(ctx))
|
||||||
|
compressedClass = BLOCK_CLASS_64_BITS;
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
return false;
|
if (_mesa_is_gles(ctx) && _mesa_is_astc_format(compressedFormat))
|
||||||
|
compressedClass = BLOCK_CLASS_128_BITS;
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (otherFormat) {
|
switch (otherFormat) {
|
||||||
|
@@ -309,6 +309,7 @@ EXT(OES_blend_subtract , dummy_true
|
|||||||
EXT(OES_byte_coordinates , dummy_true , x , x , ES1, x , 2002)
|
EXT(OES_byte_coordinates , dummy_true , x , x , ES1, x , 2002)
|
||||||
EXT(OES_compressed_ETC1_RGB8_texture , OES_compressed_ETC1_RGB8_texture , x , x , ES1, ES2, 2005)
|
EXT(OES_compressed_ETC1_RGB8_texture , OES_compressed_ETC1_RGB8_texture , x , x , ES1, ES2, 2005)
|
||||||
EXT(OES_compressed_paletted_texture , dummy_true , x , x , ES1, x , 2003)
|
EXT(OES_compressed_paletted_texture , dummy_true , x , x , ES1, x , 2003)
|
||||||
|
EXT(OES_copy_image , OES_copy_image , x , x , x , 30, 2014)
|
||||||
EXT(OES_depth24 , dummy_true , x , x , ES1, ES2, 2005)
|
EXT(OES_depth24 , dummy_true , x , x , ES1, ES2, 2005)
|
||||||
EXT(OES_depth32 , dummy_false , x , x , x , x , 2005)
|
EXT(OES_depth32 , dummy_false , x , x , x , x , 2005)
|
||||||
EXT(OES_depth_texture , ARB_depth_texture , x , x , x , ES2, 2006)
|
EXT(OES_depth_texture , ARB_depth_texture , x , x , x , ES2, 2006)
|
||||||
|
@@ -3911,6 +3911,7 @@ struct gl_extensions
|
|||||||
GLboolean EXT_transform_feedback;
|
GLboolean EXT_transform_feedback;
|
||||||
GLboolean EXT_timer_query;
|
GLboolean EXT_timer_query;
|
||||||
GLboolean EXT_vertex_array_bgra;
|
GLboolean EXT_vertex_array_bgra;
|
||||||
|
GLboolean OES_copy_image;
|
||||||
GLboolean OES_sample_variables;
|
GLboolean OES_sample_variables;
|
||||||
GLboolean OES_standard_derivatives;
|
GLboolean OES_standard_derivatives;
|
||||||
GLboolean OES_texture_buffer;
|
GLboolean OES_texture_buffer;
|
||||||
|
@@ -2457,6 +2457,9 @@ const struct function gles3_functions_possible[] = {
|
|||||||
/* GL_OES_sample_shading */
|
/* GL_OES_sample_shading */
|
||||||
{ "glMinSampleShadingOES", 30, -1 },
|
{ "glMinSampleShadingOES", 30, -1 },
|
||||||
|
|
||||||
|
/* GL_OES_copy_image */
|
||||||
|
{ "glCopyImageSubDataOES", 30, -1 },
|
||||||
|
|
||||||
{ NULL, 0, -1 }
|
{ NULL, 0, -1 }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -82,6 +82,39 @@
|
|||||||
| | COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT |
|
| | COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT |
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#define VIEW_CLASS_GLES(x) (GL_VIEW_CLASS_BPTC_FLOAT + 1 + x)
|
||||||
|
#define VIEW_CLASS_EAC_R11 VIEW_CLASS_GLES(0)
|
||||||
|
#define VIEW_CLASS_EAC_RG11 VIEW_CLASS_GLES(1)
|
||||||
|
#define VIEW_CLASS_ETC2_RGB VIEW_CLASS_GLES(2)
|
||||||
|
#define VIEW_CLASS_ETC2_RGBA VIEW_CLASS_GLES(3)
|
||||||
|
#define VIEW_CLASS_ETC2_EAC_RGBA VIEW_CLASS_GLES(4)
|
||||||
|
#define VIEW_CLASS_ASTC_4x4_RGBA VIEW_CLASS_GLES(5)
|
||||||
|
#define VIEW_CLASS_ASTC_5x4_RGBA VIEW_CLASS_GLES(6)
|
||||||
|
#define VIEW_CLASS_ASTC_5x5_RGBA VIEW_CLASS_GLES(7)
|
||||||
|
#define VIEW_CLASS_ASTC_6x5_RGBA VIEW_CLASS_GLES(8)
|
||||||
|
#define VIEW_CLASS_ASTC_6x6_RGBA VIEW_CLASS_GLES(9)
|
||||||
|
#define VIEW_CLASS_ASTC_8x5_RGBA VIEW_CLASS_GLES(10)
|
||||||
|
#define VIEW_CLASS_ASTC_8x6_RGBA VIEW_CLASS_GLES(11)
|
||||||
|
#define VIEW_CLASS_ASTC_8x8_RGBA VIEW_CLASS_GLES(12)
|
||||||
|
#define VIEW_CLASS_ASTC_10x5_RGBA VIEW_CLASS_GLES(13)
|
||||||
|
#define VIEW_CLASS_ASTC_10x6_RGBA VIEW_CLASS_GLES(14)
|
||||||
|
#define VIEW_CLASS_ASTC_10x8_RGBA VIEW_CLASS_GLES(15)
|
||||||
|
#define VIEW_CLASS_ASTC_10x10_RGBA VIEW_CLASS_GLES(16)
|
||||||
|
#define VIEW_CLASS_ASTC_12x10_RGBA VIEW_CLASS_GLES(17)
|
||||||
|
#define VIEW_CLASS_ASTC_12x12_RGBA VIEW_CLASS_GLES(18)
|
||||||
|
#define VIEW_CLASS_ASTC_3x3x3_RGBA VIEW_CLASS_GLES(19)
|
||||||
|
#define VIEW_CLASS_ASTC_4x3x3_RGBA VIEW_CLASS_GLES(20)
|
||||||
|
#define VIEW_CLASS_ASTC_4x4x3_RGBA VIEW_CLASS_GLES(21)
|
||||||
|
#define VIEW_CLASS_ASTC_4x4x4_RGBA VIEW_CLASS_GLES(22)
|
||||||
|
#define VIEW_CLASS_ASTC_5x4x4_RGBA VIEW_CLASS_GLES(23)
|
||||||
|
#define VIEW_CLASS_ASTC_5x5x4_RGBA VIEW_CLASS_GLES(24)
|
||||||
|
#define VIEW_CLASS_ASTC_5x5x5_RGBA VIEW_CLASS_GLES(25)
|
||||||
|
#define VIEW_CLASS_ASTC_6x5x5_RGBA VIEW_CLASS_GLES(26)
|
||||||
|
#define VIEW_CLASS_ASTC_6x6x5_RGBA VIEW_CLASS_GLES(27)
|
||||||
|
#define VIEW_CLASS_ASTC_6x6x6_RGBA VIEW_CLASS_GLES(28)
|
||||||
|
|
||||||
|
|
||||||
struct internal_format_class_info {
|
struct internal_format_class_info {
|
||||||
GLenum view_class;
|
GLenum view_class;
|
||||||
GLenum internal_format;
|
GLenum internal_format;
|
||||||
@@ -162,6 +195,41 @@ static const struct internal_format_class_info s3tc_compatible_internal_formats[
|
|||||||
{GL_VIEW_CLASS_S3TC_DXT5_RGBA, GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT},
|
{GL_VIEW_CLASS_S3TC_DXT5_RGBA, GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const struct internal_format_class_info gles_etc2_compatible_internal_formats[] = {
|
||||||
|
{VIEW_CLASS_EAC_R11, GL_COMPRESSED_R11_EAC},
|
||||||
|
{VIEW_CLASS_EAC_R11, GL_COMPRESSED_SIGNED_R11_EAC},
|
||||||
|
{VIEW_CLASS_EAC_RG11, GL_COMPRESSED_RG11_EAC},
|
||||||
|
{VIEW_CLASS_EAC_RG11, GL_COMPRESSED_SIGNED_RG11_EAC},
|
||||||
|
{VIEW_CLASS_ETC2_RGB, GL_COMPRESSED_RGB8_ETC2},
|
||||||
|
{VIEW_CLASS_ETC2_RGB, GL_COMPRESSED_SRGB8_ETC2},
|
||||||
|
{VIEW_CLASS_ETC2_RGBA, GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2},
|
||||||
|
{VIEW_CLASS_ETC2_RGBA, GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2},
|
||||||
|
{VIEW_CLASS_ETC2_EAC_RGBA, GL_COMPRESSED_RGBA8_ETC2_EAC},
|
||||||
|
{VIEW_CLASS_ETC2_EAC_RGBA, GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC},
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct internal_format_class_info gles_astc_compatible_internal_formats[] = {
|
||||||
|
#define ASTC_FMT(size) \
|
||||||
|
{VIEW_CLASS_ASTC_##size## _RGBA, GL_COMPRESSED_RGBA_ASTC_##size##_KHR}, \
|
||||||
|
{VIEW_CLASS_ASTC_##size##_RGBA, GL_COMPRESSED_SRGB8_ALPHA8_ASTC_##size##_KHR}
|
||||||
|
|
||||||
|
ASTC_FMT(4x4),
|
||||||
|
ASTC_FMT(5x4),
|
||||||
|
ASTC_FMT(5x5),
|
||||||
|
ASTC_FMT(6x5),
|
||||||
|
ASTC_FMT(6x6),
|
||||||
|
ASTC_FMT(8x5),
|
||||||
|
ASTC_FMT(8x6),
|
||||||
|
ASTC_FMT(8x8),
|
||||||
|
ASTC_FMT(10x5),
|
||||||
|
ASTC_FMT(10x6),
|
||||||
|
ASTC_FMT(10x8),
|
||||||
|
ASTC_FMT(10x10),
|
||||||
|
ASTC_FMT(12x10),
|
||||||
|
ASTC_FMT(12x12),
|
||||||
|
#undef ASTC_FMT
|
||||||
|
};
|
||||||
|
|
||||||
GLenum
|
GLenum
|
||||||
_mesa_texture_view_lookup_view_class(const struct gl_context *ctx, GLenum internalformat)
|
_mesa_texture_view_lookup_view_class(const struct gl_context *ctx, GLenum internalformat)
|
||||||
{
|
{
|
||||||
@@ -180,6 +248,24 @@ _mesa_texture_view_lookup_view_class(const struct gl_context *ctx, GLenum intern
|
|||||||
return s3tc_compatible_internal_formats[i].view_class;
|
return s3tc_compatible_internal_formats[i].view_class;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (_mesa_is_gles3(ctx)) {
|
||||||
|
for (i = 0; i < ARRAY_SIZE(gles_etc2_compatible_internal_formats); i++) {
|
||||||
|
if (gles_etc2_compatible_internal_formats[i].internal_format
|
||||||
|
== internalformat)
|
||||||
|
return gles_etc2_compatible_internal_formats[i].view_class;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ctx->Extensions.KHR_texture_compression_astc_ldr) {
|
||||||
|
for (i = 0; i < ARRAY_SIZE(gles_astc_compatible_internal_formats); i++) {
|
||||||
|
if (gles_astc_compatible_internal_formats[i].internal_format
|
||||||
|
== internalformat)
|
||||||
|
return gles_astc_compatible_internal_formats[i].view_class;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* FINISHME: Add 3D OES formats when supported */
|
||||||
|
}
|
||||||
return GL_FALSE;
|
return GL_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -927,6 +927,17 @@ void st_init_extensions(struct pipe_screen *screen,
|
|||||||
extensions->OES_sample_variables = extensions->ARB_sample_shading &&
|
extensions->OES_sample_variables = extensions->ARB_sample_shading &&
|
||||||
extensions->ARB_gpu_shader5;
|
extensions->ARB_gpu_shader5;
|
||||||
|
|
||||||
|
/* If we don't have native ETC2 support, we don't keep track of the
|
||||||
|
* original ETC2 data. This is necessary to be able to copy images between
|
||||||
|
* compatible view classes.
|
||||||
|
*/
|
||||||
|
if (extensions->ARB_copy_image && screen->is_format_supported(
|
||||||
|
screen, PIPE_FORMAT_ETC2_RGB8,
|
||||||
|
PIPE_TEXTURE_2D, 0,
|
||||||
|
PIPE_BIND_SAMPLER_VIEW)) {
|
||||||
|
extensions->OES_copy_image = GL_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
/* Maximum sample count. */
|
/* Maximum sample count. */
|
||||||
{
|
{
|
||||||
enum pipe_format color_formats[] = {
|
enum pipe_format color_formats[] = {
|
||||||
|
Reference in New Issue
Block a user