diff options
Diffstat (limited to 'mesalib')
-rw-r--r-- | mesalib/configure.ac | 2 | ||||
-rw-r--r-- | mesalib/docs/llvmpipe.html | 58 | ||||
-rw-r--r-- | mesalib/src/glsl/ast_to_hir.cpp | 10 | ||||
-rw-r--r-- | mesalib/src/glsl/ralloc.c | 6 | ||||
-rw-r--r-- | mesalib/src/mesa/main/fbobject.c | 1 | ||||
-rw-r--r-- | mesalib/src/mesa/main/ffvertex_prog.c | 26 | ||||
-rw-r--r-- | mesalib/src/mesa/state_tracker/st_extensions.c | 10 | ||||
-rw-r--r-- | mesalib/src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 2 | ||||
-rw-r--r-- | mesalib/src/mesa/state_tracker/st_mesa_to_tgsi.c | 2 |
9 files changed, 91 insertions, 26 deletions
diff --git a/mesalib/configure.ac b/mesalib/configure.ac index fb16338b8..434df6060 100644 --- a/mesalib/configure.ac +++ b/mesalib/configure.ac @@ -28,7 +28,7 @@ AC_SUBST([OSMESA_VERSION]) dnl Versions for external dependencies LIBDRM_REQUIRED=2.4.24 -LIBDRM_RADEON_REQUIRED=2.4.46 +LIBDRM_RADEON_REQUIRED=2.4.49 LIBDRM_INTEL_REQUIRED=2.4.38 LIBDRM_NVVIEUX_REQUIRED=2.4.33 LIBDRM_NOUVEAU_REQUIRED="2.4.33 libdrm >= 2.4.41" diff --git a/mesalib/docs/llvmpipe.html b/mesalib/docs/llvmpipe.html index 80f8a0176..d69590726 100644 --- a/mesalib/docs/llvmpipe.html +++ b/mesalib/docs/llvmpipe.html @@ -203,11 +203,65 @@ for posterior analysis, e.g.: We use LLVM-C bindings for now. They are not documented, but follow the C++ interfaces very closely, and appear to be complete enough for code generation. See - http://npcontemplation.blogspot.com/2008/06/secret-of-llvm-c-bindings.html - for a stand-alone example. See the llvm-c/Core.h file for reference. + <a href="http://npcontemplation.blogspot.com/2008/06/secret-of-llvm-c-bindings.html"> + this stand-alone example</a>. See the llvm-c/Core.h file for reference. </li> </ul> +<h1 id="recommended_reading">Recommended Reading</h1> + +<ul> + <li> + <p>Rasterization</p> + <ul> + <li><a href="http://www.cs.unc.edu/~olano/papers/2dh-tri/">Triangle Scan Conversion using 2D Homogeneous Coordinates</a></li> + <li><a href="http://www.drdobbs.com/parallel/rasterization-on-larrabee/217200602">Rasterization on Larrabee</a> (<a href="http://devmaster.net/posts/2887/rasterization-on-larrabee">DevMaster copy</a>)</li> + <li><a href="http://devmaster.net/posts/6133/rasterization-using-half-space-functions">Rasterization using half-space functions</a></li> + <li><a href="http://devmaster.net/posts/6145/advanced-rasterization">Advanced Rasterization</a></li> + <li><a href="http://fgiesen.wordpress.com/2013/02/17/optimizing-sw-occlusion-culling-index/">Optimizing Software Occlusion Culling</a></li> + </ul> + </li> + <li> + <p>Texture sampling</p> + <ul> + <li><a href="http://chrishecker.com/Miscellaneous_Technical_Articles#Perspective_Texture_Mapping">Perspective Texture Mapping</a></li> + <li><a href="http://www.flipcode.com/archives/Texturing_As_In_Unreal.shtml">Texturing As In Unreal</a></li> + <li><a href="http://www.gamasutra.com/view/feature/3301/runtime_mipmap_filtering.php">Run-Time MIP-Map Filtering</a></li> + <li><a href="http://alt.3dcenter.org/artikel/2003/10-26_a_english.php">Will "brilinear" filtering persist?</a></li> + <li><a href="http://ixbtlabs.com/articles2/gffx/nv40-rx800-3.html">Trilinear filtering</a></li> + <li><a href="http://devmaster.net/posts/12785/texture-swizzling">Texture Swizzling</a></li> + </ul> + </li> + <li> + <p>SIMD</p> + <ul> + <li><a href="http://www.cdl.uni-saarland.de/projects/wfv/#header4">Whole-Function Vectorization</a></li> + </ul> + </li> + <li> + <p>Optimization</p> + <ul> + <li><a href="http://www.drdobbs.com/optimizing-pixomatic-for-modern-x86-proc/184405807">Optimizing Pixomatic For Modern x86 Processors</a></li> + <li><a href="http://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-optimization-manual.html">Intel 64 and IA-32 Architectures Optimization Reference Manual</a></li> + <li><a href="http://www.agner.org/optimize/">Software optimization resources</a></li> + <li><a href="http://software.intel.com/en-us/articles/intel-intrinsics-guide">Intel Intrinsics Guide</a><li> + </ul> + </li> + <li> + <p>LLVM</p> + <ul> + <li><a href="http://llvm.org/docs/LangRef.html">LLVM Language Reference Manual</a></li> + <li><a href="http://npcontemplation.blogspot.co.uk/2008/06/secret-of-llvm-c-bindings.html">The secret of LLVM C bindings</a></li> + </ul> + </li> + <li> + <p>Misc</p> + <ul> + <li><a href="http://msdn.microsoft.com/en-us/library/gg615082.aspx#architecture">WARP Architecture and Performance</a></li> + </ul> + </li> +</ul> + </div> </body> </html> diff --git a/mesalib/src/glsl/ast_to_hir.cpp b/mesalib/src/glsl/ast_to_hir.cpp index 01280478c..43cf49745 100644 --- a/mesalib/src/glsl/ast_to_hir.cpp +++ b/mesalib/src/glsl/ast_to_hir.cpp @@ -696,9 +696,15 @@ validate_assignment(struct _mesa_glsl_parse_state *state, * Note: Whole-array assignments are not permitted in GLSL 1.10, but this * is handled by ir_dereference::is_lvalue. */ - if (is_initializer && lhs_type->is_unsized_array() && rhs->type->is_array() + if (lhs_type->is_unsized_array() && rhs->type->is_array() && (lhs_type->element_type() == rhs->type->element_type())) { - return rhs; + if (is_initializer) { + return rhs; + } else { + _mesa_glsl_error(&loc, state, + "implicitly sized arrays cannot be assigned"); + return NULL; + } } /* Check for implicit conversion in GLSL 1.20 */ diff --git a/mesalib/src/glsl/ralloc.c b/mesalib/src/glsl/ralloc.c index e79dad764..36bc61fd0 100644 --- a/mesalib/src/glsl/ralloc.c +++ b/mesalib/src/glsl/ralloc.c @@ -53,8 +53,10 @@ _CRTIMP int _vscprintf(const char *format, va_list argptr); struct ralloc_header { +#ifdef DEBUG /* A canary value used to determine whether a pointer is ralloc'd. */ unsigned canary; +#endif struct ralloc_header *parent; @@ -78,7 +80,9 @@ get_header(const void *ptr) { ralloc_header *info = (ralloc_header *) (((char *) ptr) - sizeof(ralloc_header)); +#ifdef DEBUG assert(info->canary == CANARY); +#endif return info; } @@ -117,7 +121,9 @@ ralloc_size(const void *ctx, size_t size) add_child(parent, info); +#ifdef DEBUG info->canary = CANARY; +#endif return PTR_FROM_HEADER(info); } diff --git a/mesalib/src/mesa/main/fbobject.c b/mesalib/src/mesa/main/fbobject.c index 365062729..861885dd3 100644 --- a/mesalib/src/mesa/main/fbobject.c +++ b/mesalib/src/mesa/main/fbobject.c @@ -411,6 +411,7 @@ _mesa_update_texture_renderbuffer(struct gl_context *ctx, rb->InternalFormat = texImage->InternalFormat; rb->Width = texImage->Width2; rb->Height = texImage->Height2; + rb->Depth = texImage->Depth2; rb->NumSamples = texImage->NumSamples; rb->TexImage = texImage; diff --git a/mesalib/src/mesa/main/ffvertex_prog.c b/mesalib/src/mesa/main/ffvertex_prog.c index be6ac0f2a..074fbf9a3 100644 --- a/mesalib/src/mesa/main/ffvertex_prog.c +++ b/mesalib/src/mesa/main/ffvertex_prog.c @@ -1306,20 +1306,22 @@ static void build_fog( struct tnl_program *p ) switch (p->state->fog_distance_mode) { case FDM_EYE_RADIAL: /* Z = sqrt(Xe*Xe + Ye*Ye + Ze*Ze) */ - input = get_eye_position(p); - emit_op2(p, OPCODE_DP3, fog, WRITEMASK_X, input, input); - emit_op1(p, OPCODE_RSQ, fog, WRITEMASK_X, fog); - emit_op1(p, OPCODE_RCP, fog, WRITEMASK_X, fog); - break; + input = get_eye_position(p); + emit_op2(p, OPCODE_DP3, fog, WRITEMASK_X, input, input); + emit_op1(p, OPCODE_RSQ, fog, WRITEMASK_X, fog); + emit_op1(p, OPCODE_RCP, fog, WRITEMASK_X, fog); + break; case FDM_EYE_PLANE: /* Z = Ze */ - input = get_eye_position_z(p); - emit_op1(p, OPCODE_MOV, fog, WRITEMASK_X, input); - break; + input = get_eye_position_z(p); + emit_op1(p, OPCODE_MOV, fog, WRITEMASK_X, input); + break; case FDM_EYE_PLANE_ABS: /* Z = abs(Ze) */ - input = get_eye_position_z(p); - emit_op1(p, OPCODE_ABS, fog, WRITEMASK_X, input); - break; - default: assert(0); break; /* can't happen */ + input = get_eye_position_z(p); + emit_op1(p, OPCODE_ABS, fog, WRITEMASK_X, input); + break; + default: + assert(!"Bad fog mode in build_fog()"); + break; } } diff --git a/mesalib/src/mesa/state_tracker/st_extensions.c b/mesalib/src/mesa/state_tracker/st_extensions.c index e8d0902d9..cd10a0c9d 100644 --- a/mesalib/src/mesa/state_tracker/st_extensions.c +++ b/mesalib/src/mesa/state_tracker/st_extensions.c @@ -594,13 +594,9 @@ void st_init_extensions(struct st_context *st) /* Figure out GLSL support. */ glsl_feature_level = screen->get_param(screen, PIPE_CAP_GLSL_FEATURE_LEVEL); - if (glsl_feature_level >= 140) { - ctx->Const.GLSLVersion = 140; - } else if (glsl_feature_level >= 130) { - ctx->Const.GLSLVersion = 130; - } else { - ctx->Const.GLSLVersion = 120; - } + ctx->Const.GLSLVersion = glsl_feature_level; + if (glsl_feature_level >= 330) + ctx->Const.GLSLVersion = 330; _mesa_override_glsl_version(st->ctx); diff --git a/mesalib/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/mesalib/src/mesa/state_tracker/st_glsl_to_tgsi.cpp index 74b3e5b58..ac95968d6 100644 --- a/mesalib/src/mesa/state_tracker/st_glsl_to_tgsi.cpp +++ b/mesalib/src/mesa/state_tracker/st_glsl_to_tgsi.cpp @@ -4892,7 +4892,7 @@ st_translate_program( if (outputSemanticName[i] == TGSI_SEMANTIC_FOG) { /* force register to contain a fog coordinate in the form (F, 0, 0, 1). */ ureg_MOV(ureg, - ureg_writemask(t->outputs[i], TGSI_WRITEMASK_XYZW & ~TGSI_WRITEMASK_X), + ureg_writemask(t->outputs[i], TGSI_WRITEMASK_YZW), ureg_imm4f(ureg, 0.0f, 0.0f, 0.0f, 1.0f)); t->outputs[i] = ureg_writemask(t->outputs[i], TGSI_WRITEMASK_X); } diff --git a/mesalib/src/mesa/state_tracker/st_mesa_to_tgsi.c b/mesalib/src/mesa/state_tracker/st_mesa_to_tgsi.c index 7d79c6235..1c2abc122 100644 --- a/mesalib/src/mesa/state_tracker/st_mesa_to_tgsi.c +++ b/mesalib/src/mesa/state_tracker/st_mesa_to_tgsi.c @@ -1124,7 +1124,7 @@ st_translate_mesa_program( if (outputSemanticName[i] == TGSI_SEMANTIC_FOG) { /* force register to contain a fog coordinate in the form (F, 0, 0, 1). */ ureg_MOV(ureg, - ureg_writemask(t->outputs[i], TGSI_WRITEMASK_XYZW & ~TGSI_WRITEMASK_X), + ureg_writemask(t->outputs[i], TGSI_WRITEMASK_YZW), ureg_imm4f(ureg, 0.0f, 0.0f, 0.0f, 1.0f)); t->outputs[i] = ureg_writemask(t->outputs[i], TGSI_WRITEMASK_X); } |