intel: fix the gen 11 compute shader scratch IDs
[mesa.git] / src / mesa / drivers / dri / radeon / radeon_texture.c
index 52cf95dffb8cf8c72e91016f92f39cebed1c9c4f..069edc93a42148a18c72dc17f263a7dce03f7a69 100644 (file)
@@ -41,7 +41,7 @@
 #include "main/texobj.h"
 #include "drivers/common/meta.h"
 
-#include "xmlpool.h"           /* for symbolic values of enum-type options */
+#include "util/xmlpool.h"              /* for symbolic values of enum-type options */
 
 #include "radeon_common.h"
 
@@ -213,7 +213,7 @@ radeon_unmap_texture_image(struct gl_context *ctx,
 }
 
 /* try to find a format which will only need a memcopy */
-static gl_format radeonChoose8888TexFormat(radeonContextPtr rmesa,
+static mesa_format radeonChoose8888TexFormat(radeonContextPtr rmesa,
                                           GLenum srcFormat,
                                           GLenum srcType, GLboolean fbo)
 {
@@ -224,25 +224,37 @@ static gl_format radeonChoose8888TexFormat(radeonContextPtr rmesa,
        const GLuint ui = 1;
        const GLubyte littleEndian = *((const GLubyte *)&ui);
 
-       if (fbo)
+
+       /* Unfortunately, regardless the fbo flag, we might still be asked to
+        * attach a texture to a fbo later, which then won't succeed if we chose
+        * one which isn't renderable. And unlike more exotic formats, apps aren't
+        * really prepared for the incomplete framebuffer this results in (they'd
+        * have to retry with same internalFormat even, just different
+        * srcFormat/srcType, which can't really be expected anyway).
+        * Ideally, we'd defer format selection until later (if the texture is
+        * used as a rt it's likely there's never data uploaded to it before attached
+        * to a fbo), but this isn't really possible, so for now just always use
+        * a renderable format.
+        */
+       if (1 || fbo)
                return _radeon_texformat_argb8888;
 
        if ((srcFormat == GL_RGBA && srcType == GL_UNSIGNED_INT_8_8_8_8) ||
            (srcFormat == GL_RGBA && srcType == GL_UNSIGNED_BYTE && !littleEndian) ||
            (srcFormat == GL_ABGR_EXT && srcType == GL_UNSIGNED_INT_8_8_8_8_REV) ||
            (srcFormat == GL_ABGR_EXT && srcType == GL_UNSIGNED_BYTE && littleEndian)) {
-               return MESA_FORMAT_RGBA8888;
+               return MESA_FORMAT_A8B8G8R8_UNORM;
        } else if ((srcFormat == GL_RGBA && srcType == GL_UNSIGNED_INT_8_8_8_8_REV) ||
                   (srcFormat == GL_RGBA && srcType == GL_UNSIGNED_BYTE && littleEndian) ||
                   (srcFormat == GL_ABGR_EXT && srcType == GL_UNSIGNED_INT_8_8_8_8) ||
                   (srcFormat == GL_ABGR_EXT && srcType == GL_UNSIGNED_BYTE && !littleEndian)) {
-               return MESA_FORMAT_RGBA8888_REV;
+               return MESA_FORMAT_R8G8B8A8_UNORM;
        } else
                return _radeon_texformat_argb8888;
 #endif
 }
 
-gl_format radeonChooseTextureFormat_mesa(struct gl_context * ctx,
+mesa_format radeonChooseTextureFormat_mesa(struct gl_context * ctx,
                                         GLenum target,
                                         GLint internalFormat,
                                         GLenum format,
@@ -252,7 +264,7 @@ gl_format radeonChooseTextureFormat_mesa(struct gl_context * ctx,
                                         type, 0);
 }
 
-gl_format radeonChooseTextureFormat(struct gl_context * ctx,
+mesa_format radeonChooseTextureFormat(struct gl_context * ctx,
                                    GLint internalFormat,
                                    GLenum format,
                                    GLenum type, GLboolean fbo)
@@ -267,8 +279,8 @@ gl_format radeonChooseTextureFormat(struct gl_context * ctx,
        radeon_print(RADEON_TEXTURE, RADEON_TRACE,
                "%s InternalFormat=%s(%d) type=%s format=%s\n",
                __func__,
-               _mesa_lookup_enum_by_nr(internalFormat), internalFormat,
-               _mesa_lookup_enum_by_nr(type), _mesa_lookup_enum_by_nr(format));
+               _mesa_enum_to_string(internalFormat), internalFormat,
+               _mesa_enum_to_string(type), _mesa_enum_to_string(format));
        radeon_print(RADEON_TEXTURE, RADEON_TRACE,
                        "%s do32bpt=%d force16bpt=%d\n",
                        __func__, do32bpt, force16bpt);
@@ -347,9 +359,9 @@ gl_format radeonChooseTextureFormat(struct gl_context * ctx,
 #if defined(RADEON_R200)
                /* r200: can't use a8 format since interpreting hw I8 as a8 would result
                   in wrong rgb values (same as alpha value instead of 0). */
-               return _radeon_texformat_al88;
+               return MESA_FORMAT_LA_UNORM8;
 #else
-               return MESA_FORMAT_A8;
+               return MESA_FORMAT_A_UNORM8;
 #endif
        case 1:
        case GL_LUMINANCE:
@@ -358,7 +370,7 @@ gl_format radeonChooseTextureFormat(struct gl_context * ctx,
        case GL_LUMINANCE12:
        case GL_LUMINANCE16:
        case GL_COMPRESSED_LUMINANCE:
-               return MESA_FORMAT_L8;
+               return MESA_FORMAT_L_UNORM8;
 
        case 2:
        case GL_LUMINANCE_ALPHA:
@@ -369,7 +381,7 @@ gl_format radeonChooseTextureFormat(struct gl_context * ctx,
        case GL_LUMINANCE12_ALPHA12:
        case GL_LUMINANCE16_ALPHA16:
        case GL_COMPRESSED_LUMINANCE_ALPHA:
-               return _radeon_texformat_al88;
+               return MESA_FORMAT_LA_UNORM8;
 
        case GL_INTENSITY:
        case GL_INTENSITY4:
@@ -377,7 +389,7 @@ gl_format radeonChooseTextureFormat(struct gl_context * ctx,
        case GL_INTENSITY12:
        case GL_INTENSITY16:
        case GL_COMPRESSED_INTENSITY:
-               return MESA_FORMAT_I8;
+               return MESA_FORMAT_I_UNORM8;
 
        case GL_YCBCR_MESA:
                if (type == GL_UNSIGNED_SHORT_8_8_APPLE ||
@@ -403,21 +415,21 @@ gl_format radeonChooseTextureFormat(struct gl_context * ctx,
                return MESA_FORMAT_RGBA_DXT5;
 
        case GL_ALPHA16F_ARB:
-               return MESA_FORMAT_ALPHA_FLOAT16;
+               return MESA_FORMAT_A_FLOAT16;
        case GL_ALPHA32F_ARB:
-               return MESA_FORMAT_ALPHA_FLOAT32;
+               return MESA_FORMAT_A_FLOAT32;
        case GL_LUMINANCE16F_ARB:
-               return MESA_FORMAT_LUMINANCE_FLOAT16;
+               return MESA_FORMAT_L_FLOAT16;
        case GL_LUMINANCE32F_ARB:
-               return MESA_FORMAT_LUMINANCE_FLOAT32;
+               return MESA_FORMAT_L_FLOAT32;
        case GL_LUMINANCE_ALPHA16F_ARB:
-               return MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16;
+               return MESA_FORMAT_LA_FLOAT16;
        case GL_LUMINANCE_ALPHA32F_ARB:
-               return MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32;
+               return MESA_FORMAT_LA_FLOAT32;
        case GL_INTENSITY16F_ARB:
-               return MESA_FORMAT_INTENSITY_FLOAT16;
+               return MESA_FORMAT_I_FLOAT16;
        case GL_INTENSITY32F_ARB:
-               return MESA_FORMAT_INTENSITY_FLOAT32;
+               return MESA_FORMAT_I_FLOAT32;
        case GL_RGB16F_ARB:
                return MESA_FORMAT_RGBA_FLOAT16;
        case GL_RGB32F_ARB:
@@ -433,7 +445,7 @@ gl_format radeonChooseTextureFormat(struct gl_context * ctx,
        case GL_DEPTH_COMPONENT32:
        case GL_DEPTH_STENCIL_EXT:
        case GL_DEPTH24_STENCIL8_EXT:
-               return MESA_FORMAT_S8_Z24;
+               return MESA_FORMAT_Z24_UNORM_S8_UINT;
 
        /* EXT_texture_sRGB */
        case GL_SRGB:
@@ -442,17 +454,17 @@ gl_format radeonChooseTextureFormat(struct gl_context * ctx,
        case GL_SRGB8_ALPHA8:
        case GL_COMPRESSED_SRGB:
        case GL_COMPRESSED_SRGB_ALPHA:
-               return MESA_FORMAT_SARGB8;
+               return MESA_FORMAT_B8G8R8A8_SRGB;
 
        case GL_SLUMINANCE:
        case GL_SLUMINANCE8:
        case GL_COMPRESSED_SLUMINANCE:
-               return MESA_FORMAT_SL8;
+               return MESA_FORMAT_L_SRGB8;
 
        case GL_SLUMINANCE_ALPHA:
        case GL_SLUMINANCE8_ALPHA8:
        case GL_COMPRESSED_SLUMINANCE_ALPHA:
-               return MESA_FORMAT_SLA8;
+      return MESA_FORMAT_LA_SRGB8;
 
        case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT:
                return MESA_FORMAT_SRGB_DXT1;
@@ -492,7 +504,7 @@ static void teximage_assign_miptree(radeonContextPtr rmesa,
                radeon_print(RADEON_TEXTURE, RADEON_NORMAL,
                             "%s: texObj %p, texImage %p, "
                                "texObj miptree doesn't match, allocated new miptree %p\n",
-                               __FUNCTION__, texObj, texImage, t->mt);
+                               __func__, texObj, texImage, t->mt);
        }
 
        /* Miptree alocation may have failed,
@@ -504,7 +516,7 @@ static void teximage_assign_miptree(radeonContextPtr rmesa,
                                "%s Failed to allocate miptree.\n", __func__);
 }
 
-unsigned radeonIsFormatRenderable(gl_format mesa_format)
+unsigned radeonIsFormatRenderable(mesa_format mesa_format)
 {
        if (mesa_format == _radeon_texformat_argb8888 || mesa_format == _radeon_texformat_rgb565 ||
                mesa_format == _radeon_texformat_argb1555 || mesa_format == _radeon_texformat_argb4444)
@@ -512,8 +524,8 @@ unsigned radeonIsFormatRenderable(gl_format mesa_format)
 
        switch (mesa_format)
        {
-               case MESA_FORMAT_Z16:
-               case MESA_FORMAT_S8_Z24:
+               case MESA_FORMAT_Z_UNORM16:
+               case MESA_FORMAT_Z24_UNORM_S8_UINT:
                        return 1;
                default:
                        return 0;
@@ -531,7 +543,7 @@ void radeon_image_target_texture_2d(struct gl_context *ctx, GLenum target,
        __DRIscreen *screen;
        __DRIimage *image;
 
-       screen = radeon->dri.screen;
+       screen = radeon->radeonScreen->driScreen;
        image = screen->dri2.image->lookupEGLImage(screen, image_handle,
                                                   screen->loaderPrivate);
        if (image == NULL)
@@ -579,34 +591,30 @@ void radeon_image_target_texture_2d(struct gl_context *ctx, GLenum target,
                fprintf(stderr, "miptree doesn't match image\n");
 }
 
-gl_format _radeon_texformat_rgba8888 = MESA_FORMAT_NONE;
-gl_format _radeon_texformat_argb8888 = MESA_FORMAT_NONE;
-gl_format _radeon_texformat_rgb565 = MESA_FORMAT_NONE;
-gl_format _radeon_texformat_argb4444 = MESA_FORMAT_NONE;
-gl_format _radeon_texformat_argb1555 = MESA_FORMAT_NONE;
-gl_format _radeon_texformat_al88 = MESA_FORMAT_NONE;
+mesa_format _radeon_texformat_rgba8888 = MESA_FORMAT_NONE;
+mesa_format _radeon_texformat_argb8888 = MESA_FORMAT_NONE;
+mesa_format _radeon_texformat_rgb565 = MESA_FORMAT_NONE;
+mesa_format _radeon_texformat_argb4444 = MESA_FORMAT_NONE;
+mesa_format _radeon_texformat_argb1555 = MESA_FORMAT_NONE;
 /*@}*/
 
 
 static void
 radeonInitTextureFormats(void)
 {
-   if (_mesa_little_endian()) {
-      _radeon_texformat_rgba8888       = MESA_FORMAT_RGBA8888;
-      _radeon_texformat_argb8888       = MESA_FORMAT_ARGB8888;
-      _radeon_texformat_rgb565         = MESA_FORMAT_RGB565;
-      _radeon_texformat_argb4444       = MESA_FORMAT_ARGB4444;
-      _radeon_texformat_argb1555       = MESA_FORMAT_ARGB1555;
-      _radeon_texformat_al88           = MESA_FORMAT_AL88;
-   }
-   else {
-      _radeon_texformat_rgba8888       = MESA_FORMAT_RGBA8888_REV;
-      _radeon_texformat_argb8888       = MESA_FORMAT_ARGB8888_REV;
-      _radeon_texformat_rgb565         = MESA_FORMAT_RGB565_REV;
-      _radeon_texformat_argb4444       = MESA_FORMAT_ARGB4444_REV;
-      _radeon_texformat_argb1555       = MESA_FORMAT_ARGB1555_REV;
-      _radeon_texformat_al88           = MESA_FORMAT_AL88_REV;
-   }
+#if UTIL_ARCH_LITTLE_ENDIAN
+   _radeon_texformat_rgba8888  = MESA_FORMAT_A8B8G8R8_UNORM;
+   _radeon_texformat_argb8888  = MESA_FORMAT_B8G8R8A8_UNORM;
+   _radeon_texformat_rgb565    = MESA_FORMAT_B5G6R5_UNORM;
+   _radeon_texformat_argb4444  = MESA_FORMAT_B4G4R4A4_UNORM;
+   _radeon_texformat_argb1555  = MESA_FORMAT_B5G5R5A1_UNORM;
+#else
+   _radeon_texformat_rgba8888  = MESA_FORMAT_R8G8B8A8_UNORM;
+   _radeon_texformat_argb8888  = MESA_FORMAT_A8R8G8B8_UNORM;
+   _radeon_texformat_rgb565    = MESA_FORMAT_R5G6B5_UNORM;
+   _radeon_texformat_argb4444  = MESA_FORMAT_A4R4G4B4_UNORM;
+   _radeon_texformat_argb1555  = MESA_FORMAT_A1R5G5B5_UNORM;
+#endif
 }
 
 void