[Mesa-dev] [PATCH 33/41] main: Added entry points for glTextureStorage2DMultisample and glTextureStorage3DMultisample.
Laura Ekstrand
laura at jlekstrand.net
Mon Dec 15 17:22:48 PST 2014
---
src/mapi/glapi/gen/ARB_direct_state_access.xml | 19 ++++
src/mesa/main/teximage.c | 124 +++++++++++++++++++------
src/mesa/main/teximage.h | 20 ++++
3 files changed, 135 insertions(+), 28 deletions(-)
diff --git a/src/mapi/glapi/gen/ARB_direct_state_access.xml b/src/mapi/glapi/gen/ARB_direct_state_access.xml
index afc16ad..c48fb26 100644
--- a/src/mapi/glapi/gen/ARB_direct_state_access.xml
+++ b/src/mapi/glapi/gen/ARB_direct_state_access.xml
@@ -39,6 +39,25 @@
<param name="depth" type="GLsizei" />
</function>
+ <function name="TextureStorage2DMultisample" offset="assign">
+ <param name="texture" type="GLuint" />
+ <param name="samples" type="GLsizei" />
+ <param name="internalformat" type="GLenum" />
+ <param name="width" type="GLsizei" />
+ <param name="height" type="GLsizei" />
+ <param name="fixedsamplelocations" type="GLboolean" />
+ </function>
+
+ <function name="TextureStorage3DMultisample" offset="assign">
+ <param name="texture" type="GLuint" />
+ <param name="samples" type="GLsizei" />
+ <param name="internalformat" type="GLenum" />
+ <param name="width" type="GLsizei" />
+ <param name="height" type="GLsizei" />
+ <param name="depth" type="GLsizei" />
+ <param name="fixedsamplelocations" type="GLboolean" />
+ </function>
+
<function name="TextureSubImage1D" offset="assign">
<param name="texture" type="GLuint" />
<param name="level" type="GLint" />
diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c
index 444b8f9..fa1596d 100644
--- a/src/mesa/main/teximage.c
+++ b/src/mesa/main/teximage.c
@@ -5067,16 +5067,18 @@ is_renderable_texture_format(struct gl_context *ctx, GLenum internalformat)
/** GL_ARB_texture_multisample */
static GLboolean
-check_multisample_target(GLuint dims, GLenum target)
+check_multisample_target(GLuint dims, GLenum target, bool dsa)
{
switch(target) {
case GL_TEXTURE_2D_MULTISAMPLE:
- case GL_PROXY_TEXTURE_2D_MULTISAMPLE:
return dims == 2;
+ case GL_PROXY_TEXTURE_2D_MULTISAMPLE:
+ return dims == 2 && !dsa;
case GL_TEXTURE_2D_MULTISAMPLE_ARRAY:
- case GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY:
return dims == 3;
+ case GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY:
+ return dims == 3 && !dsa;
default:
return GL_FALSE;
@@ -5084,19 +5086,20 @@ check_multisample_target(GLuint dims, GLenum target)
}
-static void
-teximagemultisample(GLuint dims, GLenum target, GLsizei samples,
- GLint internalformat, GLsizei width, GLsizei height,
- GLsizei depth, GLboolean fixedsamplelocations,
- GLboolean immutable, const char *func)
+void
+_mesa_texture_image_multisample(struct gl_context *ctx, GLuint dims,
+ struct gl_texture_object *texObj,
+ GLenum target, GLsizei samples,
+ GLint internalformat, GLsizei width,
+ GLsizei height, GLsizei depth,
+ GLboolean fixedsamplelocations,
+ GLboolean immutable, const char *func)
{
- struct gl_texture_object *texObj;
struct gl_texture_image *texImage;
GLboolean sizeOK, dimensionsOK, samplesOK;
mesa_format texFormat;
GLenum sample_count_error;
-
- GET_CURRENT_CONTEXT(ctx);
+ bool dsa = strstr(func, "ture") ? true : false;
if (!(ctx->Extensions.ARB_texture_multisample
&& _mesa_is_desktop_gl(ctx))) {
@@ -5104,9 +5107,15 @@ teximagemultisample(GLuint dims, GLenum target, GLsizei samples,
return;
}
- if (!check_multisample_target(dims, target)) {
- _mesa_error(ctx, GL_INVALID_ENUM, "%s(target)", func);
- return;
+ if (!check_multisample_target(dims, target, dsa)) {
+ if (dsa) {
+ _mesa_error(ctx, GL_INVALID_OPERATION, "%s(target)", func);
+ return;
+ }
+ else {
+ _mesa_error(ctx, GL_INVALID_ENUM, "%s(target)", func);
+ return;
+ }
}
/* check that the specified internalformat is color/depth/stencil-renderable;
@@ -5144,8 +5153,6 @@ teximagemultisample(GLuint dims, GLenum target, GLsizei samples,
return;
}
- texObj = _mesa_get_current_tex_object(ctx, target);
-
if (immutable && (!texObj || (texObj->Name == 0))) {
_mesa_error(ctx, GL_INVALID_OPERATION,
"%s(texture object 0)",
@@ -5234,9 +5241,14 @@ _mesa_TexImage2DMultisample(GLenum target, GLsizei samples,
GLenum internalformat, GLsizei width,
GLsizei height, GLboolean fixedsamplelocations)
{
- teximagemultisample(2, target, samples, internalformat,
- width, height, 1, fixedsamplelocations, GL_FALSE,
- "glTexImage2DMultisample");
+ struct gl_texture_object *texObj;
+ GET_CURRENT_CONTEXT(ctx);
+ texObj = _mesa_get_current_tex_object(ctx, target);
+
+ _mesa_texture_image_multisample(ctx, 2, texObj, target, samples,
+ internalformat, width, height, 1,
+ fixedsamplelocations, GL_FALSE,
+ "glTexImage2DMultisample");
}
@@ -5246,9 +5258,14 @@ _mesa_TexImage3DMultisample(GLenum target, GLsizei samples,
GLsizei height, GLsizei depth,
GLboolean fixedsamplelocations)
{
- teximagemultisample(3, target, samples, internalformat,
- width, height, depth, fixedsamplelocations, GL_FALSE,
- "glTexImage3DMultisample");
+ struct gl_texture_object *texObj;
+ GET_CURRENT_CONTEXT(ctx);
+ texObj = _mesa_get_current_tex_object(ctx, target);
+
+ _mesa_texture_image_multisample(ctx, 3, texObj, target, samples,
+ internalformat, width, height, depth,
+ fixedsamplelocations, GL_FALSE,
+ "glTexImage3DMultisample");
}
@@ -5257,9 +5274,14 @@ _mesa_TexStorage2DMultisample(GLenum target, GLsizei samples,
GLenum internalformat, GLsizei width,
GLsizei height, GLboolean fixedsamplelocations)
{
- teximagemultisample(2, target, samples, internalformat,
- width, height, 1, fixedsamplelocations, GL_TRUE,
- "glTexStorage2DMultisample");
+ struct gl_texture_object *texObj;
+ GET_CURRENT_CONTEXT(ctx);
+ texObj = _mesa_get_current_tex_object(ctx, target);
+
+ _mesa_texture_image_multisample(ctx, 2, texObj, target, samples,
+ internalformat, width, height, 1,
+ fixedsamplelocations, GL_TRUE,
+ "glTexStorage2DMultisample");
}
void GLAPIENTRY
@@ -5268,7 +5290,53 @@ _mesa_TexStorage3DMultisample(GLenum target, GLsizei samples,
GLsizei height, GLsizei depth,
GLboolean fixedsamplelocations)
{
- teximagemultisample(3, target, samples, internalformat,
- width, height, depth, fixedsamplelocations, GL_TRUE,
- "glTexStorage3DMultisample");
+ struct gl_texture_object *texObj;
+ GET_CURRENT_CONTEXT(ctx);
+ texObj = _mesa_get_current_tex_object(ctx, target);
+
+ _mesa_texture_image_multisample(ctx, 3, texObj, target, samples,
+ internalformat, width, height, depth,
+ fixedsamplelocations, GL_TRUE,
+ "glTexStorage3DMultisample");
+}
+
+void GLAPIENTRY
+_mesa_TextureStorage2DMultisample(GLuint texture, GLsizei samples,
+ GLenum internalformat, GLsizei width,
+ GLsizei height,
+ GLboolean fixedsamplelocations)
+{
+ struct gl_texture_object *texObj;
+ GET_CURRENT_CONTEXT(ctx);
+
+ texObj = _mesa_lookup_texture_err(ctx, texture,
+ "glTextureStorage2DMultisample");
+ if (!texObj)
+ return;
+
+ _mesa_texture_image_multisample(ctx, 2, texObj, texObj->Target, samples,
+ internalformat, width, height, 1,
+ fixedsamplelocations, GL_TRUE,
+ "glTextureStorage2DMultisample");
+}
+
+void GLAPIENTRY
+_mesa_TextureStorage3DMultisample(GLuint texture, GLsizei samples,
+ GLenum internalformat, GLsizei width,
+ GLsizei height, GLsizei depth,
+ GLboolean fixedsamplelocations)
+{
+ struct gl_texture_object *texObj;
+ GET_CURRENT_CONTEXT(ctx);
+
+ /* Get the texture object by Name. */
+ texObj = _mesa_lookup_texture_err(ctx, texture,
+ "glTextureStorage3DMultisample");
+ if (!texObj)
+ return;
+
+ _mesa_texture_image_multisample(ctx, 3, texObj, texObj->Target, samples,
+ internalformat, width, height, depth,
+ fixedsamplelocations, GL_TRUE,
+ "glTextureStorage3DMultisample");
}
diff --git a/src/mesa/main/teximage.h b/src/mesa/main/teximage.h
index 01f37ad..0ab8af6 100644
--- a/src/mesa/main/teximage.h
+++ b/src/mesa/main/teximage.h
@@ -184,6 +184,15 @@ _mesa_copy_texture_sub_image( struct gl_context *ctx, GLuint dims,
GLint xoffset, GLint yoffset, GLint zoffset,
GLint x, GLint y,
GLsizei width, GLsizei height, bool dsa );
+
+extern void
+_mesa_texture_image_multisample(struct gl_context *ctx, GLuint dims,
+ struct gl_texture_object *texObj,
+ GLenum target, GLsizei samples,
+ GLint internalformat, GLsizei width,
+ GLsizei height, GLsizei depth,
+ GLboolean fixedsamplelocations,
+ GLboolean immutable, const char *func);
/*@}*/
@@ -399,6 +408,17 @@ _mesa_TexStorage3DMultisample(GLenum target, GLsizei samples,
GLsizei height, GLsizei depth,
GLboolean fixedsamplelocations);
+void GLAPIENTRY
+_mesa_TextureStorage2DMultisample(GLuint texture, GLsizei samples,
+ GLenum internalformat, GLsizei width,
+ GLsizei height,
+ GLboolean fixedsamplelocations);
+
+void GLAPIENTRY
+_mesa_TextureStorage3DMultisample(GLuint texture, GLsizei samples,
+ GLenum internalformat, GLsizei width,
+ GLsizei height, GLsizei depth,
+ GLboolean fixedsamplelocations);
/*@}*/
#ifdef __cplusplus
--
2.1.0
More information about the mesa-dev
mailing list