X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fpipe%2Fi965simple%2Fbrw_sf_state.c;h=9acd3ea61b2611b92e877ee5f6878f7b8f42e756;hb=05ec043d1ca01f0be94e8b8ceaeb730475b308f9;hp=7b6ee215eb80d7f576f171e0571ee513a8c2273d;hpb=c474f1fb9088528af998168717783b52e5c2f0a2;p=mesa.git diff --git a/src/mesa/pipe/i965simple/brw_sf_state.c b/src/mesa/pipe/i965simple/brw_sf_state.c index 7b6ee215eb8..9acd3ea61b2 100644 --- a/src/mesa/pipe/i965simple/brw_sf_state.c +++ b/src/mesa/pipe/i965simple/brw_sf_state.c @@ -34,91 +34,41 @@ #include "brw_context.h" #include "brw_state.h" #include "brw_defines.h" +#include "pipe/p_util.h" -#if 0 static void upload_sf_vp(struct brw_context *brw) { - GLcontext *ctx = &brw->intel.ctx; struct brw_sf_viewport sfv; - struct intel_renderbuffer *irb = - intel_renderbuffer(ctx->DrawBuffer->_ColorDrawBuffers[0][0]); - float y_scale, y_bias; - int x, y, w, h, x1, x2, y1, y2; - int draw_h = ctx->DrawBuffer->Height; memset(&sfv, 0, sizeof(sfv)); - if (ctx->DrawBuffer->Name) { - /* User-created FBO */ - if (irb && !irb->RenderToTexture) { - y_scale = -1.0; - y_bias = draw_h; - } else { - y_scale = 1.0; - y_bias = 0; - } - } else { - if (brw->intel.driDrawable != NULL) { - y_scale = -1.0; - y_bias = draw_h; - } else { - y_scale = 1.0; - y_bias = 0; - } - } - /* _NEW_VIEWPORT, BRW_NEW_METAOPS */ - - if (!brw->metaops.active) { - const float *v = brw->intel.ctx.Viewport._WindowMap.m; - - sfv.viewport.m00 = v[MAT_SX]; - sfv.viewport.m11 = v[MAT_SY] * y_scale; - sfv.viewport.m22 = v[MAT_SZ] * brw->intel.depth_scale; - sfv.viewport.m30 = v[MAT_TX]; - sfv.viewport.m31 = v[MAT_TY] * y_scale + y_bias; - sfv.viewport.m32 = v[MAT_TZ] * brw->intel.depth_scale; - } else { - sfv.viewport.m00 = 1; - sfv.viewport.m11 = - 1; - sfv.viewport.m22 = 1; - sfv.viewport.m30 = 0; - sfv.viewport.m31 = brw->intel.driDrawable->h; - sfv.viewport.m32 = 0; - } + /* BRW_NEW_VIEWPORT */ + { + const float *scale = brw->attribs.Viewport.scale; + const float *trans = brw->attribs.Viewport.translate; - /* _NEW_SCISSOR */ - x = brw->attribs.Scissor->X; - y = brw->attribs.Scissor->Y; - w = brw->attribs.Scissor->Width; - h = brw->attribs.Scissor->Height; - - if (ctx->DrawBuffer->Name == 0) { - x1 = x; - y1 = draw_h - (y + h); - x2 = x + w - 1; - y2 = y1 + h - 1; - } else { - /* FBO has non-inverted coords. */ - x1 = x; - y1 = y; - x2 = x + w - 1; - y2 = y + h - 1; + sfv.viewport.m00 = scale[0]; + sfv.viewport.m11 = scale[1]; + sfv.viewport.m22 = scale[2]; + sfv.viewport.m30 = trans[0]; + sfv.viewport.m31 = trans[1]; + sfv.viewport.m32 = trans[2]; } - sfv.scissor.xmin = CLAMP(x1, 0, ctx->DrawBuffer->Width - 1); - sfv.scissor.xmax = CLAMP(y1, 0, ctx->DrawBuffer->Height - 1); - sfv.scissor.ymin = CLAMP(x2, 0, ctx->DrawBuffer->Width - 1); - sfv.scissor.ymax = CLAMP(y2, 0, ctx->DrawBuffer->Height - 1); + /* _NEW_SCISSOR */ + sfv.scissor.xmin = brw->attribs.Scissor.minx; + sfv.scissor.xmax = brw->attribs.Scissor.maxx - 1; + sfv.scissor.ymin = brw->attribs.Scissor.miny; + sfv.scissor.ymax = brw->attribs.Scissor.maxy - 1; brw->sf.vp_gs_offset = brw_cache_data( &brw->cache[BRW_SF_VP], &sfv ); } const struct brw_tracked_state brw_sf_vp = { .dirty = { - .mesa = (_NEW_VIEWPORT | - _NEW_SCISSOR), - .brw = BRW_NEW_METAOPS, + .brw = (BRW_NEW_SCISSOR | + BRW_NEW_VIEWPORT), .cache = 0 }, .update = upload_sf_vp @@ -130,7 +80,7 @@ static void upload_sf_unit( struct brw_context *brw ) memset(&sf, 0, sizeof(sf)); /* CACHE_NEW_SF_PROG */ - sf.thread0.grf_reg_count = ALIGN(brw->sf.prog_data->total_grf, 16) / 16 - 1; + sf.thread0.grf_reg_count = align(brw->sf.prog_data->total_grf, 16) / 16 - 1; sf.thread0.kernel_start_pointer = brw->sf.prog_gs_offset >> 6; sf.thread3.urb_entry_read_length = brw->sf.prog_data->urb_read_length; @@ -151,19 +101,19 @@ static void upload_sf_unit( struct brw_context *brw ) /* CACHE_NEW_SF_VP */ sf.sf5.sf_viewport_state_offset = brw->sf.vp_gs_offset >> 5; - sf.sf5.viewport_transform = 1; - /* _NEW_SCISSOR */ - if (brw->attribs.Scissor->Enabled) + /* BRW_NEW_RASTER */ + if (brw->attribs.Raster->scissor) sf.sf6.scissor = 1; - /* _NEW_POLYGON */ +#if 0 if (brw->attribs.Polygon->FrontFace == GL_CCW) sf.sf5.front_winding = BRW_FRONTWINDING_CCW; else sf.sf5.front_winding = BRW_FRONTWINDING_CW; + if (brw->attribs.Polygon->CullFlag) { switch (brw->attribs.Polygon->CullFaceMode) { case GL_FRONT: @@ -182,25 +132,24 @@ static void upload_sf_unit( struct brw_context *brw ) } else sf.sf6.cull_mode = BRW_CULLMODE_NONE; +#else + sf.sf5.front_winding = BRW_FRONTWINDING_CCW; + sf.sf6.cull_mode = BRW_CULLMODE_NONE; +#endif - - /* _NEW_LINE */ - /* XXX use ctx->Const.Min/MaxLineWidth here */ - sf.sf6.line_width = CLAMP(brw->attribs.Line->Width, 1.0, 5.0) * (1<<1); + sf.sf6.line_width = CLAMP(brw->attribs.Raster->line_width, 1.0, 5.0) * (1<<1); sf.sf6.line_endcap_aa_region_width = 1; - if (brw->attribs.Line->SmoothFlag) + if (brw->attribs.Raster->line_smooth) sf.sf6.aa_enable = 1; else if (sf.sf6.line_width <= 0x2) sf.sf6.line_width = 0; - /* _NEW_POINT */ sf.sf6.point_rast_rule = 1; /* opengl conventions */ - /* XXX clamp max depends on AA vs. non-AA */ - sf.sf7.sprite_point = brw->attribs.Point->PointSprite; - sf.sf7.point_size = CLAMP(brw->attribs.Point->Size, 1.0, 255.0) * (1<<3); - sf.sf7.use_point_size_state = !brw->attribs.Point->_Attenuated; + sf.sf7.sprite_point = brw->attribs.Raster->point_sprite; + sf.sf7.point_size = CLAMP(brw->attribs.Raster->line_width, 1.0, 255.0) * (1<<3); + sf.sf7.use_point_size_state = !brw->attribs.Raster->point_size_per_vertex; /* might be BRW_NEW_PRIMITIVE if we have to adjust pv for polygons: */ @@ -220,12 +169,8 @@ static void upload_sf_unit( struct brw_context *brw ) const struct brw_tracked_state brw_sf_unit = { .dirty = { - .mesa = (_NEW_POLYGON | - _NEW_LINE | - _NEW_POINT | - _NEW_SCISSOR), - .brw = (BRW_NEW_URB_FENCE | - BRW_NEW_METAOPS), + .brw = (BRW_NEW_RASTERIZER | + BRW_NEW_URB_FENCE), .cache = (CACHE_NEW_SF_VP | CACHE_NEW_SF_PROG) }, @@ -233,4 +178,3 @@ const struct brw_tracked_state brw_sf_unit = { }; -#endif