diff options
author | marha <marha@users.sourceforge.net> | 2014-08-30 13:45:43 +0200 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2014-08-30 13:45:43 +0200 |
commit | 3293021e6f582c7348667e7638941620134525e1 (patch) | |
tree | 5d8d3da8242ff7828fb6964bed19b13d74d48704 /mesalib/src/mesa | |
parent | 0a9ab140bb01b96888e313466a73e26e5156f22d (diff) | |
parent | e21655632e3fd40b7f6a5cc3c7f3c379d54557c4 (diff) | |
download | vcxsrv-3293021e6f582c7348667e7638941620134525e1.tar.gz vcxsrv-3293021e6f582c7348667e7638941620134525e1.tar.bz2 vcxsrv-3293021e6f582c7348667e7638941620134525e1.zip |
Merge remote-tracking branch 'origin/released'
Conflicts:
xorg-server/hw/kdrive/ephyr/ephyrinit.c
Diffstat (limited to 'mesalib/src/mesa')
-rw-r--r-- | mesalib/src/mesa/main/context.c | 3 | ||||
-rw-r--r-- | mesalib/src/mesa/main/get_hash_params.py | 3 | ||||
-rw-r--r-- | mesalib/src/mesa/main/mtypes.h | 6 | ||||
-rw-r--r-- | mesalib/src/mesa/main/texobj.c | 16 | ||||
-rw-r--r-- | mesalib/src/mesa/main/varray.c | 22 | ||||
-rw-r--r-- | mesalib/src/mesa/program/program.c | 2 | ||||
-rw-r--r-- | mesalib/src/mesa/state_tracker/st_extensions.c | 3 |
7 files changed, 44 insertions, 11 deletions
diff --git a/mesalib/src/mesa/main/context.c b/mesalib/src/mesa/main/context.c index 232084267..fbdbd680a 100644 --- a/mesalib/src/mesa/main/context.c +++ b/mesalib/src/mesa/main/context.c @@ -670,6 +670,9 @@ _mesa_init_constants(struct gl_constants *consts, gl_api api) ? GL_CONTEXT_CORE_PROFILE_BIT : GL_CONTEXT_COMPATIBILITY_PROFILE_BIT; + /* GL 4.4 */ + consts->MaxVertexAttribStride = 2048; + /** GL_EXT_gpu_shader4 */ consts->MinProgramTexelOffset = -8; consts->MaxProgramTexelOffset = 7; diff --git a/mesalib/src/mesa/main/get_hash_params.py b/mesalib/src/mesa/main/get_hash_params.py index ff858207b..aace8a5b5 100644 --- a/mesalib/src/mesa/main/get_hash_params.py +++ b/mesalib/src/mesa/main/get_hash_params.py @@ -712,6 +712,9 @@ descriptor=[ [ "MAX_GEOMETRY_INPUT_COMPONENTS", "CONTEXT_INT(Const.Program[MESA_SHADER_GEOMETRY].MaxInputComponents), extra_version_32" ], [ "MAX_GEOMETRY_OUTPUT_COMPONENTS", "CONTEXT_INT(Const.Program[MESA_SHADER_GEOMETRY].MaxOutputComponents), extra_version_32" ], +# GL 4.4 + [ "MAX_VERTEX_ATTRIB_STRIDE", "CONTEXT_ENUM(Const.MaxVertexAttribStride), NO_EXTRA" ], + # GL_ARB_robustness [ "RESET_NOTIFICATION_STRATEGY_ARB", "CONTEXT_ENUM(Const.ResetStrategy), NO_EXTRA" ], diff --git a/mesalib/src/mesa/main/mtypes.h b/mesalib/src/mesa/main/mtypes.h index cb2a4df4f..dc25ea467 100644 --- a/mesalib/src/mesa/main/mtypes.h +++ b/mesalib/src/mesa/main/mtypes.h @@ -2317,9 +2317,6 @@ struct gl_geometry_program_state struct gl_geometry_program *_Current; GLfloat Parameters[MAX_PROGRAM_ENV_PARAMS][4]; /**< Env params */ - - /** Cache of fixed-function programs */ - struct gl_program_cache *Cache; }; /** @@ -3414,6 +3411,9 @@ struct gl_constants /** OpenGL version 3.2 */ GLbitfield ProfileMask; /**< Mask of CONTEXT_x_PROFILE_BIT */ + /** OpenGL version 4.4 */ + GLuint MaxVertexAttribStride; + /** GL_EXT_transform_feedback */ GLuint MaxTransformFeedbackBuffers; GLuint MaxTransformFeedbackSeparateComponents; diff --git a/mesalib/src/mesa/main/texobj.c b/mesalib/src/mesa/main/texobj.c index 2a82c2d4e..923cf60d7 100644 --- a/mesalib/src/mesa/main/texobj.c +++ b/mesalib/src/mesa/main/texobj.c @@ -772,18 +772,21 @@ _mesa_get_fallback_texture(struct gl_context *ctx, gl_texture_index tex) { if (!ctx->Shared->FallbackTex[tex]) { /* create fallback texture now */ - const GLsizei width = 1, height = 1, depth = 1; - GLubyte texel[4]; + const GLsizei width = 1, height = 1; + GLsizei depth = 1; + GLubyte texel[24]; struct gl_texture_object *texObj; struct gl_texture_image *texImage; mesa_format texFormat; GLuint dims, face, numFaces = 1; GLenum target; - texel[0] = - texel[1] = - texel[2] = 0x0; - texel[3] = 0xff; + for (face = 0; face < 6; face++) { + texel[4*face + 0] = + texel[4*face + 1] = + texel[4*face + 2] = 0x0; + texel[4*face + 3] = 0xff; + } switch (tex) { case TEXTURE_2D_ARRAY_INDEX: @@ -822,6 +825,7 @@ _mesa_get_fallback_texture(struct gl_context *ctx, gl_texture_index tex) case TEXTURE_CUBE_ARRAY_INDEX: dims = 3; target = GL_TEXTURE_CUBE_MAP_ARRAY; + depth = 6; break; case TEXTURE_EXTERNAL_INDEX: dims = 2; diff --git a/mesalib/src/mesa/main/varray.c b/mesalib/src/mesa/main/varray.c index 5d3cc2a70..7d169f9d4 100644 --- a/mesalib/src/mesa/main/varray.c +++ b/mesalib/src/mesa/main/varray.c @@ -424,6 +424,13 @@ update_array(struct gl_context *ctx, return; } + if (ctx->API == API_OPENGL_CORE && ctx->Version >= 44 && + stride > ctx->Const.MaxVertexAttribStride) { + _mesa_error(ctx, GL_INVALID_VALUE, "%s(stride=%d > " + "GL_MAX_VERTEX_ATTRIB_STRIDE)", func, stride); + return; + } + /* Page 29 (page 44 of the PDF) of the OpenGL 3.3 spec says: * * "An INVALID_OPERATION error is generated under any of the following @@ -1437,6 +1444,13 @@ _mesa_BindVertexBuffer(GLuint bindingIndex, GLuint buffer, GLintptr offset, return; } + if (ctx->API == API_OPENGL_CORE && ctx->Version >= 44 && + stride > ctx->Const.MaxVertexAttribStride) { + _mesa_error(ctx, GL_INVALID_VALUE, "glBindVertexBuffer(stride=%d > " + "GL_MAX_VERTEX_ATTRIB_STRIDE)", stride); + return; + } + if (buffer == vao->VertexBinding[VERT_ATTRIB_GENERIC(bindingIndex)].BufferObj->Name) { vbo = vao->VertexBinding[VERT_ATTRIB_GENERIC(bindingIndex)].BufferObj; } else if (buffer != 0) { @@ -1565,6 +1579,14 @@ _mesa_BindVertexBuffers(GLuint first, GLsizei count, const GLuint *buffers, continue; } + if (ctx->API == API_OPENGL_CORE && ctx->Version >= 44 && + strides[i] > ctx->Const.MaxVertexAttribStride) { + _mesa_error(ctx, GL_INVALID_VALUE, + "glBindVertexBuffers(strides[%u]=%d > " + "GL_MAX_VERTEX_ATTRIB_STRIDE)", i, strides[i]); + continue; + } + if (buffers[i]) { struct gl_vertex_buffer_binding *binding = &vao->VertexBinding[VERT_ATTRIB_GENERIC(first + i)]; diff --git a/mesalib/src/mesa/program/program.c b/mesalib/src/mesa/program/program.c index ef5bf6b11..6e17fe65f 100644 --- a/mesalib/src/mesa/program/program.c +++ b/mesalib/src/mesa/program/program.c @@ -100,7 +100,6 @@ _mesa_init_program(struct gl_context *ctx) /* right now by default we don't have a geometry program */ _mesa_reference_geomprog(ctx, &ctx->GeometryProgram.Current, NULL); - ctx->GeometryProgram.Cache = _mesa_new_program_cache(); /* XXX probably move this stuff */ ctx->ATIFragmentShader.Enabled = GL_FALSE; @@ -121,7 +120,6 @@ _mesa_free_program_data(struct gl_context *ctx) _mesa_reference_fragprog(ctx, &ctx->FragmentProgram.Current, NULL); _mesa_delete_shader_cache(ctx, ctx->FragmentProgram.Cache); _mesa_reference_geomprog(ctx, &ctx->GeometryProgram.Current, NULL); - _mesa_delete_program_cache(ctx, ctx->GeometryProgram.Cache); /* XXX probably move this stuff */ if (ctx->ATIFragmentShader.Current) { diff --git a/mesalib/src/mesa/state_tracker/st_extensions.c b/mesalib/src/mesa/state_tracker/st_extensions.c index 4110eb5dd..9db648c03 100644 --- a/mesalib/src/mesa/state_tracker/st_extensions.c +++ b/mesalib/src/mesa/state_tracker/st_extensions.c @@ -289,6 +289,9 @@ void st_init_limits(struct pipe_screen *screen, /* The vertex stream must fit into pipe_stream_output_info::stream */ assert(c->MaxVertexStreams <= 4); + c->MaxVertexAttribStride + = screen->get_param(screen, PIPE_CAP_MAX_VERTEX_ATTRIB_STRIDE); + c->StripTextureBorder = GL_TRUE; c->GLSLSkipStrictMaxUniformLimitCheck = |