"description": "hasvk: add restrictions for 3DSTATE_RASTER::AntiAliasingEnable",
"nominated": true,
"nomination_type": 0,
- "resolution": 0,
+ "resolution": 1,
"main_sha": null,
"because_sha": null
},
#include "vk_device.h"
#include "vk_drm_syncobj.h"
#include "vk_enum_defines.h"
+#include "vk_format.h"
#include "vk_framebuffer.h"
#include "vk_graphics_state.h"
#include "vk_image.h"
uint32_t index_offset;
struct vk_sample_locations_state sample_locations;
+
+ bool has_uint_rt;
};
enum anv_depth_reg_mode {
return true;
}
+static inline void
+anv_cmd_graphic_state_update_has_uint_rt(struct anv_cmd_graphics_state *state)
+{
+ state->has_uint_rt = false;
+ for (unsigned a = 0; a < state->color_att_count; a++) {
+ if (vk_format_is_int(state->color_att[a].vk_format)) {
+ state->has_uint_rt = true;
+ break;
+ }
+ }
+}
+
#define ANV_DECL_GET_GRAPHICS_PROG_DATA_FUNC(prefix, stage) \
static inline const struct brw_##prefix##_prog_data * \
get_##prefix##_prog_data(const struct anv_graphics_pipeline *pipeline) \
inheritance_info->stencilAttachmentFormat;
cmd_buffer->state.gfx.dirty |= ANV_CMD_DIRTY_RENDER_TARGETS;
+
+ anv_cmd_graphic_state_update_has_uint_rt(gfx);
}
}
}
}
+ anv_cmd_graphic_state_update_has_uint_rt(gfx);
+
const struct anv_image_view *fsr_iview = NULL;
const VkRenderingFragmentShadingRateAttachmentInfoKHR *fsr_att =
vk_find_struct_const(pRenderingInfo->pNext,
uint32_t ms_rast_mode =
genX(ms_rasterization_mode)(pipeline, dynamic_raster_mode);
+ /* From the Haswell PRM, Volume 2b, documentation for
+ * 3DSTATE_SF, "Antialiasing Enable":
+ *
+ * "This field must be disabled if any of the render targets
+ * have integer (UINT or SINT) surface format."
+ */
bool aa_enable = anv_rasterization_aa_mode(dynamic_raster_mode,
- pipeline->line_mode);
+ pipeline->line_mode) &&
+ !cmd_buffer->state.gfx.has_uint_rt;
uint32_t sf_dw[GENX(3DSTATE_SF_length)];
struct GENX(3DSTATE_SF) sf = {
pipeline->line_mode, dyn->rs.line.width,
&api_mode, &msaa_raster_enable);
- bool aa_enable = anv_rasterization_aa_mode(dynamic_raster_mode,
- pipeline->line_mode);
+ /* From the Browadwell PRM, Volume 2, documentation for
+ * 3DSTATE_RASTER, "Antialiasing Enable":
+ *
+ * "This field must be disabled if any of the render targets
+ * have integer (UINT or SINT) surface format."
+ *
+ * Additionally internal documentation for Gfx12+ states:
+ *
+ * "This bit MUST not be set when NUM_MULTISAMPLES > 1 OR
+ * FORCED_SAMPLE_COUNT > 1."
+ */
+ bool aa_enable =
+ anv_rasterization_aa_mode(dynamic_raster_mode, pipeline->line_mode) &&
+ !cmd_buffer->state.gfx.has_uint_rt;
uint32_t raster_dw[GENX(3DSTATE_RASTER_length)];
struct GENX(3DSTATE_RASTER) raster = {