mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 02:28:10 +02:00
r300g: add capability bit index_bias_supported
.. instead of calling r500_index_bias_supported(..) every draw call.
This commit is contained in:
parent
edda44e0dc
commit
536d527020
6 changed files with 10 additions and 12 deletions
|
|
@ -81,6 +81,8 @@ struct r300_capabilities {
|
|||
boolean high_second_pipe;
|
||||
/* DXTC texture swizzling. */
|
||||
boolean dxtc_swizzle;
|
||||
/* Index bias (AKA index offset). */
|
||||
boolean index_bias_supported;
|
||||
};
|
||||
|
||||
/* Enumerations for legibility and telling which card we're running on. */
|
||||
|
|
|
|||
|
|
@ -673,7 +673,6 @@ void r300_plug_in_stencil_ref_fallback(struct r300_context *r300);
|
|||
|
||||
/* r300_render.c */
|
||||
void r300_draw_flush_vbuf(struct r300_context *r300);
|
||||
boolean r500_index_bias_supported(struct r300_context *r300);
|
||||
void r500_emit_index_bias(struct r300_context *r300, int index_bias);
|
||||
|
||||
/* r300_state.c */
|
||||
|
|
|
|||
|
|
@ -1260,7 +1260,7 @@ unsigned r300_get_num_cs_end_dwords(struct r300_context *r300)
|
|||
/* Emitted in flush. */
|
||||
dwords += 26; /* emit_query_end */
|
||||
dwords += r300->hyperz_state.size + 2; /* emit_hyperz_end + zcache flush */
|
||||
if (r500_index_bias_supported(r300))
|
||||
if (r300->screen->caps.index_bias_supported)
|
||||
dwords += 2;
|
||||
|
||||
return dwords;
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ static void r300_flush(struct pipe_context* pipe,
|
|||
if (r300->dirty_hw) {
|
||||
r300_emit_hyperz_end(r300);
|
||||
r300_emit_query_end(r300);
|
||||
if (r500_index_bias_supported(r300))
|
||||
if (r300->screen->caps.index_bias_supported)
|
||||
r500_emit_index_bias(r300, 0);
|
||||
|
||||
r300->flush_counter++;
|
||||
|
|
|
|||
|
|
@ -118,12 +118,6 @@ static uint32_t r300_provoking_vertex_fixes(struct r300_context *r300,
|
|||
return color_control;
|
||||
}
|
||||
|
||||
boolean r500_index_bias_supported(struct r300_context *r300)
|
||||
{
|
||||
return r300->screen->caps.is_r500 &&
|
||||
r300->rws->get_value(r300->rws, R300_VID_DRM_2_3_0);
|
||||
}
|
||||
|
||||
void r500_emit_index_bias(struct r300_context *r300, int index_bias)
|
||||
{
|
||||
CS_LOCALS(r300);
|
||||
|
|
@ -193,13 +187,12 @@ static boolean r300_reserve_cs_dwords(struct r300_context *r300,
|
|||
boolean first_draw = flags & PREP_FIRST_DRAW;
|
||||
boolean emit_aos = flags & PREP_EMIT_AOS;
|
||||
boolean emit_aos_swtcl = flags & PREP_EMIT_AOS_SWTCL;
|
||||
boolean hw_index_bias = r500_index_bias_supported(r300);
|
||||
|
||||
/* Add dirty state, index offset, and AOS. */
|
||||
if (first_draw) {
|
||||
cs_dwords += r300_get_num_dirty_dwords(r300);
|
||||
|
||||
if (hw_index_bias)
|
||||
if (r300->screen->caps.index_bias_supported)
|
||||
cs_dwords += 2; /* emit_index_offset */
|
||||
|
||||
if (emit_aos)
|
||||
|
|
@ -537,7 +530,7 @@ static void r300_draw_range_elements(struct pipe_context* pipe,
|
|||
int buffer_offset = 0, index_offset = 0; /* for index bias emulation */
|
||||
unsigned new_offset;
|
||||
|
||||
if (indexBias && !r500_index_bias_supported(r300)) {
|
||||
if (indexBias && !r300->screen->caps.index_bias_supported) {
|
||||
r300_split_index_bias(r300, indexBias, &buffer_offset, &index_offset);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -457,6 +457,10 @@ struct pipe_screen* r300_screen_create(struct r300_winsys_screen *rws)
|
|||
r300_init_debug(r300screen);
|
||||
r300_parse_chipset(&r300screen->caps);
|
||||
|
||||
r300screen->caps.index_bias_supported =
|
||||
r300screen->caps.is_r500 &&
|
||||
rws->get_value(rws, R300_VID_DRM_2_3_0);
|
||||
|
||||
util_slab_create(&r300screen->pool_buffers,
|
||||
sizeof(struct r300_buffer), 64,
|
||||
UTIL_SLAB_SINGLETHREADED);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue