i965: Push down the gl_vertex_array inputs into i965.
Let the i965 backend have its own gl_vertex_array array and basically reimplement the way _vbo_draw works. Note that brw_draw_indirect_prims calls brw_draw_prims internally and gets its update to Array._DrawArray by this way. Reviewed-by: Brian Paul <brianp@vmware.com> Signed-off-by: Mathias Fröhlich <Mathias.Froehlich@web.de>
This commit is contained in:
parent
fca1550550
commit
4db9d83a2d
|
@ -284,6 +284,7 @@ brw_init_driver_functions(struct brw_context *brw,
|
||||||
functions->GetString = intel_get_string;
|
functions->GetString = intel_get_string;
|
||||||
functions->UpdateState = intel_update_state;
|
functions->UpdateState = intel_update_state;
|
||||||
|
|
||||||
|
brw_init_draw_functions(functions);
|
||||||
intelInitTextureFuncs(functions);
|
intelInitTextureFuncs(functions);
|
||||||
intelInitTextureImageFuncs(functions);
|
intelInitTextureImageFuncs(functions);
|
||||||
intelInitTextureCopyImageFuncs(functions);
|
intelInitTextureCopyImageFuncs(functions);
|
||||||
|
|
|
@ -36,6 +36,7 @@
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include "main/macros.h"
|
#include "main/macros.h"
|
||||||
#include "main/mtypes.h"
|
#include "main/mtypes.h"
|
||||||
|
#include "vbo/vbo.h"
|
||||||
#include "brw_structs.h"
|
#include "brw_structs.h"
|
||||||
#include "brw_pipe_control.h"
|
#include "brw_pipe_control.h"
|
||||||
#include "compiler/brw_compiler.h"
|
#include "compiler/brw_compiler.h"
|
||||||
|
@ -954,6 +955,9 @@ struct brw_context
|
||||||
* These bitfields indicate which workarounds are needed.
|
* These bitfields indicate which workarounds are needed.
|
||||||
*/
|
*/
|
||||||
uint8_t attrib_wa_flags[VERT_ATTRIB_MAX];
|
uint8_t attrib_wa_flags[VERT_ATTRIB_MAX];
|
||||||
|
|
||||||
|
/* For the initial pushdown, keep the list of vbo inputs. */
|
||||||
|
struct vbo_inputs draw_arrays;
|
||||||
} vb;
|
} vb;
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
|
|
|
@ -34,6 +34,7 @@
|
||||||
#include "main/macros.h"
|
#include "main/macros.h"
|
||||||
#include "main/transformfeedback.h"
|
#include "main/transformfeedback.h"
|
||||||
#include "main/framebuffer.h"
|
#include "main/framebuffer.h"
|
||||||
|
#include "main/varray.h"
|
||||||
#include "tnl/tnl.h"
|
#include "tnl/tnl.h"
|
||||||
#include "vbo/vbo.h"
|
#include "vbo/vbo.h"
|
||||||
#include "swrast/swrast.h"
|
#include "swrast/swrast.h"
|
||||||
|
@ -941,11 +942,16 @@ brw_draw_prims(struct gl_context *ctx,
|
||||||
{
|
{
|
||||||
unsigned i;
|
unsigned i;
|
||||||
struct brw_context *brw = brw_context(ctx);
|
struct brw_context *brw = brw_context(ctx);
|
||||||
const struct gl_vertex_array *arrays = ctx->Array._DrawArrays;
|
const struct gl_vertex_array *arrays;
|
||||||
int predicate_state = brw->predicate.state;
|
int predicate_state = brw->predicate.state;
|
||||||
struct brw_transform_feedback_object *xfb_obj =
|
struct brw_transform_feedback_object *xfb_obj =
|
||||||
(struct brw_transform_feedback_object *) gl_xfb_obj;
|
(struct brw_transform_feedback_object *) gl_xfb_obj;
|
||||||
|
|
||||||
|
/* The initial pushdown of the inputs array into the drivers */
|
||||||
|
_mesa_set_drawing_arrays(ctx, brw->vb.draw_arrays.inputs);
|
||||||
|
arrays = ctx->Array._DrawArrays;
|
||||||
|
_vbo_update_inputs(ctx, &brw->vb.draw_arrays);
|
||||||
|
|
||||||
if (!brw_check_conditional_render(brw))
|
if (!brw_check_conditional_render(brw))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -1075,14 +1081,19 @@ brw_draw_indirect_prims(struct gl_context *ctx,
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
brw_draw_init(struct brw_context *brw)
|
brw_init_draw_functions(struct dd_function_table *functions)
|
||||||
{
|
{
|
||||||
struct gl_context *ctx = &brw->ctx;
|
|
||||||
|
|
||||||
/* Register our drawing function:
|
/* Register our drawing function:
|
||||||
*/
|
*/
|
||||||
vbo_set_draw_func(ctx, brw_draw_prims);
|
functions->Draw = brw_draw_prims;
|
||||||
vbo_set_indirect_draw_func(ctx, brw_draw_indirect_prims);
|
functions->DrawIndirect = brw_draw_indirect_prims;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
brw_draw_init(struct brw_context *brw)
|
||||||
|
{
|
||||||
|
/* Keep our list of gl_vertex_array inputs */
|
||||||
|
_vbo_init_inputs(&brw->vb.draw_arrays);
|
||||||
|
|
||||||
for (int i = 0; i < VERT_ATTRIB_MAX; i++)
|
for (int i = 0; i < VERT_ATTRIB_MAX; i++)
|
||||||
brw->vb.inputs[i].buffer = -1;
|
brw->vb.inputs[i].buffer = -1;
|
||||||
|
|
|
@ -55,6 +55,7 @@ void brw_draw_prims(struct gl_context *ctx,
|
||||||
unsigned stream,
|
unsigned stream,
|
||||||
struct gl_buffer_object *indirect );
|
struct gl_buffer_object *indirect );
|
||||||
|
|
||||||
|
void brw_init_draw_functions(struct dd_function_table *functions);
|
||||||
void brw_draw_init( struct brw_context *brw );
|
void brw_draw_init( struct brw_context *brw );
|
||||||
void brw_draw_destroy( struct brw_context *brw );
|
void brw_draw_destroy( struct brw_context *brw );
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue