mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-04-30 23:28:06 +02:00
mesa: hook up memory object multisamples tex(ture)storage api
V2 (Timothy): - error check memory == 0 before lookup Signed-off-by: Andres Rodriguez <andresx7@gmail.com> Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
This commit is contained in:
parent
fc790c50cc
commit
d0aac1b0aa
3 changed files with 103 additions and 28 deletions
|
|
@ -285,9 +285,24 @@ static void
|
|||
texstorage_memory_ms(GLuint dims, GLenum target, GLsizei samples,
|
||||
GLenum internalFormat, GLsizei width, GLsizei height,
|
||||
GLsizei depth, GLboolean fixedSampleLocations,
|
||||
GLuint memory, GLuint64 offset)
|
||||
GLuint memory, GLuint64 offset, const char* func)
|
||||
{
|
||||
struct gl_texture_object *texObj;
|
||||
struct gl_memory_object *memObj;
|
||||
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
texObj = _mesa_get_current_tex_object(ctx, target);
|
||||
if (!texObj)
|
||||
return;
|
||||
|
||||
memObj = lookup_memory_object_err(ctx, memory, func);
|
||||
if (!memObj)
|
||||
return;
|
||||
|
||||
_mesa_texture_storage_ms_memory(ctx, dims, texObj, memObj, target, samples,
|
||||
internalFormat, width, height, depth,
|
||||
fixedSampleLocations, offset, func);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -321,9 +336,24 @@ static void
|
|||
texturestorage_memory_ms(GLuint dims, GLuint texture, GLsizei samples,
|
||||
GLenum internalFormat, GLsizei width, GLsizei height,
|
||||
GLsizei depth, GLboolean fixedSampleLocations,
|
||||
GLuint memory, GLuint64 offset)
|
||||
GLuint memory, GLuint64 offset, const char* func)
|
||||
{
|
||||
struct gl_texture_object *texObj;
|
||||
struct gl_memory_object *memObj;
|
||||
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
texObj = _mesa_lookup_texture(ctx, texture);
|
||||
if (!texObj)
|
||||
return;
|
||||
|
||||
memObj = lookup_memory_object_err(ctx, memory, func);
|
||||
if (!memObj)
|
||||
return;
|
||||
|
||||
_mesa_texture_storage_ms_memory(ctx, dims, texObj, memObj, texObj->Target,
|
||||
samples, internalFormat, width, height,
|
||||
depth, fixedSampleLocations, offset, func);
|
||||
}
|
||||
|
||||
void GLAPIENTRY
|
||||
|
|
@ -350,7 +380,8 @@ _mesa_TexStorageMem2DMultisampleEXT(GLenum target,
|
|||
GLuint64 offset)
|
||||
{
|
||||
texstorage_memory_ms(2, target, samples, internalFormat, width, height, 1,
|
||||
fixedSampleLocations, memory, offset);
|
||||
fixedSampleLocations, memory, offset,
|
||||
"glTexStorageMem2DMultisampleEXT");
|
||||
}
|
||||
|
||||
void GLAPIENTRY
|
||||
|
|
@ -379,7 +410,8 @@ _mesa_TexStorageMem3DMultisampleEXT(GLenum target,
|
|||
GLuint64 offset)
|
||||
{
|
||||
texstorage_memory_ms(3, target, samples, internalFormat, width, height,
|
||||
depth, fixedSampleLocations, memory, offset);
|
||||
depth, fixedSampleLocations, memory, offset,
|
||||
"glTexStorageMem3DMultisampleEXT");
|
||||
}
|
||||
|
||||
void GLAPIENTRY
|
||||
|
|
@ -406,7 +438,8 @@ _mesa_TextureStorageMem2DMultisampleEXT(GLuint texture,
|
|||
GLuint64 offset)
|
||||
{
|
||||
texturestorage_memory_ms(2, texture, samples, internalFormat, width, height,
|
||||
1, fixedSampleLocations, memory, offset);
|
||||
1, fixedSampleLocations, memory, offset,
|
||||
"glTextureStorageMem2DMultisampleEXT");
|
||||
}
|
||||
|
||||
void GLAPIENTRY
|
||||
|
|
@ -435,7 +468,8 @@ _mesa_TextureStorageMem3DMultisampleEXT(GLuint texture,
|
|||
GLuint64 offset)
|
||||
{
|
||||
texturestorage_memory_ms(3, texture, samples, internalFormat, width, height,
|
||||
depth, fixedSampleLocations, memory, offset);
|
||||
depth, fixedSampleLocations, memory, offset,
|
||||
"glTextureStorageMem3DMultisampleEXT");
|
||||
}
|
||||
|
||||
void GLAPIENTRY
|
||||
|
|
|
|||
|
|
@ -5718,11 +5718,13 @@ check_multisample_target(GLuint dims, GLenum target, bool dsa)
|
|||
static void
|
||||
texture_image_multisample(struct gl_context *ctx, GLuint dims,
|
||||
struct gl_texture_object *texObj,
|
||||
struct gl_memory_object *memObj,
|
||||
GLenum target, GLsizei samples,
|
||||
GLint internalformat, GLsizei width,
|
||||
GLsizei height, GLsizei depth,
|
||||
GLboolean fixedsamplelocations,
|
||||
GLboolean immutable, const char *func)
|
||||
GLboolean immutable, GLuint64 offset,
|
||||
const char *func)
|
||||
{
|
||||
struct gl_texture_image *texImage;
|
||||
GLboolean sizeOK, dimensionsOK, samplesOK;
|
||||
|
|
@ -5859,14 +5861,25 @@ texture_image_multisample(struct gl_context *ctx, GLuint dims,
|
|||
samples, fixedsamplelocations);
|
||||
|
||||
if (width > 0 && height > 0 && depth > 0) {
|
||||
if (!ctx->Driver.AllocTextureStorage(ctx, texObj, 1,
|
||||
width, height, depth)) {
|
||||
/* tidy up the texture image state. strictly speaking,
|
||||
* we're allowed to just leave this in whatever state we
|
||||
* like, but being tidy is good.
|
||||
*/
|
||||
_mesa_init_teximage_fields(ctx, texImage,
|
||||
0, 0, 0, 0, internalformat, texFormat);
|
||||
if (memObj) {
|
||||
if (!ctx->Driver.SetTextureStorageForMemoryObject(ctx, texObj,
|
||||
memObj, 1, width,
|
||||
height, depth,
|
||||
offset)) {
|
||||
|
||||
_mesa_init_teximage_fields(ctx, texImage, 0, 0, 0, 0,
|
||||
internalformat, texFormat);
|
||||
}
|
||||
} else {
|
||||
if (!ctx->Driver.AllocTextureStorage(ctx, texObj, 1,
|
||||
width, height, depth)) {
|
||||
/* tidy up the texture image state. strictly speaking,
|
||||
* we're allowed to just leave this in whatever state we
|
||||
* like, but being tidy is good.
|
||||
*/
|
||||
_mesa_init_teximage_fields(ctx, texImage, 0, 0, 0, 0,
|
||||
internalformat, texFormat);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -5893,9 +5906,9 @@ _mesa_TexImage2DMultisample(GLenum target, GLsizei samples,
|
|||
if (!texObj)
|
||||
return;
|
||||
|
||||
texture_image_multisample(ctx, 2, texObj, target, samples,
|
||||
texture_image_multisample(ctx, 2, texObj, NULL, target, samples,
|
||||
internalformat, width, height, 1,
|
||||
fixedsamplelocations, GL_FALSE,
|
||||
fixedsamplelocations, GL_FALSE, 0,
|
||||
"glTexImage2DMultisample");
|
||||
}
|
||||
|
||||
|
|
@ -5913,9 +5926,9 @@ _mesa_TexImage3DMultisample(GLenum target, GLsizei samples,
|
|||
if (!texObj)
|
||||
return;
|
||||
|
||||
texture_image_multisample(ctx, 3, texObj, target, samples,
|
||||
texture_image_multisample(ctx, 3, texObj, NULL, target, samples,
|
||||
internalformat, width, height, depth,
|
||||
fixedsamplelocations, GL_FALSE,
|
||||
fixedsamplelocations, GL_FALSE, 0,
|
||||
"glTexImage3DMultisample");
|
||||
}
|
||||
|
||||
|
|
@ -5949,9 +5962,9 @@ _mesa_TexStorage2DMultisample(GLenum target, GLsizei samples,
|
|||
if (!valid_texstorage_ms_parameters(width, height, 1, samples, 2))
|
||||
return;
|
||||
|
||||
texture_image_multisample(ctx, 2, texObj, target, samples,
|
||||
texture_image_multisample(ctx, 2, texObj, NULL, target, samples,
|
||||
internalformat, width, height, 1,
|
||||
fixedsamplelocations, GL_TRUE,
|
||||
fixedsamplelocations, GL_TRUE, 0,
|
||||
"glTexStorage2DMultisample");
|
||||
}
|
||||
|
||||
|
|
@ -5971,9 +5984,9 @@ _mesa_TexStorage3DMultisample(GLenum target, GLsizei samples,
|
|||
if (!valid_texstorage_ms_parameters(width, height, depth, samples, 3))
|
||||
return;
|
||||
|
||||
texture_image_multisample(ctx, 3, texObj, target, samples,
|
||||
texture_image_multisample(ctx, 3, texObj, NULL, target, samples,
|
||||
internalformat, width, height, depth,
|
||||
fixedsamplelocations, GL_TRUE,
|
||||
fixedsamplelocations, GL_TRUE, 0,
|
||||
"glTexStorage3DMultisample");
|
||||
}
|
||||
|
||||
|
|
@ -5994,9 +6007,9 @@ _mesa_TextureStorage2DMultisample(GLuint texture, GLsizei samples,
|
|||
if (!valid_texstorage_ms_parameters(width, height, 1, samples, 2))
|
||||
return;
|
||||
|
||||
texture_image_multisample(ctx, 2, texObj, texObj->Target, samples,
|
||||
internalformat, width, height, 1,
|
||||
fixedsamplelocations, GL_TRUE,
|
||||
texture_image_multisample(ctx, 2, texObj, NULL, texObj->Target,
|
||||
samples, internalformat, width, height, 1,
|
||||
fixedsamplelocations, GL_TRUE, 0,
|
||||
"glTextureStorage2DMultisample");
|
||||
}
|
||||
|
||||
|
|
@ -6018,8 +6031,26 @@ _mesa_TextureStorage3DMultisample(GLuint texture, GLsizei samples,
|
|||
if (!valid_texstorage_ms_parameters(width, height, depth, samples, 3))
|
||||
return;
|
||||
|
||||
texture_image_multisample(ctx, 3, texObj, texObj->Target, samples,
|
||||
texture_image_multisample(ctx, 3, texObj, NULL, texObj->Target, samples,
|
||||
internalformat, width, height, depth,
|
||||
fixedsamplelocations, GL_TRUE,
|
||||
fixedsamplelocations, GL_TRUE, 0,
|
||||
"glTextureStorage3DMultisample");
|
||||
}
|
||||
|
||||
void
|
||||
_mesa_texture_storage_ms_memory(struct gl_context *ctx, GLuint dims,
|
||||
struct gl_texture_object *texObj,
|
||||
struct gl_memory_object *memObj,
|
||||
GLenum target, GLsizei samples,
|
||||
GLenum internalFormat, GLsizei width,
|
||||
GLsizei height, GLsizei depth,
|
||||
GLboolean fixedSampleLocations,
|
||||
GLuint64 offset, const char* func)
|
||||
{
|
||||
assert(memObj);
|
||||
|
||||
texture_image_multisample(ctx, dims, texObj, memObj, target, samples,
|
||||
internalFormat, width, height, depth,
|
||||
fixedSampleLocations, GL_TRUE, offset,
|
||||
func);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -228,6 +228,16 @@ _mesa_texture_sub_image(struct gl_context *ctx, GLuint dims,
|
|||
GLenum format, GLenum type, const GLvoid *pixels,
|
||||
bool dsa);
|
||||
|
||||
extern void
|
||||
_mesa_texture_storage_ms_memory(struct gl_context *ctx, GLuint dims,
|
||||
struct gl_texture_object *texObj,
|
||||
struct gl_memory_object *memObj,
|
||||
GLenum target, GLsizei samples,
|
||||
GLenum internalFormat, GLsizei width,
|
||||
GLsizei height, GLsizei depth,
|
||||
GLboolean fixedSampleLocations,
|
||||
GLuint64 offset, const char* func);
|
||||
|
||||
bool
|
||||
_mesa_is_cube_map_texture(GLenum target);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue