mesa: pass gl_texture_object as arg to not depend on state

This will allow to use the same functions for EXT_dsa implementation.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
Pierre-Eric Pelloux-Prayer 2019-07-02 11:32:06 +02:00 committed by Marek Olšák
parent 0d8826f723
commit 9dd1f7cec0

View file

@ -1631,9 +1631,8 @@ legal_texsubimage_target(struct gl_context *ctx, GLuint dims, GLenum target,
* of GL_ARB_texture_storage/GL_ARB_bindless_texture). * of GL_ARB_texture_storage/GL_ARB_bindless_texture).
*/ */
static GLboolean static GLboolean
mutable_tex_object(struct gl_context *ctx, GLenum target) mutable_tex_object(struct gl_texture_object *texObj)
{ {
struct gl_texture_object *texObj = _mesa_get_current_tex_object(ctx, target);
if (!texObj) if (!texObj)
return GL_FALSE; return GL_FALSE;
@ -1821,6 +1820,7 @@ texture_format_error_check_gles(struct gl_context *ctx, GLenum format,
static GLboolean static GLboolean
texture_error_check( struct gl_context *ctx, texture_error_check( struct gl_context *ctx,
GLuint dimensions, GLenum target, GLuint dimensions, GLenum target,
struct gl_texture_object* texObj,
GLint level, GLint internalFormat, GLint level, GLint internalFormat,
GLenum format, GLenum type, GLenum format, GLenum type,
GLint width, GLint height, GLint width, GLint height,
@ -1983,7 +1983,7 @@ texture_error_check( struct gl_context *ctx,
return GL_TRUE; return GL_TRUE;
} }
if (!mutable_tex_object(ctx, target)) { if (!mutable_tex_object(texObj)) {
_mesa_error(ctx, GL_INVALID_OPERATION, _mesa_error(ctx, GL_INVALID_OPERATION,
"glTexImage%dD(immutable texture)", dimensions); "glTexImage%dD(immutable texture)", dimensions);
return GL_TRUE; return GL_TRUE;
@ -2002,8 +2002,8 @@ texture_error_check( struct gl_context *ctx,
*/ */
static GLenum static GLenum
compressed_texture_error_check(struct gl_context *ctx, GLint dimensions, compressed_texture_error_check(struct gl_context *ctx, GLint dimensions,
GLenum target, GLint level, GLenum target, struct gl_texture_object* texObj,
GLenum internalFormat, GLsizei width, GLint level, GLenum internalFormat, GLsizei width,
GLsizei height, GLsizei depth, GLint border, GLsizei height, GLsizei depth, GLint border,
GLsizei imageSize, const GLvoid *data) GLsizei imageSize, const GLvoid *data)
{ {
@ -2119,7 +2119,7 @@ compressed_texture_error_check(struct gl_context *ctx, GLint dimensions,
goto error; goto error;
} }
if (!mutable_tex_object(ctx, target)) { if (!mutable_tex_object(texObj)) {
reason = "immutable texture"; reason = "immutable texture";
error = GL_INVALID_OPERATION; error = GL_INVALID_OPERATION;
goto error; goto error;
@ -2275,8 +2275,8 @@ texsubimage_error_check(struct gl_context *ctx, GLuint dimensions,
*/ */
static GLboolean static GLboolean
copytexture_error_check( struct gl_context *ctx, GLuint dimensions, copytexture_error_check( struct gl_context *ctx, GLuint dimensions,
GLenum target, GLint level, GLint internalFormat, GLenum target, struct gl_texture_object* texObj,
GLint border ) GLint level, GLint internalFormat, GLint border )
{ {
GLint baseFormat; GLint baseFormat;
GLint rb_base_format; GLint rb_base_format;
@ -2520,7 +2520,7 @@ copytexture_error_check( struct gl_context *ctx, GLuint dimensions,
} }
} }
if (!mutable_tex_object(ctx, target)) { if (!mutable_tex_object(texObj)) {
_mesa_error(ctx, GL_INVALID_OPERATION, _mesa_error(ctx, GL_INVALID_OPERATION,
"glCopyTexImage%dD(immutable texture)", dimensions); "glCopyTexImage%dD(immutable texture)", dimensions);
return GL_TRUE; return GL_TRUE;
@ -2875,8 +2875,8 @@ strip_texture_border(GLenum target,
/** /**
* Common code to implement all the glTexImage1D/2D/3D functions * Common code to implement all the glTexImage1D/2D/3D functions,
* as well as glCompressedTexImage1D/2D/3D. * glCompressedTexImage1D/2D/3D and glTextureImage1D/2D/3DEXT
* \param compressed only GL_TRUE for glCompressedTexImage1D/2D/3D calls. * \param compressed only GL_TRUE for glCompressedTexImage1D/2D/3D calls.
* \param format the user's image format (only used if !compressed) * \param format the user's image format (only used if !compressed)
* \param type the user's image type (only used if !compressed) * \param type the user's image type (only used if !compressed)
@ -2884,6 +2884,7 @@ strip_texture_border(GLenum target,
*/ */
static ALWAYS_INLINE void static ALWAYS_INLINE void
teximage(struct gl_context *ctx, GLboolean compressed, GLuint dims, teximage(struct gl_context *ctx, GLboolean compressed, GLuint dims,
struct gl_texture_object *texObj,
GLenum target, GLint level, GLint internalFormat, GLenum target, GLint level, GLint internalFormat,
GLsizei width, GLsizei height, GLsizei depth, GLsizei width, GLsizei height, GLsizei depth,
GLint border, GLenum format, GLenum type, GLint border, GLenum format, GLenum type,
@ -2892,7 +2893,6 @@ teximage(struct gl_context *ctx, GLboolean compressed, GLuint dims,
const char *func = compressed ? "glCompressedTexImage" : "glTexImage"; const char *func = compressed ? "glCompressedTexImage" : "glTexImage";
struct gl_pixelstore_attrib unpack_no_border; struct gl_pixelstore_attrib unpack_no_border;
const struct gl_pixelstore_attrib *unpack = &ctx->Unpack; const struct gl_pixelstore_attrib *unpack = &ctx->Unpack;
struct gl_texture_object *texObj;
mesa_format texFormat; mesa_format texFormat;
bool dimensionsOK = true, sizeOK = true; bool dimensionsOK = true, sizeOK = true;
@ -2929,13 +2929,13 @@ teximage(struct gl_context *ctx, GLboolean compressed, GLuint dims,
/* general error checking */ /* general error checking */
if (compressed) { if (compressed) {
if (compressed_texture_error_check(ctx, dims, target, level, if (compressed_texture_error_check(ctx, dims, target, texObj,
internalFormat, level, internalFormat,
width, height, depth, width, height, depth,
border, imageSize, pixels)) border, imageSize, pixels))
return; return;
} else { } else {
if (texture_error_check(ctx, dims, target, level, internalFormat, if (texture_error_check(ctx, dims, target, texObj, level, internalFormat,
format, type, width, height, depth, border, format, type, width, height, depth, border,
pixels)) pixels))
return; return;
@ -2964,9 +2964,6 @@ teximage(struct gl_context *ctx, GLboolean compressed, GLuint dims,
} }
} }
texObj = _mesa_get_current_tex_object(ctx, target);
assert(texObj);
if (compressed) { if (compressed) {
/* For glCompressedTexImage() the driver has no choice about the /* For glCompressedTexImage() the driver has no choice about the
* texture format since we'll never transcode the user's compressed * texture format since we'll never transcode the user's compressed
@ -3103,7 +3100,10 @@ teximage_err(struct gl_context *ctx, GLboolean compressed, GLuint dims,
GLint border, GLenum format, GLenum type, GLint border, GLenum format, GLenum type,
GLsizei imageSize, const GLvoid *pixels) GLsizei imageSize, const GLvoid *pixels)
{ {
teximage(ctx, compressed, dims, target, level, internalFormat, width, height, struct gl_texture_object* texObj = _mesa_get_current_tex_object(ctx, target);
assert(texObj);
teximage(ctx, compressed, dims, texObj, target, level, internalFormat, width, height,
depth, border, format, type, imageSize, pixels, false); depth, border, format, type, imageSize, pixels, false);
} }
@ -3115,7 +3115,10 @@ teximage_no_error(struct gl_context *ctx, GLboolean compressed, GLuint dims,
GLint border, GLenum format, GLenum type, GLint border, GLenum format, GLenum type,
GLsizei imageSize, const GLvoid *pixels) GLsizei imageSize, const GLvoid *pixels)
{ {
teximage(ctx, compressed, dims, target, level, internalFormat, width, height, struct gl_texture_object* texObj = _mesa_get_current_tex_object(ctx, target);
assert(texObj);
teximage(ctx, compressed, dims, texObj, target, level, internalFormat, width, height,
depth, border, format, type, imageSize, pixels, true); depth, border, format, type, imageSize, pixels, true);
} }
@ -3975,13 +3978,12 @@ copy_texture_sub_image_no_error(struct gl_context *ctx, GLuint dims,
* Implement the glCopyTexImage1/2D() functions. * Implement the glCopyTexImage1/2D() functions.
*/ */
static ALWAYS_INLINE void static ALWAYS_INLINE void
copyteximage(struct gl_context *ctx, GLuint dims, copyteximage(struct gl_context *ctx, GLuint dims, struct gl_texture_object *texObj,
GLenum target, GLint level, GLenum internalFormat, GLenum target, GLint level, GLenum internalFormat,
GLint x, GLint y, GLsizei width, GLsizei height, GLint border, GLint x, GLint y, GLsizei width, GLsizei height, GLint border,
bool no_error) bool no_error)
{ {
struct gl_texture_image *texImage; struct gl_texture_image *texImage;
struct gl_texture_object *texObj;
mesa_format texFormat; mesa_format texFormat;
FLUSH_VERTICES(ctx, 0); FLUSH_VERTICES(ctx, 0);
@ -3997,8 +3999,8 @@ copyteximage(struct gl_context *ctx, GLuint dims,
_mesa_update_state(ctx); _mesa_update_state(ctx);
if (!no_error) { if (!no_error) {
if (copytexture_error_check(ctx, dims, target, level, internalFormat, if (copytexture_error_check(ctx, dims, target, texObj, level,
border)) internalFormat, border))
return; return;
if (!_mesa_legal_texture_dimensions(ctx, target, level, width, height, if (!_mesa_legal_texture_dimensions(ctx, target, level, width, height,
@ -4010,7 +4012,6 @@ copyteximage(struct gl_context *ctx, GLuint dims,
} }
} }
texObj = _mesa_get_current_tex_object(ctx, target);
assert(texObj); assert(texObj);
texFormat = _mesa_choose_texture_format(ctx, texObj, target, level, texFormat = _mesa_choose_texture_format(ctx, texObj, target, level,
@ -4137,11 +4138,13 @@ copyteximage(struct gl_context *ctx, GLuint dims,
static void static void
copyteximage_err(struct gl_context *ctx, GLuint dims, GLenum target, copyteximage_err(struct gl_context *ctx, GLuint dims,
GLenum target,
GLint level, GLenum internalFormat, GLint x, GLint y, GLint level, GLenum internalFormat, GLint x, GLint y,
GLsizei width, GLsizei height, GLint border) GLsizei width, GLsizei height, GLint border)
{ {
copyteximage(ctx, dims, target, level, internalFormat, x, y, width, height, struct gl_texture_object* texObj = _mesa_get_current_tex_object(ctx, target);
copyteximage(ctx, dims, texObj, target, level, internalFormat, x, y, width, height,
border, false); border, false);
} }
@ -4151,7 +4154,8 @@ copyteximage_no_error(struct gl_context *ctx, GLuint dims, GLenum target,
GLint level, GLenum internalFormat, GLint x, GLint y, GLint level, GLenum internalFormat, GLint x, GLint y,
GLsizei width, GLsizei height, GLint border) GLsizei width, GLsizei height, GLint border)
{ {
copyteximage(ctx, dims, target, level, internalFormat, x, y, width, height, struct gl_texture_object* texObj = _mesa_get_current_tex_object(ctx, target);
copyteximage(ctx, dims, texObj, target, level, internalFormat, x, y, width, height,
border, true); border, true);
} }