On 20/03/15 19:23, Laura Ekstrand wrote:
On Thu, Mar 19, 2015 at 11:13 AM, Martin Peres
<martin.pe...@linux.intel.com <mailto:martin.pe...@linux.intel.com>>
wrote:
v2: Review from Laura Ekstrand
- get rid of a change that should not have happened in this patch
- improve the error messages
- fix alignments
- fix a capitalization in a function name in an error message
Signed-off-by: Martin Peres <martin.pe...@linux.intel.com
<mailto:martin.pe...@linux.intel.com>>
---
src/mapi/glapi/gen/ARB_direct_state_access.xml | 15 +++
src/mesa/main/fbobject.c | 161
++++++++++++++++++-------
src/mesa/main/fbobject.h | 13 +-
src/mesa/main/tests/dispatch_sanity.cpp | 2 +
4 files changed, 148 insertions(+), 43 deletions(-)
diff --git a/src/mapi/glapi/gen/ARB_direct_state_access.xml
b/src/mapi/glapi/gen/ARB_direct_state_access.xml
index d4e1f7c..8a092d6 100644
--- a/src/mapi/glapi/gen/ARB_direct_state_access.xml
+++ b/src/mapi/glapi/gen/ARB_direct_state_access.xml
@@ -159,6 +159,21 @@
<param name="renderbuffers" type="GLuint *" />
</function>
+ <function name="NamedRenderbufferStorage" offset="assign">
+ <param name="renderbuffer" type="GLuint" />
+ <param name="internalformat" type="GLenum" />
+ <param name="width" type="GLsizei" />
+ <param name="height" type="GLsizei" />
+ </function>
+
+ <function name="NamedRenderbufferStorageMultisample"
offset="assign">
+ <param name="renderbuffer" type="GLuint" />
+ <param name="samples" type="GLsizei" />
+ <param name="internalformat" type="GLenum" />
+ <param name="width" type="GLsizei" />
+ <param name="height" type="GLsizei" />
+ </function>
+
<function name="GetNamedRenderbufferParameteriv" offset="assign">
<param name="renderbuffer" type="GLuint" />
<param name="pname" type="GLenum" />
diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c
index ae0dd76..fc76c4a 100644
--- a/src/mesa/main/fbobject.c
+++ b/src/mesa/main/fbobject.c
@@ -1785,40 +1785,17 @@ invalidate_rb(GLuint key, void *data, void
*userData)
/**
- * Helper function used by _mesa_RenderbufferStorage() and
- * _mesa_RenderbufferStorageMultisample().
- * samples will be NO_SAMPLES if called by
_mesa_RenderbufferStorage().
+ * Helper function used by renderbuffer_storage_direct() and
+ * renderbuffer_storage_target().
+ * samples will be NO_SAMPLES if called by a non-multisample
function.
*/
static void
-renderbuffer_storage(GLenum target, GLenum internalFormat,
- GLsizei width, GLsizei height, GLsizei samples)
+renderbuffer_storage(struct gl_context *ctx, struct
gl_renderbuffer *rb,
+ GLenum internalFormat, GLsizei width,
+ GLsizei height, GLsizei samples, const char
*func)
{
- const char *func = samples == NO_SAMPLES ?
- "glRenderbufferStorage" : "glRenderbufferStorageMultisample";
- struct gl_renderbuffer *rb;
GLenum baseFormat;
GLenum sample_count_error;
- GET_CURRENT_CONTEXT(ctx);
-
- if (MESA_VERBOSE & VERBOSE_API) {
- if (samples == NO_SAMPLES)
- _mesa_debug(ctx, "%s(%s, %s, %d, %d)\n",
- func,
- _mesa_lookup_enum_by_nr(target),
- _mesa_lookup_enum_by_nr(internalFormat),
- width, height);
- else
- _mesa_debug(ctx, "%s(%s, %s, %d, %d, %d)\n",
- func,
- _mesa_lookup_enum_by_nr(target),
- _mesa_lookup_enum_by_nr(internalFormat),
- width, height, samples);
- }
-
- if (target != GL_RENDERBUFFER_EXT) {
- _mesa_error(ctx, GL_INVALID_ENUM, "%s(target)", func);
- return;
- }
baseFormat = _mesa_base_fbo_format(ctx, internalFormat);
if (baseFormat == 0) {
@@ -1828,12 +1805,14 @@ renderbuffer_storage(GLenum target, GLenum
internalFormat,
}
if (width < 0 || width > (GLsizei)
ctx->Const.MaxRenderbufferSize) {
- _mesa_error(ctx, GL_INVALID_VALUE, "%s(width)", func);
+ _mesa_error(ctx, GL_INVALID_VALUE, "%s(invalid width %d)",
func,
+ width);
return;
}
if (height < 0 || height > (GLsizei)
ctx->Const.MaxRenderbufferSize) {
- _mesa_error(ctx, GL_INVALID_VALUE, "%s(height)", func);
+ _mesa_error(ctx, GL_INVALID_VALUE, "%s(invalid height %d)",
func,
+ height);
return;
}
@@ -1845,7 +1824,7 @@ renderbuffer_storage(GLenum target, GLenum
internalFormat,
/* check the sample count;
* note: driver may choose to use more samples than what's
requested
*/
- sample_count_error = _mesa_check_sample_count(ctx, target,
+ sample_count_error = _mesa_check_sample_count(ctx,
GL_RENDERBUFFER,
internalFormat, samples);
if (sample_count_error != GL_NO_ERROR) {
_mesa_error(ctx, sample_count_error, "%s(samples)", func);
@@ -1853,7 +1832,6 @@ renderbuffer_storage(GLenum target, GLenum
internalFormat,
}
}
- rb = ctx->CurrentRenderbuffer;
I would move this check up into renderbuffer_storage_target and
renderbuffer_storage_named since you can customize it to those
functions. Also, I think it makes more sense to check this right away
before passing it into another function. (Unless order of checking
matters a lot for this entry point.)
Indeed, that allows to have a better error message. Done.
if (!rb) {
_mesa_error(ctx, GL_INVALID_OPERATION, "%s", func);
return;
@@ -1900,6 +1878,75 @@ renderbuffer_storage(GLenum target, GLenum
internalFormat,
}
}
+/**
+ * Helper function used by _mesa_NamedRenderbufferStorage*().
+ * samples will be NO_SAMPLES if called by a non-multisample
function.
+ */
+static void
+renderbuffer_storage_named(GLuint renderbuffer, GLenum
internalFormat,
+ GLsizei width, GLsizei height, GLsizei
samples,
+ const char *func)
+{
+ GET_CURRENT_CONTEXT(ctx);
+
+ if (MESA_VERBOSE & VERBOSE_API) {
+ if (samples == NO_SAMPLES)
+ _mesa_debug(ctx, "%s(%u, %s, %d, %d)\n",
+ func, renderbuffer,
+ _mesa_lookup_enum_by_nr(internalFormat),
+ width, height);
+ else
+ _mesa_debug(ctx, "%s(%u, %s, %d, %d, %d)\n",
+ func, renderbuffer,
+ _mesa_lookup_enum_by_nr(internalFormat),
+ width, height, samples);
+ }
+
+ struct gl_renderbuffer *rb = _mesa_lookup_renderbuffer(ctx,
renderbuffer);
+ if (rb == &DummyRenderbuffer) {
+ /* ID was reserved, but no real renderbuffer object made yet */
+ rb = NULL;
+ }
+
+ renderbuffer_storage(ctx, rb, internalFormat, width, height,
samples, func);
+}
+
+/**
+ * Helper function used by _mesa_RenderbufferStorage() and
+ * _mesa_RenderbufferStorageMultisample().
+ * samples will be NO_SAMPLES if called by
_mesa_RenderbufferStorage().
+ */
+static void
+renderbuffer_storage_target(GLenum target, GLenum internalFormat,
+ GLsizei width, GLsizei height,
GLsizei samples,
+ const char *func)
+{
+ GET_CURRENT_CONTEXT(ctx);
+
+ if (MESA_VERBOSE & VERBOSE_API) {
+ if (samples == NO_SAMPLES)
+ _mesa_debug(ctx, "%s(%s, %s, %d, %d)\n",
+ func,
+ _mesa_lookup_enum_by_nr(target),
+ _mesa_lookup_enum_by_nr(internalFormat),
+ width, height);
+ else
+ _mesa_debug(ctx, "%s(%s, %s, %d, %d, %d)\n",
+ func,
+ _mesa_lookup_enum_by_nr(target),
+ _mesa_lookup_enum_by_nr(internalFormat),
+ width, height, samples);
+ }
+
+ if (target != GL_RENDERBUFFER_EXT) {
+ _mesa_error(ctx, GL_INVALID_ENUM, "%s(target)", func);
+ return;
+ }
+
+ renderbuffer_storage(ctx, ctx->CurrentRenderbuffer,
internalFormat, width,
+ height, samples, func);
+}
+
void GLAPIENTRY
_mesa_EGLImageTargetRenderbufferStorageOES(GLenum target,
GLeglImageOES image)
@@ -1959,7 +2006,8 @@ _mesa_RenderbufferStorage(GLenum target,
GLenum internalFormat,
* glRenderbufferStorageMultisample() with samples=0. We pass in
* a token value here just for error reporting purposes.
*/
- renderbuffer_storage(target, internalFormat, width, height,
NO_SAMPLES);
+ renderbuffer_storage_target(target, internalFormat, width, height,
+ NO_SAMPLES, "glRenderbufferStorage");
}
@@ -1968,10 +2016,10 @@
_mesa_RenderbufferStorageMultisample(GLenum target, GLsizei samples,
GLenum internalFormat,
GLsizei width, GLsizei height)
{
- renderbuffer_storage(target, internalFormat, width, height,
samples);
+ renderbuffer_storage_target(target, internalFormat, width, height,
+ samples,
"glRenderbufferStorageMultisample");
}
-
/**
* OpenGL ES version of glRenderBufferStorage.
*/
@@ -1989,7 +2037,30 @@ _es_RenderbufferStorageEXT(GLenum target,
GLenum internalFormat,
break;
}
- renderbuffer_storage(target, internalFormat, width, height, 0);
+ renderbuffer_storage_target(target, internalFormat, width,
height, 0,
+ "glRenderbufferStorageEXT");
+}
+
+void GLAPIENTRY
+_mesa_NamedRenderbufferStorage(GLuint renderbuffer, GLenum
internalformat,
+ GLsizei width, GLsizei height)
+{
+ /* GL_ARB_fbo says calling this function is equivalent to calling
+ * glRenderbufferStorageMultisample() with samples=0. We pass in
+ * a token value here just for error reporting purposes.
+ */
+ renderbuffer_storage_named(renderbuffer, internalformat,
width, height,
+ NO_SAMPLES,
"glNamedRenderbufferStorage");
+}
+
+void GLAPIENTRY
+_mesa_NamedRenderbufferStorageMultisample(GLuint renderbuffer,
GLsizei samples,
+ GLenum internalformat,
+ GLsizei width, GLsizei
height)
+{
+ renderbuffer_storage_named(renderbuffer, internalformat,
width, height,
+ samples,
+ "glNamedRenderbufferStorageMultisample");
}
These changes to render buffer parameteriv don't look like they belong
in this commit. Perhaps you meant to put them in your render buffer
parameteriv commit and they slipped in here?
Yep, that's what happens when you edit the wrong line in rebase -i ...
@@ -2000,10 +2071,6 @@ get_render_buffer_parameteriv(struct
gl_context *ctx,
{
const char *func = dsa ? "glGetNamedRenderbufferParameteriv" :
"glGetRenderbufferParameteriv";
- if (!rb) {
- _mesa_error(ctx, GL_INVALID_OPERATION, "%s", func);
- return;
- }
/* No need to flush here since we're just quering state which is
* not effected by rendering.
@@ -2053,6 +2120,12 @@ _mesa_GetRenderbufferParameteriv(GLenum
target, GLenum pname, GLint *params)
return;
}
+ if (!ctx->CurrentRenderbuffer) {
+ _mesa_error(ctx, GL_INVALID_OPERATION,
"glGetRenderbufferParameteriv"
+ "(invalid renderbuffer)");
+ return;
+ }
+
get_render_buffer_parameteriv(ctx, ctx->CurrentRenderbuffer,
pname,
params, false);
}
@@ -2070,6 +2143,12 @@
_mesa_GetNamedRenderbufferParameteriv(GLuint renderbuffer, GLenum
pname,
rb = NULL;
}
+ if (!rb) {
+ _mesa_error(ctx, GL_INVALID_OPERATION,
"glGetNamedRenderbufferParameteriv"
+ "(invalid renderbuffer name %i)", renderbuffer);
+ return;
+ }
+
get_render_buffer_parameteriv(ctx, rb, pname, params, true);
}
diff --git a/src/mesa/main/fbobject.h b/src/mesa/main/fbobject.h
index b92149b..2c5273f 100644
--- a/src/mesa/main/fbobject.h
+++ b/src/mesa/main/fbobject.h
@@ -128,14 +128,23 @@ _mesa_RenderbufferStorageMultisample(GLenum
target, GLsizei samples,
extern void GLAPIENTRY
_es_RenderbufferStorageEXT(GLenum target, GLenum internalFormat,
- GLsizei width, GLsizei height);
Other people frown on changing other function prototypes in new entry
point commits. "It's not part of this commit." I don't think it's a
big deal, though, so I'll leave it up to you whether you get rid of
this or not. It's a nice cleanup.
Got rid of it, it was my IDE who replaced the tabs by spaces.
+ GLsizei width, GLsizei height);
+
+extern void GLAPIENTRY
+_mesa_NamedRenderbufferStorage(GLuint renderbuffer, GLenum
internalformat,
+ GLsizei width, GLsizei height);
+
+extern void GLAPIENTRY
+_mesa_NamedRenderbufferStorageMultisample(GLuint renderbuffer,
GLsizei samples,
+ GLenum internalformat,
+ GLsizei width, GLsizei
height);
extern void GLAPIENTRY
_mesa_EGLImageTargetRenderbufferStorageOES(GLenum target,
GLeglImageOES image);
extern void GLAPIENTRY
_mesa_GetRenderbufferParameteriv(GLenum target, GLenum pname,
- GLint *params);
See above comment.
Fallout of the same problem as before, I edited the wrong line in rebase
-i. I'll pay more attention to that from now on.
I will resend patches 15 and 16 as soon as jenkins tells me I did not
introduce any regression.
+ GLint *params);
void GLAPIENTRY
_mesa_GetNamedRenderbufferParameteriv(GLuint renderbuffer, GLenum
pname,
diff --git a/src/mesa/main/tests/dispatch_sanity.cpp
b/src/mesa/main/tests/dispatch_sanity.cpp
index bb573d4..eb83e4d 100644
--- a/src/mesa/main/tests/dispatch_sanity.cpp
+++ b/src/mesa/main/tests/dispatch_sanity.cpp
@@ -944,6 +944,8 @@ const struct function
gl_core_functions_possible[] = {
{ "glGetNamedBufferPointerv", 45, -1 },
{ "glGetNamedBufferSubData", 45, -1 },
{ "glCreateRenderbuffers", 45, -1 },
+ { "glNamedRenderbufferStorage", 45, -1 },
+ { "glNamedRenderbufferStorageMultisample", 45, -1 },
{ "glGetNamedRenderbufferParameteriv", 45, -1 },
{ "glCreateTextures", 45, -1 },
{ "glTextureStorage1D", 45, -1 },
--
2.3.3
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org <mailto:mesa-dev@lists.freedesktop.org>
http://lists.freedesktop.org/mailman/listinfo/mesa-dev
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev