mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-24 16:50:22 +01:00
nvk: Import 3D context init code from nouveau
We really should organize this better but at least we have it now. This should pretty much be equivalent to what nouveau is doing on screen/context create. Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24326>
This commit is contained in:
parent
7315650739
commit
617532b24e
1 changed files with 242 additions and 0 deletions
|
|
@ -1,9 +1,251 @@
|
|||
#include "nvk_cmd_buffer.h"
|
||||
#include "nvk_device.h"
|
||||
#include "nvk_physical_device.h"
|
||||
|
||||
#include "nouveau_context.h"
|
||||
|
||||
#include "nvk_cl9097.h"
|
||||
#include "nvk_cla097.h"
|
||||
#include "nvk_clb197.h"
|
||||
#include "nvk_clc397.h"
|
||||
#include "nvk_clc597.h"
|
||||
|
||||
static inline uint16_t
|
||||
nvk_cmd_buffer_3d_cls(struct nvk_cmd_buffer *cmd)
|
||||
{
|
||||
return nvk_cmd_buffer_device(cmd)->ctx->eng3d.cls;
|
||||
}
|
||||
|
||||
static void
|
||||
magic_3d_init(struct nvk_cmd_buffer *cmd)
|
||||
{
|
||||
struct nouveau_ws_push *p = cmd->push;
|
||||
|
||||
P_IMMD(p, NV9097, SET_REDUCE_COLOR_THRESHOLDS_UNORM8, {
|
||||
.all_covered_all_hit_once = 0xff,
|
||||
});
|
||||
P_MTHD(p, NV9097, SET_REDUCE_COLOR_THRESHOLDS_UNORM10);
|
||||
P_NV9097_SET_REDUCE_COLOR_THRESHOLDS_UNORM10(p, {
|
||||
.all_covered_all_hit_once = 0xff,
|
||||
});
|
||||
P_NV9097_SET_REDUCE_COLOR_THRESHOLDS_UNORM16(p, {
|
||||
.all_covered_all_hit_once = 0xff,
|
||||
});
|
||||
P_NV9097_SET_REDUCE_COLOR_THRESHOLDS_FP11(p, {
|
||||
.all_covered_all_hit_once = 0x3f,
|
||||
});
|
||||
P_NV9097_SET_REDUCE_COLOR_THRESHOLDS_FP16(p, {
|
||||
.all_covered_all_hit_once = 0xff,
|
||||
});
|
||||
P_NV9097_SET_REDUCE_COLOR_THRESHOLDS_SRGB8(p, {
|
||||
.all_covered_all_hit_once = 0xff,
|
||||
});
|
||||
if (nvk_cmd_buffer_3d_cls(cmd) < VOLTA_A)
|
||||
P_IMMD(p, NV9097, SET_ALPHA_FRACTION, 0x3f);
|
||||
|
||||
P_IMMD(p, NV9097, CHECK_SPH_VERSION, {
|
||||
.current = 3,
|
||||
.oldest_supported = 3,
|
||||
});
|
||||
P_IMMD(p, NV9097, CHECK_AAM_VERSION, {
|
||||
.current = 2,
|
||||
.oldest_supported = 2,
|
||||
});
|
||||
|
||||
if (nvk_cmd_buffer_3d_cls(cmd) < VOLTA_A)
|
||||
P_IMMD(p, NV9097, SET_SHADER_SCHEDULING, MODE_OLDEST_THREAD_FIRST);
|
||||
|
||||
P_IMMD(p, NV9097, SET_L2_CACHE_CONTROL_FOR_ROP_PREFETCH_READ_REQUESTS,
|
||||
POLICY_EVICT_NORMAL);
|
||||
P_IMMD(p, NV9097, SET_L2_CACHE_CONTROL_FOR_ROP_NONINTERLOCKED_READ_REQUESTS,
|
||||
POLICY_EVICT_NORMAL);
|
||||
P_IMMD(p, NV9097, SET_L2_CACHE_CONTROL_FOR_ROP_INTERLOCKED_READ_REQUESTS,
|
||||
POLICY_EVICT_NORMAL);
|
||||
P_IMMD(p, NV9097, SET_L2_CACHE_CONTROL_FOR_ROP_NONINTERLOCKED_WRITE_REQUESTS,
|
||||
POLICY_EVICT_NORMAL);
|
||||
P_IMMD(p, NV9097, SET_L2_CACHE_CONTROL_FOR_ROP_INTERLOCKED_WRITE_REQUESTS,
|
||||
POLICY_EVICT_NORMAL);
|
||||
|
||||
P_IMMD(p, NV9097, SET_BLEND_PER_FORMAT_ENABLE, SNORM8_UNORM16_SNORM16_TRUE);
|
||||
|
||||
P_IMMD(p, NV9097, SET_ATTRIBUTE_DEFAULT, {
|
||||
.color_front_diffuse = COLOR_FRONT_DIFFUSE_VECTOR_0001,
|
||||
.color_front_specular = COLOR_FRONT_SPECULAR_VECTOR_0001,
|
||||
.generic_vector = GENERIC_VECTOR_VECTOR_0001,
|
||||
.fixed_fnc_texture = FIXED_FNC_TEXTURE_VECTOR_0001,
|
||||
.dx9_color0 = DX9_COLOR0_VECTOR_0001,
|
||||
.dx9_color1_to_color15 = DX9_COLOR1_TO_COLOR15_VECTOR_0000,
|
||||
});
|
||||
|
||||
P_IMMD(p, NV9097, SET_DA_OUTPUT, VERTEX_ID_USES_ARRAY_START_TRUE);
|
||||
|
||||
P_IMMD(p, NV9097, SET_RENDER_ENABLE_CONTROL,
|
||||
CONDITIONAL_LOAD_CONSTANT_BUFFER_FALSE);
|
||||
|
||||
P_IMMD(p, NV9097, SET_PS_OUTPUT_SAMPLE_MASK_USAGE, {
|
||||
.enable = ENABLE_TRUE,
|
||||
.qualify_by_anti_alias_enable = QUALIFY_BY_ANTI_ALIAS_ENABLE_ENABLE,
|
||||
});
|
||||
|
||||
if (nvk_cmd_buffer_3d_cls(cmd) < VOLTA_A)
|
||||
P_IMMD(p, NV9097, SET_PRIM_CIRCULAR_BUFFER_THROTTLE, 0x3fffff);
|
||||
|
||||
P_IMMD(p, NV9097, SET_BLEND_OPT_CONTROL, ALLOW_FLOAT_PIXEL_KILLS_TRUE);
|
||||
P_IMMD(p, NV9097, SET_BLEND_FLOAT_OPTION, ZERO_TIMES_ANYTHING_IS_ZERO_TRUE);
|
||||
|
||||
if (nvk_cmd_buffer_3d_cls(cmd) < VOLTA_A)
|
||||
P_IMMD(p, NV9097, SET_MAX_TI_WARPS_PER_BATCH, 3);
|
||||
|
||||
if (nvk_cmd_buffer_3d_cls(cmd) >= KEPLER_A &&
|
||||
nvk_cmd_buffer_3d_cls(cmd) < VOLTA_A) {
|
||||
P_IMMD(p, NVA097, SET_TEXTURE_INSTRUCTION_OPERAND,
|
||||
ORDERING_KEPLER_ORDER);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
nvk_cmd_buffer_begin_graphics(struct nvk_cmd_buffer *cmd,
|
||||
const VkCommandBufferBeginInfo *pBeginInfo)
|
||||
{
|
||||
struct nouveau_ws_push *p = cmd->push;
|
||||
|
||||
P_MTHD(p, NV9097, SET_OBJECT);
|
||||
P_NV9097_SET_OBJECT(p, {
|
||||
.class_id = nvk_cmd_buffer_3d_cls(cmd),
|
||||
.engine_id = 0,
|
||||
});
|
||||
|
||||
P_IMMD(p, NV9097, SET_RENDER_ENABLE_C, MODE_TRUE);
|
||||
|
||||
P_IMMD(p, NV9097, SET_Z_COMPRESSION, ENABLE_TRUE);
|
||||
P_MTHD(p, NV9097, SET_COLOR_COMPRESSION(0));
|
||||
for (unsigned i = 0; i < 8; i++)
|
||||
P_NV9097_SET_COLOR_COMPRESSION(p, i, ENABLE_TRUE);
|
||||
|
||||
P_IMMD(p, NV9097, SET_CT_SELECT, { .target_count = 1 });
|
||||
|
||||
// P_MTHD(cmd->push, NVC0_3D, CSAA_ENABLE);
|
||||
// P_INLINE_DATA(cmd->push, 0);
|
||||
|
||||
P_IMMD(p, NV9097, SET_ANTI_ALIAS_ENABLE, V_FALSE);
|
||||
P_IMMD(p, NV9097, SET_ANTI_ALIAS, SAMPLES_MODE_1X1);
|
||||
P_IMMD(p, NV9097, SET_ANTI_ALIAS_ALPHA_CONTROL, {
|
||||
.alpha_to_coverage = ALPHA_TO_COVERAGE_DISABLE,
|
||||
.alpha_to_one = ALPHA_TO_ONE_DISABLE,
|
||||
});
|
||||
P_IMMD(p, NV9097, SET_ALIASED_LINE_WIDTH_ENABLE, V_TRUE);
|
||||
|
||||
P_IMMD(p, NV9097, SET_DA_PRIMITIVE_RESTART_VERTEX_ARRAY, ENABLE_TRUE);
|
||||
|
||||
P_IMMD(p, NV9097, SET_BLEND_SEPARATE_FOR_ALPHA, ENABLE_TRUE);
|
||||
P_IMMD(p, NV9097, SET_SINGLE_ROP_CONTROL, ENABLE_FALSE);
|
||||
|
||||
P_IMMD(p, NV9097, SET_SHADE_MODE, V_OGL_SMOOTH);
|
||||
|
||||
P_IMMD(p, NV9097, SET_API_VISIBLE_CALL_LIMIT, V__128);
|
||||
|
||||
P_IMMD(p, NV9097, SET_ZCULL_STATS, ENABLE_TRUE);
|
||||
|
||||
P_IMMD(p, NV9097, SET_L1_CONFIGURATION,
|
||||
DIRECTLY_ADDRESSABLE_MEMORY_SIZE_48KB);
|
||||
|
||||
magic_3d_init(cmd);
|
||||
|
||||
/* TODO: Vertex runout */
|
||||
/* TODO: temp */
|
||||
|
||||
P_IMMD(p, NV9097, SET_SHADER_LOCAL_MEMORY_WINDOW, 0xff000000); /* TODO */
|
||||
|
||||
/* TODO: TIC */
|
||||
/* TODO: TSC */
|
||||
|
||||
P_IMMD(p, NV9097, SET_WINDOW_ORIGIN, {
|
||||
.mode = MODE_UPPER_LEFT,
|
||||
.flip_y = FLIP_Y_FALSE,
|
||||
});
|
||||
|
||||
P_MTHD(p, NV9097, SET_WINDOW_OFFSET_X);
|
||||
P_NV9097_SET_WINDOW_OFFSET_X(p, 0);
|
||||
P_NV9097_SET_WINDOW_OFFSET_Y(p, 0);
|
||||
|
||||
P_IMMD(p, NV9097, SET_ACTIVE_ZCULL_REGION, 0x3f);
|
||||
P_IMMD(p, NV9097, SET_WINDOW_CLIP_ENABLE, V_FALSE);
|
||||
P_IMMD(p, NV9097, SET_CLIP_ID_TEST, ENABLE_FALSE);
|
||||
|
||||
P_IMMD(p, NV9097, X_X_X_SET_CLEAR_CONTROL, {
|
||||
.respect_stencil_mask = RESPECT_STENCIL_MASK_FALSE,
|
||||
.use_clear_rect = USE_CLEAR_RECT_FALSE,
|
||||
});
|
||||
|
||||
P_IMMD(p, NV9097, SET_VIEWPORT_SCALE_OFFSET, ENABLE_TRUE);
|
||||
|
||||
P_IMMD(p, NV9097, SET_VIEWPORT_CLIP_CONTROL, {
|
||||
.min_z_zero_max_z_one = MIN_Z_ZERO_MAX_Z_ONE_TRUE,
|
||||
.pixel_min_z = PIXEL_MIN_Z_CLAMP,
|
||||
.pixel_max_z = PIXEL_MAX_Z_CLIP,
|
||||
.geometry_guardband = GEOMETRY_GUARDBAND_SCALE_256,
|
||||
.line_point_cull_guardband = LINE_POINT_CULL_GUARDBAND_SCALE_256,
|
||||
.geometry_clip = GEOMETRY_CLIP_WZERO_CLIP,
|
||||
.geometry_guardband_z = GEOMETRY_GUARDBAND_Z_SAME_AS_XY_GUARDBAND,
|
||||
});
|
||||
|
||||
for (unsigned i = 0; i < 16; i++)
|
||||
P_IMMD(p, NV9097, SET_SCISSOR_ENABLE(i), V_FALSE);
|
||||
|
||||
/* TODO: Macros */
|
||||
|
||||
P_IMMD(p, NV9097, SET_RASTER_ENABLE, V_TRUE);
|
||||
P_IMMD(p, NV9097, SET_CT_MRT_ENABLE, V_TRUE);
|
||||
P_IMMD(p, NV9097, SET_PIPELINE_SHADER(3), {
|
||||
.enable = ENABLE_FALSE,
|
||||
.type = TYPE_TESSELLATION,
|
||||
});
|
||||
P_IMMD(p, NV9097, SET_PIPELINE_SHADER(4), {
|
||||
.enable = ENABLE_FALSE,
|
||||
.type = TYPE_GEOMETRY,
|
||||
});
|
||||
P_IMMD(p, NV9097, SET_PIPELINE_SHADER(5), {
|
||||
.enable = ENABLE_FALSE,
|
||||
.type = TYPE_PIXEL,
|
||||
});
|
||||
// P_MTHD(cmd->push, NVC0_3D, MACRO_GP_SELECT);
|
||||
// P_INLINE_DATA(cmd->push, 0x40);
|
||||
P_IMMD(p, NV9097, SET_RT_LAYER, {
|
||||
.v = 0,
|
||||
.control = CONTROL_V_SELECTS_LAYER,
|
||||
});
|
||||
// P_MTHD(cmd->push, NVC0_3D, MACRO_TEP_SELECT;
|
||||
// P_INLINE_DATA(cmd->push, 0x30);
|
||||
P_IMMD(p, NV9097, SET_PATCH, 3);
|
||||
P_IMMD(p, NV9097, SET_PIPELINE_SHADER(2), {
|
||||
.enable = ENABLE_FALSE,
|
||||
.type = TYPE_TESSELLATION_INIT,
|
||||
});
|
||||
P_IMMD(p, NV9097, SET_PIPELINE_SHADER(0), {
|
||||
.enable = ENABLE_FALSE,
|
||||
.type = TYPE_VERTEX_CULL_BEFORE_FETCH,
|
||||
});
|
||||
|
||||
P_IMMD(p, NV9097, SET_POINT_SPRITE_SELECT, {
|
||||
.rmode = RMODE_ZERO,
|
||||
.origin = ORIGIN_BOTTOM,
|
||||
.texture0 = TEXTURE0_PASSTHROUGH,
|
||||
.texture1 = TEXTURE1_PASSTHROUGH,
|
||||
.texture2 = TEXTURE2_PASSTHROUGH,
|
||||
.texture3 = TEXTURE3_PASSTHROUGH,
|
||||
.texture4 = TEXTURE4_PASSTHROUGH,
|
||||
.texture5 = TEXTURE5_PASSTHROUGH,
|
||||
.texture6 = TEXTURE6_PASSTHROUGH,
|
||||
.texture7 = TEXTURE7_PASSTHROUGH,
|
||||
.texture8 = TEXTURE8_PASSTHROUGH,
|
||||
.texture9 = TEXTURE9_PASSTHROUGH,
|
||||
});
|
||||
P_IMMD(p, NV9097, SET_POINT_CENTER_MODE, V_OGL);
|
||||
P_IMMD(p, NV9097, SET_EDGE_FLAG, V_TRUE);
|
||||
P_IMMD(p, NV9097, SET_SAMPLER_BINDING, V_INDEPENDENTLY);
|
||||
P_IMMD(p, NV9097, INVALIDATE_SAMPLER_CACHE, {
|
||||
.lines = LINES_ALL
|
||||
});
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue