mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-22 22:10:10 +01:00
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:
parent
0d8826f723
commit
9dd1f7cec0
1 changed files with 32 additions and 28 deletions
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue