vrend: replace uses of ctx->sub with sub_ctx

Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Reviewed-by: Reviewed-by: Chia-I Wu <olvaffe@gmail.com>
macos/master
Gert Wollny 5 years ago
parent 57a19772cb
commit 71eadba603
  1. 96
      src/vrend_renderer.c

@ -4533,6 +4533,8 @@ int vrend_draw_vbo(struct vrend_context *ctx,
bool new_program = false; bool new_program = false;
struct vrend_resource *indirect_res = NULL; struct vrend_resource *indirect_res = NULL;
struct vrend_resource *indirect_params_res = NULL; struct vrend_resource *indirect_params_res = NULL;
struct vrend_sub_context *sub_ctx = ctx->sub;
if (ctx->in_error) if (ctx->in_error)
return 0; return 0;
@ -4584,60 +4586,60 @@ int vrend_draw_vbo(struct vrend_context *ctx,
vrend_patch_blend_state(ctx); vrend_patch_blend_state(ctx);
// enable primitive-mode-dependent shader variants // enable primitive-mode-dependent shader variants
if (ctx->sub->prim_mode != (int)info->mode) { if (sub_ctx->prim_mode != (int)info->mode) {
// Only refresh shader program when switching in/out of GL_POINTS primitive mode // Only refresh shader program when switching in/out of GL_POINTS primitive mode
if (ctx->sub->prim_mode == PIPE_PRIM_POINTS if (sub_ctx->prim_mode == PIPE_PRIM_POINTS
|| (int)info->mode == PIPE_PRIM_POINTS) || (int)info->mode == PIPE_PRIM_POINTS)
ctx->sub->shader_dirty = true; sub_ctx->shader_dirty = true;
ctx->sub->prim_mode = (int)info->mode; sub_ctx->prim_mode = (int)info->mode;
} }
if (ctx->sub->shader_dirty || ctx->sub->swizzle_output_rgb_to_bgr) if (sub_ctx->shader_dirty || sub_ctx->swizzle_output_rgb_to_bgr)
new_program = vrend_select_program(ctx, info); new_program = vrend_select_program(ctx, info);
if (!ctx->sub->prog) { if (!sub_ctx->prog) {
vrend_printf("dropping rendering due to missing shaders: %s\n", ctx->debug_name); vrend_printf("dropping rendering due to missing shaders: %s\n", ctx->debug_name);
return 0; return 0;
} }
vrend_use_program(ctx, ctx->sub->prog->id); vrend_use_program(ctx, sub_ctx->prog->id);
vrend_draw_bind_objects(ctx, new_program); vrend_draw_bind_objects(ctx, new_program);
if (!ctx->sub->ve) { if (!sub_ctx->ve) {
vrend_printf("illegal VE setup - skipping renderering\n"); vrend_printf("illegal VE setup - skipping renderering\n");
return 0; return 0;
} }
float viewport_neg_val = ctx->sub->viewport_is_negative ? -1.0 : 1.0; float viewport_neg_val = sub_ctx->viewport_is_negative ? -1.0 : 1.0;
if (ctx->sub->prog->viewport_neg_val != viewport_neg_val) { if (sub_ctx->prog->viewport_neg_val != viewport_neg_val) {
glUniform1f(ctx->sub->prog->vs_ws_adjust_loc, viewport_neg_val); glUniform1f(sub_ctx->prog->vs_ws_adjust_loc, viewport_neg_val);
ctx->sub->prog->viewport_neg_val = viewport_neg_val; sub_ctx->prog->viewport_neg_val = viewport_neg_val;
} }
if (ctx->sub->rs_state.clip_plane_enable) { if (sub_ctx->rs_state.clip_plane_enable) {
for (i = 0 ; i < 8; i++) { for (i = 0 ; i < 8; i++) {
glUniform4fv(ctx->sub->prog->clip_locs[i], 1, (const GLfloat *)&ctx->sub->ucp_state.ucp[i]); glUniform4fv(sub_ctx->prog->clip_locs[i], 1, (const GLfloat *)&sub_ctx->ucp_state.ucp[i]);
} }
} }
if (has_feature(feat_gles31_vertex_attrib_binding)) if (has_feature(feat_gles31_vertex_attrib_binding))
vrend_draw_bind_vertex_binding(ctx, ctx->sub->ve); vrend_draw_bind_vertex_binding(ctx, sub_ctx->ve);
else else
vrend_draw_bind_vertex_legacy(ctx, ctx->sub->ve); vrend_draw_bind_vertex_legacy(ctx, sub_ctx->ve);
for (i = 0 ; i < ctx->sub->prog->ss[PIPE_SHADER_VERTEX]->sel->sinfo.num_inputs; i++) { for (i = 0 ; i < sub_ctx->prog->ss[PIPE_SHADER_VERTEX]->sel->sinfo.num_inputs; i++) {
struct vrend_vertex_element_array *va = ctx->sub->ve; struct vrend_vertex_element_array *va = sub_ctx->ve;
struct vrend_vertex_element *ve = &va->elements[i]; struct vrend_vertex_element *ve = &va->elements[i];
int vbo_index = ve->base.vertex_buffer_index; int vbo_index = ve->base.vertex_buffer_index;
if (!ctx->sub->vbo[vbo_index].base.buffer) { if (!sub_ctx->vbo[vbo_index].base.buffer) {
vrend_printf( "VBO missing vertex buffer\n"); vrend_printf( "VBO missing vertex buffer\n");
return 0; return 0;
} }
} }
if (info->indexed) { if (info->indexed) {
struct vrend_resource *res = (struct vrend_resource *)ctx->sub->ib.buffer; struct vrend_resource *res = (struct vrend_resource *)sub_ctx->ib.buffer;
if (!res) { if (!res) {
vrend_printf( "VBO missing indexed array buffer\n"); vrend_printf( "VBO missing indexed array buffer\n");
return 0; return 0;
@ -4646,19 +4648,19 @@ int vrend_draw_vbo(struct vrend_context *ctx,
} else } else
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
if (ctx->sub->current_so) { if (sub_ctx->current_so) {
if (ctx->sub->current_so->xfb_state == XFB_STATE_STARTED_NEED_BEGIN) { if (sub_ctx->current_so->xfb_state == XFB_STATE_STARTED_NEED_BEGIN) {
if (ctx->sub->shaders[PIPE_SHADER_GEOMETRY]) if (sub_ctx->shaders[PIPE_SHADER_GEOMETRY])
glBeginTransformFeedback(get_gs_xfb_mode(ctx->sub->shaders[PIPE_SHADER_GEOMETRY]->sinfo.gs_out_prim)); glBeginTransformFeedback(get_gs_xfb_mode(sub_ctx->shaders[PIPE_SHADER_GEOMETRY]->sinfo.gs_out_prim));
else if (ctx->sub->shaders[PIPE_SHADER_TESS_EVAL]) else if (sub_ctx->shaders[PIPE_SHADER_TESS_EVAL])
glBeginTransformFeedback(get_tess_xfb_mode(ctx->sub->shaders[PIPE_SHADER_TESS_EVAL]->sinfo.tes_prim, glBeginTransformFeedback(get_tess_xfb_mode(sub_ctx->shaders[PIPE_SHADER_TESS_EVAL]->sinfo.tes_prim,
ctx->sub->shaders[PIPE_SHADER_TESS_EVAL]->sinfo.tes_point_mode)); sub_ctx->shaders[PIPE_SHADER_TESS_EVAL]->sinfo.tes_point_mode));
else else
glBeginTransformFeedback(get_xfb_mode(info->mode)); glBeginTransformFeedback(get_xfb_mode(info->mode));
ctx->sub->current_so->xfb_state = XFB_STATE_STARTED; sub_ctx->current_so->xfb_state = XFB_STATE_STARTED;
} else if (ctx->sub->current_so->xfb_state == XFB_STATE_PAUSED) { } else if (sub_ctx->current_so->xfb_state == XFB_STATE_PAUSED) {
glResumeTransformFeedback(); glResumeTransformFeedback();
ctx->sub->current_so->xfb_state = XFB_STATE_STARTED; sub_ctx->current_so->xfb_state = XFB_STATE_STARTED;
} }
} }
@ -4676,16 +4678,16 @@ int vrend_draw_vbo(struct vrend_context *ctx,
if (has_feature(feat_indirect_draw)) { if (has_feature(feat_indirect_draw)) {
GLint buf = indirect_res ? indirect_res->id : 0; GLint buf = indirect_res ? indirect_res->id : 0;
if (ctx->sub->draw_indirect_buffer != buf) { if (sub_ctx->draw_indirect_buffer != buf) {
glBindBuffer(GL_DRAW_INDIRECT_BUFFER, buf); glBindBuffer(GL_DRAW_INDIRECT_BUFFER, buf);
ctx->sub->draw_indirect_buffer = buf; sub_ctx->draw_indirect_buffer = buf;
} }
if (has_feature(feat_indirect_params)) { if (has_feature(feat_indirect_params)) {
GLint buf = indirect_params_res ? indirect_params_res->id : 0; GLint buf = indirect_params_res ? indirect_params_res->id : 0;
if (ctx->sub->draw_indirect_params_buffer != buf) { if (sub_ctx->draw_indirect_params_buffer != buf) {
glBindBuffer(GL_PARAMETER_BUFFER_ARB, buf); glBindBuffer(GL_PARAMETER_BUFFER_ARB, buf);
ctx->sub->draw_indirect_params_buffer = buf; sub_ctx->draw_indirect_params_buffer = buf;
} }
} }
} }
@ -4698,9 +4700,9 @@ int vrend_draw_vbo(struct vrend_context *ctx,
* accept those blend equations. * accept those blend equations.
* When we transmit the blend mode through alpha_src_factor, alpha_dst_factor is always 0. * When we transmit the blend mode through alpha_src_factor, alpha_dst_factor is always 0.
*/ */
uint32_t blend_mask_shader = ctx->sub->shaders[PIPE_SHADER_FRAGMENT]->sinfo.fs_blend_equation_advanced; uint32_t blend_mask_shader = sub_ctx->shaders[PIPE_SHADER_FRAGMENT]->sinfo.fs_blend_equation_advanced;
uint32_t blend_mode = ctx->sub->blend_state.rt[0].alpha_src_factor; uint32_t blend_mode = sub_ctx->blend_state.rt[0].alpha_src_factor;
uint32_t alpha_dst_factor = ctx->sub->blend_state.rt[0].alpha_dst_factor; uint32_t alpha_dst_factor = sub_ctx->blend_state.rt[0].alpha_dst_factor;
bool use_advanced_blending = !has_feature(feat_framebuffer_fetch) && bool use_advanced_blending = !has_feature(feat_framebuffer_fetch) &&
has_feature(feat_blend_equation_advanced) && has_feature(feat_blend_equation_advanced) &&
blend_mask_shader != 0 && blend_mask_shader != 0 &&
@ -4735,7 +4737,7 @@ int vrend_draw_vbo(struct vrend_context *ctx,
} else { } else {
GLenum elsz; GLenum elsz;
GLenum mode = info->mode; GLenum mode = info->mode;
switch (ctx->sub->ib.index_size) { switch (sub_ctx->ib.index_size) {
case 1: case 1:
elsz = GL_UNSIGNED_BYTE; elsz = GL_UNSIGNED_BYTE;
break; break;
@ -4758,17 +4760,17 @@ int vrend_draw_vbo(struct vrend_context *ctx,
glDrawElementsIndirect(mode, elsz, (GLvoid const *)(unsigned long)info->indirect.offset); glDrawElementsIndirect(mode, elsz, (GLvoid const *)(unsigned long)info->indirect.offset);
} else if (info->index_bias) { } else if (info->index_bias) {
if (info->instance_count > 1) if (info->instance_count > 1)
glDrawElementsInstancedBaseVertex(mode, info->count, elsz, (void *)(unsigned long)ctx->sub->ib.offset, info->instance_count, info->index_bias); glDrawElementsInstancedBaseVertex(mode, info->count, elsz, (void *)(unsigned long)sub_ctx->ib.offset, info->instance_count, info->index_bias);
else if (info->min_index != 0 || info->max_index != (unsigned)-1) else if (info->min_index != 0 || info->max_index != (unsigned)-1)
glDrawRangeElementsBaseVertex(mode, info->min_index, info->max_index, info->count, elsz, (void *)(unsigned long)ctx->sub->ib.offset, info->index_bias); glDrawRangeElementsBaseVertex(mode, info->min_index, info->max_index, info->count, elsz, (void *)(unsigned long)sub_ctx->ib.offset, info->index_bias);
else else
glDrawElementsBaseVertex(mode, info->count, elsz, (void *)(unsigned long)ctx->sub->ib.offset, info->index_bias); glDrawElementsBaseVertex(mode, info->count, elsz, (void *)(unsigned long)sub_ctx->ib.offset, info->index_bias);
} else if (info->instance_count > 1) { } else if (info->instance_count > 1) {
glDrawElementsInstancedARB(mode, info->count, elsz, (void *)(unsigned long)ctx->sub->ib.offset, info->instance_count); glDrawElementsInstancedARB(mode, info->count, elsz, (void *)(unsigned long)sub_ctx->ib.offset, info->instance_count);
} else if (info->min_index != 0 || info->max_index != (unsigned)-1) } else if (info->min_index != 0 || info->max_index != (unsigned)-1)
glDrawRangeElements(mode, info->min_index, info->max_index, info->count, elsz, (void *)(unsigned long)ctx->sub->ib.offset); glDrawRangeElements(mode, info->min_index, info->max_index, info->count, elsz, (void *)(unsigned long)sub_ctx->ib.offset);
else else
glDrawElements(mode, info->count, elsz, (void *)(unsigned long)ctx->sub->ib.offset); glDrawElements(mode, info->count, elsz, (void *)(unsigned long)sub_ctx->ib.offset);
} }
if (info->primitive_restart) { if (info->primitive_restart) {
@ -4781,10 +4783,10 @@ int vrend_draw_vbo(struct vrend_context *ctx,
} }
} }
if (ctx->sub->current_so && has_feature(feat_transform_feedback2)) { if (sub_ctx->current_so && has_feature(feat_transform_feedback2)) {
if (ctx->sub->current_so->xfb_state == XFB_STATE_STARTED) { if (sub_ctx->current_so->xfb_state == XFB_STATE_STARTED) {
glPauseTransformFeedback(); glPauseTransformFeedback();
ctx->sub->current_so->xfb_state = XFB_STATE_PAUSED; sub_ctx->current_so->xfb_state = XFB_STATE_PAUSED;
} }
} }
return 0; return 0;

Loading…
Cancel
Save