mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-07 10:10:28 +01:00
nvk: Add CCW, POINT_MODE flags for set_tess_params
Reviewed-by: Mary Guillemard <mary@mary.zone> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/39571>
This commit is contained in:
parent
384cc81464
commit
96d9a2b421
7 changed files with 37 additions and 19 deletions
|
|
@ -191,8 +191,10 @@ struct nak_shader_info {
|
|||
enum nak_ts_domain domain;
|
||||
enum nak_ts_spacing spacing;
|
||||
enum nak_ts_prims prims;
|
||||
bool ccw;
|
||||
bool point_mode;
|
||||
|
||||
uint8_t _pad[9];
|
||||
uint8_t _pad[7];
|
||||
} ts;
|
||||
|
||||
/* Used to initialize the union for other stages */
|
||||
|
|
|
|||
|
|
@ -304,6 +304,8 @@ impl ShaderBin {
|
|||
domain: ts_info.domain as u8,
|
||||
spacing: ts_info.spacing as u8,
|
||||
prims: ts_info.primitives as u8,
|
||||
ccw: ts_info.ccw,
|
||||
point_mode: ts_info.point_mode,
|
||||
_pad: Default::default(),
|
||||
},
|
||||
}
|
||||
|
|
|
|||
|
|
@ -120,6 +120,8 @@ fn init_info_from_nir(nak: &nak_compiler, nir: &nir_shader) -> ShaderInfo {
|
|||
} else {
|
||||
TessellationPrimitives::TrianglesCW
|
||||
},
|
||||
point_mode: info_tess.point_mode(),
|
||||
ccw: info_tess.ccw(),
|
||||
})
|
||||
}
|
||||
_ => panic!("Unknown shader stage"),
|
||||
|
|
|
|||
|
|
@ -9161,6 +9161,8 @@ pub struct TessellationShaderInfo {
|
|||
pub domain: TessellationDomain,
|
||||
pub spacing: TessellationSpacing,
|
||||
pub primitives: TessellationPrimitives,
|
||||
pub ccw: bool,
|
||||
pub point_mode: bool,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
|
|
|
|||
|
|
@ -1605,20 +1605,6 @@ nvk_cmd_bind_graphics_shader(struct nvk_cmd_buffer *cmd,
|
|||
cmd->state.gfx.shaders_dirty |= mesa_to_vk_shader_stage(stage);
|
||||
}
|
||||
|
||||
uint32_t
|
||||
nvk_mme_tess_params(enum nak_ts_domain domain,
|
||||
enum nak_ts_spacing spacing,
|
||||
enum nak_ts_prims prims)
|
||||
{
|
||||
/* This is laid out the same as SET_TESSELLATION_PARAMETERS, only with an
|
||||
* extra bit for lower_left
|
||||
*/
|
||||
uint16_t params = ((uint16_t)domain << 0) |
|
||||
((uint16_t)spacing << 4) |
|
||||
((uint16_t)prims << 8);
|
||||
return nvk_mme_val_mask(params, 0x0fff);
|
||||
}
|
||||
|
||||
#define NVK_MME_TESS_PARAMS(domain, spacing, prims) \
|
||||
NVDEF(NV9097, SET_TESSELLATION_PARAMETERS, DOMAIN_TYPE, domain) | \
|
||||
NVDEF(NV9097, SET_TESSELLATION_PARAMETERS, SPACING, spacing) | \
|
||||
|
|
@ -1628,6 +1614,27 @@ nvk_mme_tess_params(enum nak_ts_domain domain,
|
|||
(NVK_MME_TESS_PARAMS(domain, spacing, prims) | flags)
|
||||
|
||||
#define LOWER_LEFT BITFIELD_BIT(12)
|
||||
#define POINT_MODE BITFIELD_BIT(13)
|
||||
#define CCW BITFIELD_BIT(14)
|
||||
|
||||
uint32_t
|
||||
nvk_mme_tess_params(enum nak_ts_domain domain,
|
||||
enum nak_ts_spacing spacing,
|
||||
enum nak_ts_prims prims,
|
||||
bool ccw, bool point_mode)
|
||||
{
|
||||
/* This is laid out the same as SET_TESSELLATION_PARAMETERS, only with an
|
||||
* extra bit for lower_left
|
||||
*/
|
||||
uint16_t params = ((uint16_t)domain << 0) |
|
||||
((uint16_t)spacing << 4) |
|
||||
((uint16_t)prims << 8);
|
||||
if (ccw)
|
||||
params |= CCW;
|
||||
if (point_mode)
|
||||
params |= POINT_MODE;
|
||||
return nvk_mme_val_mask(params, 0x0fff | POINT_MODE | CCW);
|
||||
}
|
||||
|
||||
static uint32_t
|
||||
nvk_mme_tess_lower_left(bool lower_left)
|
||||
|
|
@ -1728,7 +1735,7 @@ const struct nvk_mme_test_case nvk_mme_set_tess_params_tests[] = {{
|
|||
.init = (struct nvk_mme_mthd_data[]) {
|
||||
{
|
||||
NVK_SET_MME_SCRATCH(TESS_PARAMS),
|
||||
NVK_MME_TESS_STATE(TRIANGLE, INTEGER, TRIANGLES_CCW, 0)
|
||||
NVK_MME_TESS_STATE(TRIANGLE, INTEGER, TRIANGLES_CCW, CCW)
|
||||
},
|
||||
{ }
|
||||
},
|
||||
|
|
@ -1736,7 +1743,7 @@ const struct nvk_mme_test_case nvk_mme_set_tess_params_tests[] = {{
|
|||
.expected = (struct nvk_mme_mthd_data[]) {
|
||||
{
|
||||
NVK_SET_MME_SCRATCH(TESS_PARAMS),
|
||||
NVK_MME_TESS_STATE(TRIANGLE, INTEGER, TRIANGLES_CCW, LOWER_LEFT)
|
||||
NVK_MME_TESS_STATE(TRIANGLE, INTEGER, TRIANGLES_CCW, LOWER_LEFT | CCW)
|
||||
},
|
||||
{
|
||||
NV9097_SET_TESSELLATION_PARAMETERS,
|
||||
|
|
|
|||
|
|
@ -251,7 +251,8 @@ void nvk_mme_set_z_clamp(struct mme_builder *b);
|
|||
|
||||
uint32_t nvk_mme_tess_params(enum nak_ts_domain domain,
|
||||
enum nak_ts_spacing spacing,
|
||||
enum nak_ts_prims prims);
|
||||
enum nak_ts_prims prims,
|
||||
bool ccw, bool point_mode);
|
||||
uint32_t nvk_mme_anti_alias_min_sample_shading(float mss);
|
||||
uint32_t nvk_mme_shading_rate_control_sample_shading(bool sample_shading);
|
||||
|
||||
|
|
|
|||
|
|
@ -691,7 +691,9 @@ nvk_shader_fill_push(struct nvk_device *dev,
|
|||
P_1INC(p, NVB197, CALL_MME_MACRO(NVK_MME_SET_TESS_PARAMS));
|
||||
P_INLINE_DATA(p, nvk_mme_tess_params(shader->info.ts.domain,
|
||||
shader->info.ts.spacing,
|
||||
shader->info.ts.prims));
|
||||
shader->info.ts.prims,
|
||||
shader->info.ts.ccw,
|
||||
shader->info.ts.point_mode));
|
||||
}
|
||||
|
||||
if (shader->info.stage == MESA_SHADER_FRAGMENT) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue