Merge branch 'llvm-cliptest-viewport'
[mesa.git] / src / mesa / drivers / dri / r300 / r300_context.c
index 74947a95d234c1f51efc2b89644ddb4a92e3c963..9fbd36bfe63a02f20545763b25ad8f8e14e50e00 100644 (file)
@@ -40,9 +40,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "main/context.h"
 #include "main/simple_list.h"
 #include "main/imports.h"
-#include "main/matrix.h"
 #include "main/extensions.h"
-#include "main/state.h"
 #include "main/bufferobj.h"
 #include "main/texobj.h"
 
@@ -52,25 +50,23 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 #include "tnl/tnl.h"
 #include "tnl/t_pipeline.h"
-#include "tnl/t_vp_build.h"
 
 #include "drivers/common/driverfuncs.h"
 #include "drivers/common/meta.h"
 
 #include "r300_context.h"
-#include "radeon_context.h"
 #include "radeon_span.h"
 #include "r300_blit.h"
 #include "r300_cmdbuf.h"
 #include "r300_state.h"
 #include "r300_tex.h"
 #include "r300_emit.h"
+#include "r300_render.h"
 #include "r300_swtcl.h"
 #include "radeon_bocs_wrapper.h"
 #include "radeon_buffer_objects.h"
 #include "radeon_queryobj.h"
 
-#include "vblank.h"
 #include "utils.h"
 #include "xmlpool.h"           /* for symbolic values of enum-type options */
 
@@ -114,7 +110,6 @@ static const struct dri_extension card_extensions[] = {
   {"GL_EXT_blend_func_separate",       GL_EXT_blend_func_separate_functions},
   {"GL_EXT_blend_minmax",              GL_EXT_blend_minmax_functions},
   {"GL_EXT_blend_subtract",            NULL},
-  {"GL_EXT_packed_depth_stencil",      NULL},
   {"GL_EXT_fog_coord",                 GL_EXT_fog_coord_functions },
   {"GL_EXT_gpu_program_parameters",     GL_EXT_gpu_program_parameters_functions},
   {"GL_EXT_provoking_vertex",           GL_EXT_provoking_vertex_functions },
@@ -139,7 +134,6 @@ static const struct dri_extension card_extensions[] = {
   {"GL_MESAX_texture_float",           NULL},
   {"GL_NV_blend_square",               NULL},
   {"GL_NV_vertex_program",             GL_NV_vertex_program_functions},
-  {"GL_SGIS_generate_mipmap",          NULL},
   {NULL,                               NULL}
   /* *INDENT-ON* */
 };
@@ -225,13 +219,15 @@ static void r300_vtbl_pre_emit_atoms(radeonContextPtr radeon)
        end_3d(radeon);
 }
 
-static void r300_fallback(GLcontext *ctx, GLuint bit, GLboolean mode)
+static void r300_fallback(struct gl_context *ctx, GLuint bit, GLboolean mode)
 {
        r300ContextPtr r300 = R300_CONTEXT(ctx);
        if (mode)
                r300->radeon.Fallback |= bit;
        else
                r300->radeon.Fallback &= ~bit;
+
+       r300SwitchFallback(ctx, R300_FALLBACK_RADEON_COMMON, mode);
 }
 
 static void r300_emit_query_finish(radeonContextPtr radeon)
@@ -325,10 +321,17 @@ static void r300_init_vtbl(radeonContextPtr radeon)
        } else
                radeon->vtbl.emit_query_finish = r300_emit_query_finish;
 
-    radeon->vtbl.blit = r300_blit;
+       radeon->vtbl.check_blit = r300_check_blit;
+       radeon->vtbl.blit = r300_blit;
+
+       if (radeon->radeonScreen->chip_family >= CHIP_FAMILY_RV515) {
+               radeon->vtbl.is_format_renderable = r500IsFormatRenderable;
+       } else {
+               radeon->vtbl.is_format_renderable = r300IsFormatRenderable;
+       }
 }
 
-static void r300InitConstValues(GLcontext *ctx, radeonScreenPtr screen)
+static void r300InitConstValues(struct gl_context *ctx, radeonScreenPtr screen)
 {
        r300ContextPtr r300 = R300_CONTEXT(ctx);
 
@@ -338,6 +341,10 @@ static void r300InitConstValues(GLcontext *ctx, radeonScreenPtr screen)
            driQueryOptioni(&r300->radeon.optionCache, "texture_coord_units");
        ctx->Const.MaxTextureUnits = MIN2(ctx->Const.MaxTextureImageUnits,
                 ctx->Const.MaxTextureCoordUnits);
+       ctx->Const.MaxCombinedTextureImageUnits =
+               ctx->Const.MaxVertexTextureImageUnits +
+               ctx->Const.MaxTextureImageUnits;
+
 
        ctx->Const.MaxTextureMaxAnisotropy = 16.0;
        ctx->Const.MaxTextureLodBias = 16.0;
@@ -346,11 +353,13 @@ static void r300InitConstValues(GLcontext *ctx, radeonScreenPtr screen)
                ctx->Const.MaxTextureLevels = 13;
                ctx->Const.MaxCubeTextureLevels = 13;
                ctx->Const.MaxTextureRectSize = 4096;
+               ctx->Const.MaxRenderbufferSize = 4096;
        }
        else {
                ctx->Const.MaxTextureLevels = 12;
                ctx->Const.MaxCubeTextureLevels = 12;
                ctx->Const.MaxTextureRectSize = 2048;
+               ctx->Const.MaxRenderbufferSize = 2048;
        }
 
        ctx->Const.MinPointSize = 1.0;
@@ -364,14 +373,14 @@ static void r300InitConstValues(GLcontext *ctx, radeonScreenPtr screen)
        ctx->Const.MaxLineWidthAA = R300_LINESIZE_MAX;
 
        ctx->Const.MaxDrawBuffers = 1;
+       ctx->Const.MaxColorAttachments = 1;
 
-       /* currently bogus data */
        if (r300->options.hw_tcl_enabled) {
-               ctx->Const.VertexProgram.MaxNativeInstructions = VSF_MAX_FRAGMENT_LENGTH / 4;
-               ctx->Const.VertexProgram.MaxNativeAluInstructions = VSF_MAX_FRAGMENT_LENGTH / 4;
-               ctx->Const.VertexProgram.MaxNativeAttribs = 16; /* r420 */
+               ctx->Const.VertexProgram.MaxNativeInstructions = 255;
+               ctx->Const.VertexProgram.MaxNativeAluInstructions = 255;
+               ctx->Const.VertexProgram.MaxNativeAttribs = 16;
                ctx->Const.VertexProgram.MaxNativeTemps = 32;
-               ctx->Const.VertexProgram.MaxNativeParameters = 256;     /* r420 */
+               ctx->Const.VertexProgram.MaxNativeParameters = 256;
                ctx->Const.VertexProgram.MaxNativeAddressRegs = 1;
        }
 
@@ -430,7 +439,7 @@ static void r300ParseOptions(r300ContextPtr r300, radeonScreenPtr screen)
        r300->options = options;
 }
 
-static void r300InitGLExtensions(GLcontext *ctx)
+static void r300InitGLExtensions(struct gl_context *ctx)
 {
        r300ContextPtr r300 = R300_CONTEXT(ctx);
 
@@ -451,8 +460,11 @@ static void r300InitGLExtensions(GLcontext *ctx)
        if (!r300->radeon.radeonScreen->drmSupportsOcclusionQueries) {
                _mesa_disable_extension(ctx, "GL_ARB_occlusion_query");
        }
-       if (r300->radeon.radeonScreen->chip_family >= CHIP_FAMILY_RV515)
+        if (r300->radeon.radeonScreen->chip_family >= CHIP_FAMILY_R420)
                _mesa_enable_extension(ctx, "GL_ARB_half_float_vertex");
+
+       if (r300->radeon.radeonScreen->chip_family >= CHIP_FAMILY_RV515)
+               _mesa_enable_extension(ctx, "GL_EXT_packed_depth_stencil");
 }
 
 static void r300InitIoctlFuncs(struct dd_function_table *functions)
@@ -464,7 +476,8 @@ static void r300InitIoctlFuncs(struct dd_function_table *functions)
 
 /* Create the device specific rendering context.
  */
-GLboolean r300CreateContext(const __GLcontextModes * glVisual,
+GLboolean r300CreateContext(gl_api api,
+                           const struct gl_config * glVisual,
                            __DRIcontext * driContextPriv,
                            void *sharedContextPrivate)
 {
@@ -472,7 +485,7 @@ GLboolean r300CreateContext(const __GLcontextModes * glVisual,
        radeonScreenPtr screen = (radeonScreenPtr) (sPriv->private);
        struct dd_function_table functions;
        r300ContextPtr r300;
-       GLcontext *ctx;
+       struct gl_context *ctx;
 
        assert(glVisual);
        assert(driContextPriv);
@@ -489,7 +502,7 @@ GLboolean r300CreateContext(const __GLcontextModes * glVisual,
 
        _mesa_init_driver_functions(&functions);
        r300InitIoctlFuncs(&functions);
-       r300InitStateFuncs(&functions);
+       r300InitStateFuncs(&r300->radeon, &functions);
        r300InitTextureFuncs(&r300->radeon, &functions);
        r300InitShaderFuncs(&functions);
        radeonInitQueryObjFunctions(&functions);