Przeglądaj źródła

gallium: add CAPs for indirect addressing and lower it in st/mesa when needed

Required because ATI and NVIDIA DX9 GPUs do not support indirect addressing
of temps, inputs, outputs, and consts (FS-only) or the hw support is so
limited that we cannot use it.

This should make r300g and possibly nvfx more feature complete.

Signed-off-by: Marek Olšák <maraeo@gmail.com>
tags/android-x86-2.2
Marek Olšák 15 lat temu
rodzic
commit
cbfdf262cc

+ 5
- 0
src/gallium/include/pipe/p_defines.h Wyświetl plik

@@ -483,7 +483,12 @@ enum pipe_shader_cap
PIPE_SHADER_CAP_MAX_TEMPS,
PIPE_SHADER_CAP_MAX_ADDRS,
PIPE_SHADER_CAP_MAX_PREDS,
/* boolean caps */
PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED,
PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR,
PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR,
PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR,
PIPE_SHADER_CAP_INDIRECT_CONST_ADDR,
};

/**

+ 9
- 0
src/mesa/state_tracker/st_extensions.c Wyświetl plik

@@ -175,6 +175,15 @@ void st_init_limits(struct st_context *st)

options->EmitNoCont = !screen->get_shader_param(screen, i, PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED);

options->EmitNoIndirectInput = !screen->get_shader_param(screen, i,
PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR);
options->EmitNoIndirectOutput = !screen->get_shader_param(screen, i,
PIPE_SHADER_CAP_INDIRECT_OUTPUT_ADDR);
options->EmitNoIndirectTemp = !screen->get_shader_param(screen, i,
PIPE_SHADER_CAP_INDIRECT_TEMP_ADDR);
options->EmitNoIndirectUniform = !screen->get_shader_param(screen, i,
PIPE_SHADER_CAP_INDIRECT_CONST_ADDR);

if(options->EmitNoLoops)
options->MaxUnrollIterations = MIN2(screen->get_shader_param(screen, i, PIPE_SHADER_CAP_MAX_INSTRUCTIONS), 65536);
}

Ładowanie…
Anuluj
Zapisz