ソースを参照

st/mesa: Copy VP TGSI tokens if they exist, even for NIR shaders.

Even if the driver wants to use NIR shaders, we may need to have TGSI
tokens for creating draw module vertex shaders for the feedback/select
render modes.

So...if the st_vertex_program has any TGSI...copy it to the variant.

Acked-by: Eric Anholt <eric@anholt.net>
Tested-by: Eric Anholt <eric@anholt.net>
Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
tags/19.1-branchpoint
Kenneth Graunke 6年前
コミット
3b4929ec6e
1個のファイルの変更8行の追加2行の削除
  1. 8
    2
      src/mesa/state_tracker/st_program.c

+ 8
- 2
src/mesa/state_tracker/st_program.c ファイルの表示

@@ -554,6 +554,14 @@ st_create_vp_variant(struct st_context *st,
vpv->tgsi.stream_output = stvp->tgsi.stream_output;
vpv->num_inputs = stvp->num_inputs;

/* When generating a NIR program, we usually don't have TGSI tokens.
* However, we do create them for ARB_vertex_program / fixed-function VS
* programs which we may need to use with the draw module for legacy
* feedback/select emulation. If they exist, copy them.
*/
if (stvp->tgsi.tokens)
vpv->tgsi.tokens = tgsi_dup_tokens(stvp->tgsi.tokens);

if (stvp->tgsi.type == PIPE_SHADER_IR_NIR) {
vpv->tgsi.type = PIPE_SHADER_IR_NIR;
vpv->tgsi.ir.nir = nir_shader_clone(NULL, stvp->tgsi.ir.nir);
@@ -573,8 +581,6 @@ st_create_vp_variant(struct st_context *st,
return vpv;
}

vpv->tgsi.tokens = tgsi_dup_tokens(stvp->tgsi.tokens);

/* Emulate features. */
if (key->clamp_color || key->passthrough_edgeflags) {
const struct tgsi_token *tokens;

読み込み中…
キャンセル
保存