mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 02:58:05 +02:00
i965: Delete old metaops code now that there are no remaining consumers.
This commit is contained in:
parent
c96bac0950
commit
14321fcfde
14 changed files with 23 additions and 682 deletions
|
|
@ -51,7 +51,6 @@ DRIVER_SOURCES = \
|
|||
brw_gs.c \
|
||||
brw_gs_emit.c \
|
||||
brw_gs_state.c \
|
||||
brw_metaops.c \
|
||||
brw_misc_state.c \
|
||||
brw_program.c \
|
||||
brw_queryobj.c \
|
||||
|
|
|
|||
|
|
@ -148,7 +148,6 @@ GLboolean brwCreateContext( const __GLcontextModes *mesaVis,
|
|||
/* ctx->Const.MaxNativeVertexProgramTemps = 32; */
|
||||
|
||||
brw_init_attribs( brw );
|
||||
brw_init_metaops( brw );
|
||||
brw_init_state( brw );
|
||||
|
||||
brw->state.dirty.mesa = ~0;
|
||||
|
|
|
|||
|
|
@ -131,7 +131,6 @@ struct brw_context;
|
|||
#define BRW_NEW_WM_INPUT_DIMENSIONS 0x100
|
||||
#define BRW_NEW_INPUT_VARYING 0x200
|
||||
#define BRW_NEW_PSP 0x800
|
||||
#define BRW_NEW_METAOPS 0x1000
|
||||
#define BRW_NEW_FENCE 0x2000
|
||||
#define BRW_NEW_INDICES 0x4000
|
||||
#define BRW_NEW_VERTICES 0x8000
|
||||
|
|
@ -491,28 +490,6 @@ struct brw_context
|
|||
unsigned int offset;
|
||||
} ib;
|
||||
|
||||
struct {
|
||||
/* Will be allocated on demand if needed.
|
||||
*/
|
||||
struct brw_state_pointers attribs;
|
||||
struct gl_vertex_program *vp;
|
||||
struct gl_fragment_program *fp, *fp_tex;
|
||||
|
||||
struct gl_buffer_object *vbo;
|
||||
|
||||
struct intel_region *saved_draw_region;
|
||||
GLuint saved_nr_draw_regions;
|
||||
struct intel_region *saved_depth_region;
|
||||
|
||||
GLuint restore_draw_buffers[MAX_DRAW_BUFFERS];
|
||||
GLuint restore_num_draw_buffers;
|
||||
|
||||
struct gl_fragment_program *restore_fp;
|
||||
|
||||
GLboolean active;
|
||||
} metaops;
|
||||
|
||||
|
||||
/* Active vertex program:
|
||||
*/
|
||||
const struct gl_vertex_program *vertex_program;
|
||||
|
|
@ -703,13 +680,6 @@ void brw_FrameBufferTexInit( struct brw_context *brw,
|
|||
void brw_FrameBufferTexDestroy( struct brw_context *brw );
|
||||
void brw_validate_textures( struct brw_context *brw );
|
||||
|
||||
/*======================================================================
|
||||
* brw_metaops.c
|
||||
*/
|
||||
|
||||
void brw_init_metaops( struct brw_context *brw );
|
||||
void brw_destroy_metaops( struct brw_context *brw );
|
||||
|
||||
|
||||
/*======================================================================
|
||||
* brw_program.c
|
||||
|
|
|
|||
|
|
@ -166,14 +166,11 @@ static void brw_merge_inputs( struct brw_context *brw,
|
|||
for (i = 0; i < VERT_ATTRIB_MAX; i++) {
|
||||
brw->vb.inputs[i].glarray = arrays[i];
|
||||
|
||||
/* XXX: metaops passes null arrays */
|
||||
if (arrays[i]) {
|
||||
if (arrays[i]->StrideB != 0)
|
||||
brw->vb.info.varying |= 1 << i;
|
||||
if (arrays[i]->StrideB != 0)
|
||||
brw->vb.info.varying |= 1 << i;
|
||||
|
||||
brw->vb.info.sizes[i/16] |= (brw->vb.inputs[i].glarray->Size - 1) <<
|
||||
((i%16) * 2);
|
||||
}
|
||||
}
|
||||
|
||||
/* Raise statechanges if input sizes and varying have changed:
|
||||
|
|
|
|||
|
|
@ -47,20 +47,12 @@ static GLboolean do_check_fallback(struct brw_context *brw)
|
|||
GLcontext *ctx = &brw->intel.ctx;
|
||||
GLuint i;
|
||||
|
||||
/* BRW_NEW_METAOPS
|
||||
*/
|
||||
if (brw->metaops.active)
|
||||
return GL_FALSE;
|
||||
|
||||
if (brw->intel.no_rast) {
|
||||
DBG("FALLBACK: rasterization disabled\n");
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
/* _NEW_RENDERMODE
|
||||
*
|
||||
* XXX: need to save/restore RenderMode in metaops state, or
|
||||
* somehow move to a new attribs pointer:
|
||||
*/
|
||||
if (ctx->RenderMode != GL_RENDER) {
|
||||
DBG("FALLBACK: render mode\n");
|
||||
|
|
@ -101,7 +93,7 @@ static void check_fallback(struct brw_context *brw)
|
|||
const struct brw_tracked_state brw_check_fallback = {
|
||||
.dirty = {
|
||||
.mesa = _NEW_BUFFERS | _NEW_RENDERMODE | _NEW_TEXTURE | _NEW_STENCIL,
|
||||
.brw = BRW_NEW_METAOPS,
|
||||
.brw = 0,
|
||||
.cache = 0
|
||||
},
|
||||
.prepare = check_fallback
|
||||
|
|
|
|||
|
|
@ -1,585 +0,0 @@
|
|||
/*
|
||||
Copyright (C) Intel Corp. 2006. All Rights Reserved.
|
||||
Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
|
||||
develop this 3D driver.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice (including the
|
||||
next paragraph) shall be included in all copies or substantial
|
||||
portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
**********************************************************************/
|
||||
/*
|
||||
* Authors:
|
||||
* Keith Whitwell <keith@tungstengraphics.com>
|
||||
* frame buffer texture by Gary Wong <gtw@gnu.org>
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#include "main/glheader.h"
|
||||
#include "main/context.h"
|
||||
#include "main/macros.h"
|
||||
|
||||
#include "shader/arbprogparse.h"
|
||||
|
||||
#include "intel_screen.h"
|
||||
#include "intel_batchbuffer.h"
|
||||
#include "intel_regions.h"
|
||||
#include "intel_buffers.h"
|
||||
|
||||
#include "brw_context.h"
|
||||
#include "brw_defines.h"
|
||||
#include "brw_draw.h"
|
||||
#include "brw_fallback.h"
|
||||
|
||||
#define INIT(brw, STRUCT, ATTRIB) \
|
||||
do { \
|
||||
brw->attribs.ATTRIB = &ctx->ATTRIB; \
|
||||
} while (0)
|
||||
|
||||
#define DUP(brw, STRUCT, ATTRIB) \
|
||||
do { \
|
||||
brw->metaops.attribs.ATTRIB = MALLOC_STRUCT(STRUCT); \
|
||||
memcpy(brw->metaops.attribs.ATTRIB, \
|
||||
brw->attribs.ATTRIB, \
|
||||
sizeof(struct STRUCT)); \
|
||||
} while (0)
|
||||
|
||||
|
||||
#define INSTALL(brw, ATTRIB, STATE) \
|
||||
do { \
|
||||
brw->attribs.ATTRIB = brw->metaops.attribs.ATTRIB; \
|
||||
brw->state.dirty.mesa |= STATE; \
|
||||
} while (0)
|
||||
|
||||
#define RESTORE(brw, ATTRIB, STATE) \
|
||||
do { \
|
||||
brw->attribs.ATTRIB = &brw->intel.ctx.ATTRIB; \
|
||||
brw->state.dirty.mesa |= STATE; \
|
||||
} while (0)
|
||||
|
||||
static void init_attribs( struct brw_context *brw )
|
||||
{
|
||||
DUP(brw, gl_colorbuffer_attrib, Color);
|
||||
DUP(brw, gl_depthbuffer_attrib, Depth);
|
||||
DUP(brw, gl_fog_attrib, Fog);
|
||||
DUP(brw, gl_hint_attrib, Hint);
|
||||
DUP(brw, gl_light_attrib, Light);
|
||||
DUP(brw, gl_line_attrib, Line);
|
||||
DUP(brw, gl_point_attrib, Point);
|
||||
DUP(brw, gl_polygon_attrib, Polygon);
|
||||
DUP(brw, gl_scissor_attrib, Scissor);
|
||||
DUP(brw, gl_stencil_attrib, Stencil);
|
||||
DUP(brw, gl_texture_attrib, Texture);
|
||||
DUP(brw, gl_transform_attrib, Transform);
|
||||
DUP(brw, gl_viewport_attrib, Viewport);
|
||||
DUP(brw, gl_vertex_program_state, VertexProgram);
|
||||
DUP(brw, gl_fragment_program_state, FragmentProgram);
|
||||
}
|
||||
|
||||
static void install_attribs( struct brw_context *brw )
|
||||
{
|
||||
INSTALL(brw, Color, _NEW_COLOR);
|
||||
INSTALL(brw, Depth, _NEW_DEPTH);
|
||||
INSTALL(brw, Fog, _NEW_FOG);
|
||||
INSTALL(brw, Hint, _NEW_HINT);
|
||||
INSTALL(brw, Light, _NEW_LIGHT);
|
||||
INSTALL(brw, Line, _NEW_LINE);
|
||||
INSTALL(brw, Point, _NEW_POINT);
|
||||
INSTALL(brw, Polygon, _NEW_POLYGON);
|
||||
INSTALL(brw, Scissor, _NEW_SCISSOR);
|
||||
INSTALL(brw, Stencil, _NEW_STENCIL);
|
||||
INSTALL(brw, Texture, _NEW_TEXTURE);
|
||||
INSTALL(brw, Transform, _NEW_TRANSFORM);
|
||||
INSTALL(brw, Viewport, _NEW_VIEWPORT);
|
||||
INSTALL(brw, VertexProgram, _NEW_PROGRAM);
|
||||
INSTALL(brw, FragmentProgram, _NEW_PROGRAM);
|
||||
}
|
||||
|
||||
static void restore_attribs( struct brw_context *brw )
|
||||
{
|
||||
RESTORE(brw, Color, _NEW_COLOR);
|
||||
RESTORE(brw, Depth, _NEW_DEPTH);
|
||||
RESTORE(brw, Fog, _NEW_FOG);
|
||||
RESTORE(brw, Hint, _NEW_HINT);
|
||||
RESTORE(brw, Light, _NEW_LIGHT);
|
||||
RESTORE(brw, Line, _NEW_LINE);
|
||||
RESTORE(brw, Point, _NEW_POINT);
|
||||
RESTORE(brw, Polygon, _NEW_POLYGON);
|
||||
RESTORE(brw, Scissor, _NEW_SCISSOR);
|
||||
RESTORE(brw, Stencil, _NEW_STENCIL);
|
||||
RESTORE(brw, Texture, _NEW_TEXTURE);
|
||||
RESTORE(brw, Transform, _NEW_TRANSFORM);
|
||||
RESTORE(brw, Viewport, _NEW_VIEWPORT);
|
||||
RESTORE(brw, VertexProgram, _NEW_PROGRAM);
|
||||
RESTORE(brw, FragmentProgram, _NEW_PROGRAM);
|
||||
}
|
||||
|
||||
|
||||
static const char *vp_prog =
|
||||
"!!ARBvp1.0\n"
|
||||
"MOV result.color, vertex.color;\n"
|
||||
"MOV result.position, vertex.position;\n"
|
||||
"END\n";
|
||||
|
||||
static const char *fp_prog =
|
||||
"!!ARBfp1.0\n"
|
||||
"MOV result.color, fragment.color;\n"
|
||||
"END\n";
|
||||
|
||||
static const char *fp_tex_prog =
|
||||
"!!ARBfp1.0\n"
|
||||
"TEMP a;\n"
|
||||
"ADD a, fragment.position, program.local[0];\n"
|
||||
"MUL a, a, program.local[1];\n"
|
||||
"TEX result.color, a, texture[0], 2D;\n"
|
||||
"MOV result.depth.z, fragment.position;\n"
|
||||
"END\n";
|
||||
|
||||
/* Derived values of importance:
|
||||
*
|
||||
* FragmentProgram->_Current
|
||||
* VertexProgram->_Enabled
|
||||
* brw->vertex_program
|
||||
* DrawBuffer->_ColorDrawBufferIndexes[0]
|
||||
*
|
||||
*
|
||||
* More if drawpixels-through-texture is added.
|
||||
*/
|
||||
static void init_metaops_state( struct brw_context *brw )
|
||||
{
|
||||
GLcontext *ctx = &brw->intel.ctx;
|
||||
|
||||
brw->metaops.vbo = ctx->Driver.NewBufferObject(ctx, 1, GL_ARRAY_BUFFER_ARB);
|
||||
|
||||
ctx->Driver.BufferData(ctx,
|
||||
GL_ARRAY_BUFFER_ARB,
|
||||
4096,
|
||||
NULL,
|
||||
GL_DYNAMIC_DRAW_ARB,
|
||||
brw->metaops.vbo);
|
||||
|
||||
brw->metaops.fp = (struct gl_fragment_program *)
|
||||
ctx->Driver.NewProgram(ctx, GL_FRAGMENT_PROGRAM_ARB, 1 );
|
||||
|
||||
brw->metaops.fp_tex = (struct gl_fragment_program *)
|
||||
ctx->Driver.NewProgram(ctx, GL_FRAGMENT_PROGRAM_ARB, 1 );
|
||||
|
||||
brw->metaops.vp = (struct gl_vertex_program *)
|
||||
ctx->Driver.NewProgram(ctx, GL_VERTEX_PROGRAM_ARB, 1 );
|
||||
|
||||
_mesa_parse_arb_fragment_program(ctx, GL_FRAGMENT_PROGRAM_ARB,
|
||||
fp_prog, strlen(fp_prog),
|
||||
brw->metaops.fp);
|
||||
|
||||
_mesa_parse_arb_fragment_program(ctx, GL_FRAGMENT_PROGRAM_ARB,
|
||||
fp_tex_prog, strlen(fp_tex_prog),
|
||||
brw->metaops.fp_tex);
|
||||
|
||||
_mesa_parse_arb_vertex_program(ctx, GL_VERTEX_PROGRAM_ARB,
|
||||
vp_prog, strlen(vp_prog),
|
||||
brw->metaops.vp);
|
||||
|
||||
brw->metaops.attribs.VertexProgram->_Current = brw->metaops.vp;
|
||||
brw->metaops.attribs.VertexProgram->_Enabled = GL_TRUE;
|
||||
|
||||
brw->metaops.attribs.FragmentProgram->_Current = brw->metaops.fp;
|
||||
}
|
||||
|
||||
static void meta_flat_shade( struct intel_context *intel )
|
||||
{
|
||||
struct brw_context *brw = brw_context(&intel->ctx);
|
||||
|
||||
brw->metaops.attribs.Light->ShadeModel = GL_FLAT;
|
||||
brw->state.dirty.mesa |= _NEW_LIGHT;
|
||||
}
|
||||
|
||||
|
||||
static void meta_no_stencil_write( struct intel_context *intel )
|
||||
{
|
||||
struct brw_context *brw = brw_context(&intel->ctx);
|
||||
|
||||
brw->metaops.attribs.Stencil->Enabled = GL_FALSE;
|
||||
brw->metaops.attribs.Stencil->WriteMask[0] = GL_FALSE;
|
||||
brw->state.dirty.mesa |= _NEW_STENCIL;
|
||||
}
|
||||
|
||||
static void meta_no_depth_write( struct intel_context *intel )
|
||||
{
|
||||
struct brw_context *brw = brw_context(&intel->ctx);
|
||||
|
||||
brw->metaops.attribs.Depth->Test = GL_FALSE;
|
||||
brw->metaops.attribs.Depth->Mask = GL_FALSE;
|
||||
brw->state.dirty.mesa |= _NEW_DEPTH;
|
||||
}
|
||||
|
||||
|
||||
static void meta_depth_replace( struct intel_context *intel )
|
||||
{
|
||||
struct brw_context *brw = brw_context(&intel->ctx);
|
||||
|
||||
/* ctx->Driver.Enable( ctx, GL_DEPTH_TEST, GL_TRUE )
|
||||
* ctx->Driver.DepthMask( ctx, GL_TRUE )
|
||||
*/
|
||||
brw->metaops.attribs.Depth->Test = GL_TRUE;
|
||||
brw->metaops.attribs.Depth->Mask = GL_TRUE;
|
||||
brw->state.dirty.mesa |= _NEW_DEPTH;
|
||||
|
||||
/* ctx->Driver.DepthFunc( ctx, GL_ALWAYS )
|
||||
*/
|
||||
brw->metaops.attribs.Depth->Func = GL_ALWAYS;
|
||||
|
||||
brw->state.dirty.mesa |= _NEW_DEPTH;
|
||||
}
|
||||
|
||||
|
||||
static void meta_stencil_replace( struct intel_context *intel,
|
||||
GLuint s_mask,
|
||||
GLuint s_clear)
|
||||
{
|
||||
struct brw_context *brw = brw_context(&intel->ctx);
|
||||
|
||||
brw->metaops.attribs.Stencil->Enabled = GL_TRUE;
|
||||
brw->metaops.attribs.Stencil->WriteMask[0] = s_mask;
|
||||
brw->metaops.attribs.Stencil->ValueMask[0] = 0xff;
|
||||
brw->metaops.attribs.Stencil->Ref[0] = s_clear;
|
||||
brw->metaops.attribs.Stencil->Function[0] = GL_ALWAYS;
|
||||
brw->metaops.attribs.Stencil->FailFunc[0] = GL_REPLACE;
|
||||
brw->metaops.attribs.Stencil->ZPassFunc[0] = GL_REPLACE;
|
||||
brw->metaops.attribs.Stencil->ZFailFunc[0] = GL_REPLACE;
|
||||
brw->state.dirty.mesa |= _NEW_STENCIL;
|
||||
}
|
||||
|
||||
|
||||
static void meta_color_mask( struct intel_context *intel, GLboolean state )
|
||||
{
|
||||
struct brw_context *brw = brw_context(&intel->ctx);
|
||||
|
||||
if (state)
|
||||
COPY_4V(brw->metaops.attribs.Color->ColorMask,
|
||||
brw->intel.ctx.Color.ColorMask);
|
||||
else
|
||||
ASSIGN_4V(brw->metaops.attribs.Color->ColorMask, 0, 0, 0, 0);
|
||||
|
||||
brw->state.dirty.mesa |= _NEW_COLOR;
|
||||
}
|
||||
|
||||
static void meta_no_texture( struct intel_context *intel )
|
||||
{
|
||||
struct brw_context *brw = brw_context(&intel->ctx);
|
||||
|
||||
brw->metaops.attribs.FragmentProgram->_Current = brw->metaops.fp;
|
||||
|
||||
brw->metaops.attribs.Texture->CurrentUnit = 0;
|
||||
brw->metaops.attribs.Texture->_EnabledUnits = 0;
|
||||
brw->metaops.attribs.Texture->_EnabledCoordUnits = 0;
|
||||
brw->metaops.attribs.Texture->Unit[ 0 ].Enabled = 0;
|
||||
brw->metaops.attribs.Texture->Unit[ 0 ]._ReallyEnabled = 0;
|
||||
|
||||
brw->state.dirty.mesa |= _NEW_TEXTURE | _NEW_PROGRAM;
|
||||
}
|
||||
|
||||
static void meta_texture_blend_replace(struct intel_context *intel)
|
||||
{
|
||||
struct brw_context *brw = brw_context(&intel->ctx);
|
||||
|
||||
brw->metaops.attribs.Texture->CurrentUnit = 0;
|
||||
brw->metaops.attribs.Texture->_EnabledUnits = 1;
|
||||
brw->metaops.attribs.Texture->_EnabledCoordUnits = 1;
|
||||
brw->metaops.attribs.Texture->Unit[ 0 ].Enabled = TEXTURE_2D_BIT;
|
||||
brw->metaops.attribs.Texture->Unit[ 0 ]._ReallyEnabled = TEXTURE_2D_BIT;
|
||||
brw->metaops.attribs.Texture->Unit[ 0 ].Current2D =
|
||||
intel->frame_buffer_texobj;
|
||||
brw->metaops.attribs.Texture->Unit[ 0 ]._Current =
|
||||
intel->frame_buffer_texobj;
|
||||
|
||||
brw->state.dirty.mesa |= _NEW_TEXTURE | _NEW_PROGRAM;
|
||||
}
|
||||
|
||||
static void meta_import_pixel_state(struct intel_context *intel)
|
||||
{
|
||||
struct brw_context *brw = brw_context(&intel->ctx);
|
||||
|
||||
RESTORE(brw, Color, _NEW_COLOR);
|
||||
RESTORE(brw, Depth, _NEW_DEPTH);
|
||||
RESTORE(brw, Fog, _NEW_FOG);
|
||||
RESTORE(brw, Scissor, _NEW_SCISSOR);
|
||||
RESTORE(brw, Stencil, _NEW_STENCIL);
|
||||
RESTORE(brw, Texture, _NEW_TEXTURE);
|
||||
RESTORE(brw, FragmentProgram, _NEW_PROGRAM);
|
||||
}
|
||||
|
||||
static void meta_frame_buffer_texture( struct intel_context *intel,
|
||||
GLint xoff, GLint yoff )
|
||||
{
|
||||
struct brw_context *brw = brw_context(&intel->ctx);
|
||||
struct intel_region *region = intel_drawbuf_region( intel );
|
||||
|
||||
INSTALL(brw, FragmentProgram, _NEW_PROGRAM);
|
||||
|
||||
brw->metaops.attribs.FragmentProgram->_Current = brw->metaops.fp_tex;
|
||||
/* This is unfortunate, but seems to be necessary, since later on we
|
||||
will end up calling _mesa_load_state_parameters to lookup the
|
||||
local params (below), and that will want to look in ctx.FragmentProgram
|
||||
instead of brw->attribs.FragmentProgram. */
|
||||
intel->ctx.FragmentProgram.Current = brw->metaops.fp_tex;
|
||||
|
||||
brw->metaops.fp_tex->Base.LocalParams[ 0 ][ 0 ] = xoff;
|
||||
brw->metaops.fp_tex->Base.LocalParams[ 0 ][ 1 ] = yoff;
|
||||
brw->metaops.fp_tex->Base.LocalParams[ 0 ][ 2 ] = 0.0;
|
||||
brw->metaops.fp_tex->Base.LocalParams[ 0 ][ 3 ] = 0.0;
|
||||
brw->metaops.fp_tex->Base.LocalParams[ 1 ][ 0 ] =
|
||||
1.0 / region->pitch;
|
||||
brw->metaops.fp_tex->Base.LocalParams[ 1 ][ 1 ] =
|
||||
-1.0 / region->height;
|
||||
brw->metaops.fp_tex->Base.LocalParams[ 1 ][ 2 ] = 0.0;
|
||||
brw->metaops.fp_tex->Base.LocalParams[ 1 ][ 3 ] = 1.0;
|
||||
|
||||
brw->state.dirty.mesa |= _NEW_PROGRAM;
|
||||
}
|
||||
|
||||
|
||||
static void meta_draw_region( struct intel_context *intel,
|
||||
struct intel_region *draw_region,
|
||||
struct intel_region *depth_region )
|
||||
{
|
||||
struct brw_context *brw = brw_context(&intel->ctx);
|
||||
|
||||
if (!brw->metaops.saved_draw_region) {
|
||||
brw->metaops.saved_draw_region = brw->state.draw_regions[0];
|
||||
brw->metaops.saved_nr_draw_regions = brw->state.nr_draw_regions;
|
||||
brw->metaops.saved_depth_region = brw->state.depth_region;
|
||||
}
|
||||
|
||||
brw->state.draw_regions[0] = draw_region;
|
||||
brw->state.nr_draw_regions = 1;
|
||||
brw->state.depth_region = depth_region;
|
||||
|
||||
if (intel->frame_buffer_texobj != NULL)
|
||||
brw_FrameBufferTexDestroy(brw);
|
||||
|
||||
if (draw_region)
|
||||
brw_FrameBufferTexInit(brw, draw_region);
|
||||
|
||||
brw->state.dirty.mesa |= _NEW_BUFFERS;
|
||||
}
|
||||
|
||||
|
||||
static void meta_draw_quad(struct intel_context *intel,
|
||||
GLfloat x0, GLfloat x1,
|
||||
GLfloat y0, GLfloat y1,
|
||||
GLfloat z,
|
||||
GLuint color,
|
||||
GLfloat s0, GLfloat s1,
|
||||
GLfloat t0, GLfloat t1)
|
||||
{
|
||||
GLcontext *ctx = &intel->ctx;
|
||||
struct brw_context *brw = brw_context(&intel->ctx);
|
||||
struct gl_client_array pos_array;
|
||||
struct gl_client_array color_array;
|
||||
struct gl_client_array *attribs[VERT_ATTRIB_MAX];
|
||||
struct _mesa_prim prim[1];
|
||||
GLfloat pos[4][3];
|
||||
|
||||
ctx->Driver.BufferData(ctx,
|
||||
GL_ARRAY_BUFFER_ARB,
|
||||
sizeof(pos) + sizeof(color),
|
||||
NULL,
|
||||
GL_DYNAMIC_DRAW_ARB,
|
||||
brw->metaops.vbo);
|
||||
|
||||
pos[0][0] = x0;
|
||||
pos[0][1] = y0;
|
||||
pos[0][2] = z;
|
||||
|
||||
pos[1][0] = x1;
|
||||
pos[1][1] = y0;
|
||||
pos[1][2] = z;
|
||||
|
||||
pos[2][0] = x1;
|
||||
pos[2][1] = y1;
|
||||
pos[2][2] = z;
|
||||
|
||||
pos[3][0] = x0;
|
||||
pos[3][1] = y1;
|
||||
pos[3][2] = z;
|
||||
|
||||
ctx->Driver.BufferSubData(ctx,
|
||||
GL_ARRAY_BUFFER_ARB,
|
||||
0,
|
||||
sizeof(pos),
|
||||
pos,
|
||||
brw->metaops.vbo);
|
||||
|
||||
/* Convert incoming ARGB to required RGBA */
|
||||
/* Note this color is stored as GL_UNSIGNED_BYTE */
|
||||
color = (color & 0xff00ff00) | (((color >> 16) | (color << 16)) & 0xff00ff);
|
||||
|
||||
ctx->Driver.BufferSubData(ctx,
|
||||
GL_ARRAY_BUFFER_ARB,
|
||||
sizeof(pos),
|
||||
sizeof(color),
|
||||
&color,
|
||||
brw->metaops.vbo);
|
||||
|
||||
/* Ignoring texture coords.
|
||||
*/
|
||||
|
||||
memset(attribs, 0, VERT_ATTRIB_MAX * sizeof(*attribs));
|
||||
|
||||
attribs[VERT_ATTRIB_POS] = &pos_array;
|
||||
attribs[VERT_ATTRIB_POS]->Ptr = 0;
|
||||
attribs[VERT_ATTRIB_POS]->Type = GL_FLOAT;
|
||||
attribs[VERT_ATTRIB_POS]->Format = GL_RGBA;
|
||||
attribs[VERT_ATTRIB_POS]->Enabled = 1;
|
||||
attribs[VERT_ATTRIB_POS]->Size = 3;
|
||||
attribs[VERT_ATTRIB_POS]->StrideB = 3 * sizeof(GLfloat);
|
||||
attribs[VERT_ATTRIB_POS]->Stride = 3 * sizeof(GLfloat);
|
||||
attribs[VERT_ATTRIB_POS]->_MaxElement = 4;
|
||||
attribs[VERT_ATTRIB_POS]->Normalized = 0;
|
||||
attribs[VERT_ATTRIB_POS]->BufferObj = brw->metaops.vbo;
|
||||
|
||||
attribs[VERT_ATTRIB_COLOR0] = &color_array;
|
||||
attribs[VERT_ATTRIB_COLOR0]->Ptr = (const GLubyte *)sizeof(pos);
|
||||
attribs[VERT_ATTRIB_COLOR0]->Type = GL_UNSIGNED_BYTE;
|
||||
attribs[VERT_ATTRIB_COLOR0]->Format = GL_RGBA;
|
||||
attribs[VERT_ATTRIB_COLOR0]->Enabled = 1;
|
||||
attribs[VERT_ATTRIB_COLOR0]->Size = 4;
|
||||
attribs[VERT_ATTRIB_COLOR0]->StrideB = 0;
|
||||
attribs[VERT_ATTRIB_COLOR0]->Stride = 0;
|
||||
attribs[VERT_ATTRIB_COLOR0]->_MaxElement = 1;
|
||||
attribs[VERT_ATTRIB_COLOR0]->Normalized = 1;
|
||||
attribs[VERT_ATTRIB_COLOR0]->BufferObj = brw->metaops.vbo;
|
||||
|
||||
/* Just ignoring texture coordinates for now.
|
||||
*/
|
||||
|
||||
memset(prim, 0, sizeof(*prim));
|
||||
|
||||
prim[0].mode = GL_TRIANGLE_FAN;
|
||||
prim[0].begin = 1;
|
||||
prim[0].end = 1;
|
||||
prim[0].weak = 0;
|
||||
prim[0].pad = 0;
|
||||
prim[0].start = 0;
|
||||
prim[0].count = 4;
|
||||
|
||||
brw_draw_prims(&brw->intel.ctx,
|
||||
(const struct gl_client_array **)attribs,
|
||||
prim, 1,
|
||||
NULL,
|
||||
0,
|
||||
3 );
|
||||
}
|
||||
|
||||
|
||||
static void install_meta_state( struct intel_context *intel )
|
||||
{
|
||||
GLcontext *ctx = &intel->ctx;
|
||||
struct brw_context *brw = brw_context(ctx);
|
||||
GLuint i;
|
||||
|
||||
if (!brw->metaops.vbo) {
|
||||
init_metaops_state(brw);
|
||||
}
|
||||
|
||||
install_attribs(brw);
|
||||
|
||||
meta_no_texture(&brw->intel);
|
||||
meta_flat_shade(&brw->intel);
|
||||
for (i = 0; i < ctx->Const.MaxDrawBuffers; i++) {
|
||||
brw->metaops.restore_draw_buffers[i]
|
||||
= ctx->DrawBuffer->_ColorDrawBufferIndexes[i];
|
||||
}
|
||||
brw->metaops.restore_num_draw_buffers = ctx->DrawBuffer->_NumColorDrawBuffers;
|
||||
|
||||
brw->metaops.restore_fp = ctx->FragmentProgram.Current;
|
||||
|
||||
/* This works without adjusting refcounts. Fix later?
|
||||
*/
|
||||
brw->metaops.saved_draw_region = brw->state.draw_regions[0];
|
||||
brw->metaops.saved_nr_draw_regions = brw->state.nr_draw_regions;
|
||||
brw->metaops.saved_depth_region = brw->state.depth_region;
|
||||
brw->metaops.active = 1;
|
||||
|
||||
brw->state.dirty.brw |= BRW_NEW_METAOPS;
|
||||
}
|
||||
|
||||
static void leave_meta_state( struct intel_context *intel )
|
||||
{
|
||||
GLcontext *ctx = &intel->ctx;
|
||||
struct brw_context *brw = brw_context(ctx);
|
||||
GLuint i;
|
||||
|
||||
restore_attribs(brw);
|
||||
|
||||
for (i = 0; i < ctx->Const.MaxDrawBuffers; i++) {
|
||||
ctx->DrawBuffer->_ColorDrawBufferIndexes[i]
|
||||
= brw->metaops.restore_draw_buffers[i];
|
||||
}
|
||||
ctx->DrawBuffer->_NumColorDrawBuffers = brw->metaops.restore_num_draw_buffers;
|
||||
|
||||
ctx->FragmentProgram.Current = brw->metaops.restore_fp;
|
||||
|
||||
brw->state.draw_regions[0] = brw->metaops.saved_draw_region;
|
||||
brw->state.nr_draw_regions = brw->metaops.saved_nr_draw_regions;
|
||||
brw->state.depth_region = brw->metaops.saved_depth_region;
|
||||
brw->metaops.saved_draw_region = NULL;
|
||||
brw->metaops.saved_depth_region = NULL;
|
||||
brw->metaops.active = 0;
|
||||
|
||||
brw->state.dirty.mesa |= _NEW_BUFFERS;
|
||||
brw->state.dirty.brw |= BRW_NEW_METAOPS;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void brw_init_metaops( struct brw_context *brw )
|
||||
{
|
||||
init_attribs(brw);
|
||||
|
||||
|
||||
brw->intel.vtbl.install_meta_state = install_meta_state;
|
||||
brw->intel.vtbl.leave_meta_state = leave_meta_state;
|
||||
brw->intel.vtbl.meta_no_depth_write = meta_no_depth_write;
|
||||
brw->intel.vtbl.meta_no_stencil_write = meta_no_stencil_write;
|
||||
brw->intel.vtbl.meta_stencil_replace = meta_stencil_replace;
|
||||
brw->intel.vtbl.meta_depth_replace = meta_depth_replace;
|
||||
brw->intel.vtbl.meta_color_mask = meta_color_mask;
|
||||
brw->intel.vtbl.meta_no_texture = meta_no_texture;
|
||||
brw->intel.vtbl.meta_import_pixel_state = meta_import_pixel_state;
|
||||
brw->intel.vtbl.meta_frame_buffer_texture = meta_frame_buffer_texture;
|
||||
brw->intel.vtbl.meta_draw_region = meta_draw_region;
|
||||
brw->intel.vtbl.meta_draw_quad = meta_draw_quad;
|
||||
brw->intel.vtbl.meta_texture_blend_replace = meta_texture_blend_replace;
|
||||
/* brw->intel.vtbl.meta_tex_rect_source = meta_tex_rect_source; */
|
||||
/* brw->intel.vtbl.meta_draw_format = set_draw_format; */
|
||||
}
|
||||
|
||||
void brw_destroy_metaops( struct brw_context *brw )
|
||||
{
|
||||
GLcontext *ctx = &brw->intel.ctx;
|
||||
|
||||
if (brw->metaops.vbo)
|
||||
ctx->Driver.DeleteBuffer( ctx, brw->metaops.vbo );
|
||||
|
||||
/* ctx->Driver.DeleteProgram( ctx, brw->metaops.fp ); */
|
||||
/* ctx->Driver.DeleteProgram( ctx, brw->metaops.fp_tex ); */
|
||||
/* ctx->Driver.DeleteProgram( ctx, brw->metaops.vp ); */
|
||||
}
|
||||
|
|
@ -154,10 +154,7 @@ static void upload_pipelined_state_pointers(struct brw_context *brw )
|
|||
OUT_RELOC(brw->gs.state_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 1);
|
||||
else
|
||||
OUT_BATCH(0);
|
||||
if (!brw->metaops.active)
|
||||
OUT_RELOC(brw->clip.state_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 1);
|
||||
else
|
||||
OUT_BATCH(0);
|
||||
OUT_RELOC(brw->clip.state_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 1);
|
||||
OUT_RELOC(brw->sf.state_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 0);
|
||||
OUT_RELOC(brw->wm.state_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 0);
|
||||
OUT_RELOC(brw->cc.state_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 0);
|
||||
|
|
@ -186,7 +183,7 @@ static void upload_psp_urb_cbs(struct brw_context *brw )
|
|||
const struct brw_tracked_state brw_psp_urb_cbs = {
|
||||
.dirty = {
|
||||
.mesa = 0,
|
||||
.brw = BRW_NEW_URB_FENCE | BRW_NEW_METAOPS | BRW_NEW_BATCH,
|
||||
.brw = BRW_NEW_URB_FENCE | BRW_NEW_BATCH,
|
||||
.cache = (CACHE_NEW_VS_UNIT |
|
||||
CACHE_NEW_GS_UNIT |
|
||||
CACHE_NEW_GS_PROG |
|
||||
|
|
|
|||
|
|
@ -56,25 +56,16 @@ static void upload_sf_vp(struct brw_context *brw)
|
|||
y_bias = ctx->DrawBuffer->Height;
|
||||
}
|
||||
|
||||
/* _NEW_VIEWPORT, BRW_NEW_METAOPS */
|
||||
/* _NEW_VIEWPORT */
|
||||
|
||||
if (!brw->metaops.active) {
|
||||
const GLfloat *v = ctx->Viewport._WindowMap.m;
|
||||
const GLfloat *v = ctx->Viewport._WindowMap.m;
|
||||
|
||||
sfv.viewport.m00 = v[MAT_SX];
|
||||
sfv.viewport.m11 = v[MAT_SY] * y_scale;
|
||||
sfv.viewport.m22 = v[MAT_SZ] * depth_scale;
|
||||
sfv.viewport.m30 = v[MAT_TX];
|
||||
sfv.viewport.m31 = v[MAT_TY] * y_scale + y_bias;
|
||||
sfv.viewport.m32 = v[MAT_TZ] * depth_scale;
|
||||
} else {
|
||||
sfv.viewport.m00 = 1;
|
||||
sfv.viewport.m11 = - 1;
|
||||
sfv.viewport.m22 = 1;
|
||||
sfv.viewport.m30 = 0;
|
||||
sfv.viewport.m31 = ctx->DrawBuffer->Height;
|
||||
sfv.viewport.m32 = 0;
|
||||
}
|
||||
sfv.viewport.m00 = v[MAT_SX];
|
||||
sfv.viewport.m11 = v[MAT_SY] * y_scale;
|
||||
sfv.viewport.m22 = v[MAT_SZ] * depth_scale;
|
||||
sfv.viewport.m30 = v[MAT_TX];
|
||||
sfv.viewport.m31 = v[MAT_TY] * y_scale + y_bias;
|
||||
sfv.viewport.m32 = v[MAT_TZ] * depth_scale;
|
||||
|
||||
/* _NEW_SCISSOR */
|
||||
|
||||
|
|
@ -108,7 +99,7 @@ const struct brw_tracked_state brw_sf_vp = {
|
|||
.dirty = {
|
||||
.mesa = (_NEW_VIEWPORT |
|
||||
_NEW_SCISSOR),
|
||||
.brw = BRW_NEW_METAOPS,
|
||||
.brw = 0,
|
||||
.cache = 0
|
||||
},
|
||||
.prepare = upload_sf_vp
|
||||
|
|
@ -309,8 +300,7 @@ const struct brw_tracked_state brw_sf_unit = {
|
|||
_NEW_LINE |
|
||||
_NEW_POINT |
|
||||
_NEW_SCISSOR),
|
||||
.brw = (BRW_NEW_URB_FENCE |
|
||||
BRW_NEW_METAOPS),
|
||||
.brw = BRW_NEW_URB_FENCE,
|
||||
.cache = (CACHE_NEW_SF_VP |
|
||||
CACHE_NEW_SF_PROG)
|
||||
},
|
||||
|
|
|
|||
|
|
@ -233,7 +233,6 @@ static struct dirty_bit_map brw_bits[] = {
|
|||
DEFINE_BIT(BRW_NEW_WM_INPUT_DIMENSIONS),
|
||||
DEFINE_BIT(BRW_NEW_INPUT_VARYING),
|
||||
DEFINE_BIT(BRW_NEW_PSP),
|
||||
DEFINE_BIT(BRW_NEW_METAOPS),
|
||||
DEFINE_BIT(BRW_NEW_FENCE),
|
||||
DEFINE_BIT(BRW_NEW_INDICES),
|
||||
DEFINE_BIT(BRW_NEW_VERTICES),
|
||||
|
|
|
|||
|
|
@ -101,11 +101,6 @@ static void brw_upload_vs_prog(struct brw_context *brw)
|
|||
key.copy_edgeflag = (brw->attribs.Polygon->FrontMode != GL_FILL ||
|
||||
brw->attribs.Polygon->BackMode != GL_FILL);
|
||||
|
||||
/* BRW_NEW_METAOPS
|
||||
*/
|
||||
if (brw->metaops.active)
|
||||
key.know_w_is_one = 1;
|
||||
|
||||
/* Make an early check for the key.
|
||||
*/
|
||||
dri_bo_unreference(brw->vs.prog_bo);
|
||||
|
|
@ -123,7 +118,7 @@ static void brw_upload_vs_prog(struct brw_context *brw)
|
|||
const struct brw_tracked_state brw_vs_prog = {
|
||||
.dirty = {
|
||||
.mesa = _NEW_TRANSFORM | _NEW_POLYGON,
|
||||
.brw = BRW_NEW_VERTEX_PROGRAM | BRW_NEW_METAOPS,
|
||||
.brw = BRW_NEW_VERTEX_PROGRAM,
|
||||
.cache = 0
|
||||
},
|
||||
.prepare = brw_upload_vs_prog
|
||||
|
|
|
|||
|
|
@ -43,7 +43,6 @@ struct brw_vs_prog_key {
|
|||
GLuint program_string_id;
|
||||
GLuint nr_userclip:4;
|
||||
GLuint copy_edgeflag:1;
|
||||
GLuint know_w_is_one:1;
|
||||
GLuint pad:26;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -871,21 +871,15 @@ static void emit_vertex_write( struct brw_vs_compile *c)
|
|||
}
|
||||
|
||||
/* Build ndc coords */
|
||||
if (!c->key.know_w_is_one) {
|
||||
ndc = get_tmp(c);
|
||||
emit_math1(c, BRW_MATH_FUNCTION_INV, ndc, brw_swizzle1(pos, 3), BRW_MATH_PRECISION_FULL);
|
||||
brw_MUL(p, brw_writemask(ndc, WRITEMASK_XYZ), pos, ndc);
|
||||
}
|
||||
else {
|
||||
ndc = pos;
|
||||
}
|
||||
ndc = get_tmp(c);
|
||||
emit_math1(c, BRW_MATH_FUNCTION_INV, ndc, brw_swizzle1(pos, 3), BRW_MATH_PRECISION_FULL);
|
||||
brw_MUL(p, brw_writemask(ndc, WRITEMASK_XYZ), pos, ndc);
|
||||
|
||||
/* Update the header for point size, user clipping flags, and -ve rhw
|
||||
* workaround.
|
||||
*/
|
||||
if ((c->prog_data.outputs_written & (1<<VERT_RESULT_PSIZ)) ||
|
||||
c->key.nr_userclip ||
|
||||
(!BRW_IS_G4X(p->brw) && !c->key.know_w_is_one))
|
||||
c->key.nr_userclip || !BRW_IS_G4X(p->brw))
|
||||
{
|
||||
struct brw_reg header1 = retype(get_tmp(c), BRW_REGISTER_TYPE_UD);
|
||||
GLuint i;
|
||||
|
|
@ -916,7 +910,7 @@ static void emit_vertex_write( struct brw_vs_compile *c)
|
|||
* Later, clipping will detect ucp[6] and ensure the primitive is
|
||||
* clipped against all fixed planes.
|
||||
*/
|
||||
if (!BRW_IS_G4X(p->brw) && !c->key.know_w_is_one) {
|
||||
if (!BRW_IS_G4X(p->brw)) {
|
||||
brw_CMP(p,
|
||||
vec8(brw_null_reg()),
|
||||
BRW_CONDITIONAL_L,
|
||||
|
|
|
|||
|
|
@ -64,7 +64,6 @@ static void brw_destroy_context( struct intel_context *intel )
|
|||
struct brw_context *brw = brw_context(&intel->ctx);
|
||||
int i;
|
||||
|
||||
brw_destroy_metaops(brw);
|
||||
brw_destroy_state(brw);
|
||||
brw_draw_destroy( brw );
|
||||
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@ void
|
|||
intel_clear_tris(GLcontext *ctx, GLbitfield mask)
|
||||
{
|
||||
struct intel_context *intel = intel_context(ctx);
|
||||
GLfloat vertices[4][4];
|
||||
GLfloat vertices[4][3];
|
||||
GLfloat color[4][4];
|
||||
GLfloat dst_z;
|
||||
struct gl_framebuffer *fb = ctx->DrawBuffer;
|
||||
|
|
@ -147,22 +147,18 @@ intel_clear_tris(GLcontext *ctx, GLbitfield mask)
|
|||
vertices[0][0] = fb->_Xmin;
|
||||
vertices[0][1] = fb->_Ymin;
|
||||
vertices[0][2] = dst_z;
|
||||
vertices[0][3] = 1.0;
|
||||
vertices[1][0] = fb->_Xmax;
|
||||
vertices[1][1] = fb->_Ymin;
|
||||
vertices[1][2] = dst_z;
|
||||
vertices[1][3] = 1.0;
|
||||
vertices[2][0] = fb->_Xmax;
|
||||
vertices[2][1] = fb->_Ymax;
|
||||
vertices[2][2] = dst_z;
|
||||
vertices[2][3] = 1.0;
|
||||
vertices[3][0] = fb->_Xmin;
|
||||
vertices[3][1] = fb->_Ymax;
|
||||
vertices[3][2] = dst_z;
|
||||
vertices[3][3] = 1.0;
|
||||
|
||||
_mesa_ColorPointer(4, GL_FLOAT, 4 * sizeof(GLfloat), &color);
|
||||
_mesa_VertexPointer(4, GL_FLOAT, 4 * sizeof(GLfloat), &vertices);
|
||||
_mesa_VertexPointer(3, GL_FLOAT, 3 * sizeof(GLfloat), &vertices);
|
||||
_mesa_Enable(GL_COLOR_ARRAY);
|
||||
_mesa_Enable(GL_VERTEX_ARRAY);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue