Mesa (master): gallium/radeon/winsyses: boolean -> bool, TRUE -> true, FALSE -> false
Module: Mesa Branch: master Commit: 1c5a10497ab93495710989fe6c7dd1e776c51b05 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=1c5a10497ab93495710989fe6c7dd1e776c51b05 Author: Marek OlšákDate: Tue Jun 21 21:29:39 2016 +0200 gallium/radeon/winsyses: boolean -> bool, TRUE -> true, FALSE -> false Reviewed-by: Alex Deucher Reviewed-by: Vedran Miletić Reviewed-by: Nicolai Hähnle --- src/gallium/drivers/radeon/radeon_winsys.h| 43 +-- src/gallium/winsys/amdgpu/drm/amdgpu_bo.c | 14 ++-- src/gallium/winsys/amdgpu/drm/amdgpu_cs.c | 31 src/gallium/winsys/amdgpu/drm/amdgpu_cs.h | 10 +-- src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c | 20 +++--- src/gallium/winsys/radeon/drm/radeon_drm_bo.c | 14 ++-- src/gallium/winsys/radeon/drm/radeon_drm_cs.c | 36 +- src/gallium/winsys/radeon/drm/radeon_drm_cs.h | 10 +-- src/gallium/winsys/radeon/drm/radeon_drm_winsys.c | 88 +++ 9 files changed, 134 insertions(+), 132 deletions(-) diff --git a/src/gallium/drivers/radeon/radeon_winsys.h b/src/gallium/drivers/radeon/radeon_winsys.h index bbf91a8..afb970e 100644 --- a/src/gallium/drivers/radeon/radeon_winsys.h +++ b/src/gallium/drivers/radeon/radeon_winsys.h @@ -254,10 +254,10 @@ struct radeon_info { uint64_tgart_size; uint64_tvram_size; boolhas_dedicated_vram; -boolean has_virtual_memory; +boolhas_virtual_memory; boolgfx_ib_pad_with_type2; -boolean has_sdma; -boolean has_uvd; +boolhas_sdma; +boolhas_uvd; uint32_tvce_fw_version; uint32_tvce_harvest_config; uint32_tclock_crystal_freq; @@ -266,7 +266,7 @@ struct radeon_info { uint32_tdrm_major; /* version */ uint32_tdrm_minor; uint32_tdrm_patchlevel; -boolean has_userptr; +boolhas_userptr; /* Shader cores. */ uint32_tr600_max_quad_pipes; /* wave size / 16 */ @@ -279,7 +279,7 @@ struct radeon_info { uint32_tr300_num_gb_pipes; uint32_tr300_num_z_pipes; uint32_tr600_gb_backend_map; /* R600 harvest config */ -boolean r600_gb_backend_map_valid; +boolr600_gb_backend_map_valid; uint32_tr600_num_banks; uint32_tnum_render_backends; uint32_tnum_tile_pipes; /* pipe count from PIPE_CONFIG */ @@ -554,12 +554,12 @@ struct radeon_winsys { * \param buf A winsys buffer object to get the handle from. * \param whandle A winsys handle pointer. * \param strideA stride of the buffer in bytes, for texturing. - * \return TRUE on success. + * \return true on success. */ -boolean (*buffer_get_handle)(struct pb_buffer *buf, - unsigned stride, unsigned offset, - unsigned slice_size, - struct winsys_handle *whandle); +bool (*buffer_get_handle)(struct pb_buffer *buf, + unsigned stride, unsigned offset, + unsigned slice_size, + struct winsys_handle *whandle); /** * Return the virtual address of a buffer. @@ -676,14 +676,14 @@ struct radeon_winsys { struct pb_buffer *buf); /** - * Return TRUE if there is enough memory in VRAM and GTT for the buffers + * Return true if there is enough memory in VRAM and GTT for the buffers * added so far. If the validation fails, all buffers which have * been added since the last call of cs_validate will be removed and * the CS will be flushed (provided there are still any buffers). * * \param csA command stream to validate. */ -boolean (*cs_validate)(struct radeon_winsys_cs *cs); +bool (*cs_validate)(struct radeon_winsys_cs *cs); /** * Check whether the given number of dwords is available in the IB. @@ -695,14 +695,15 @@ struct radeon_winsys { bool (*cs_check_space)(struct radeon_winsys_cs *cs, unsigned dw); /** - * Return TRUE if there is enough memory in VRAM and GTT for the buffers + * Return true if there is enough memory in VRAM and GTT for the buffers * added so far. * * \param csA command stream to validate. * \param vram VRAM memory size pending to be
Mesa (master): gallium/radeon: use r600_resource_reference
Module: Mesa Branch: master Commit: d5383a7d3114aa5f81a704ff84f58de6b41f94bd URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=d5383a7d3114aa5f81a704ff84f58de6b41f94bd Author: Marek OlšákDate: Tue Jun 21 21:13:00 2016 +0200 gallium/radeon: use r600_resource_reference Reviewed-by: Alex Deucher Reviewed-by: Vedran Miletić Reviewed-by: Nicolai Hähnle --- src/gallium/drivers/r600/r600_pipe.c| 4 ++-- src/gallium/drivers/r600/r600_shader.c | 2 +- src/gallium/drivers/r600/r600_state.c | 16 ++-- src/gallium/drivers/r600/r600_state_common.c| 2 +- src/gallium/drivers/radeon/r600_buffer_common.c | 4 ++-- src/gallium/drivers/radeon/r600_query.c | 14 +++--- src/gallium/drivers/radeon/r600_streamout.c | 2 +- src/gallium/drivers/radeon/r600_texture.c | 14 +++--- src/gallium/drivers/radeon/radeon_video.c | 2 +- src/gallium/drivers/radeonsi/si_compute.c | 6 ++ src/gallium/drivers/radeonsi/si_descriptors.c | 2 +- src/gallium/drivers/radeonsi/si_state_shaders.c | 4 +--- 12 files changed, 32 insertions(+), 40 deletions(-) diff --git a/src/gallium/drivers/r600/r600_pipe.c b/src/gallium/drivers/r600/r600_pipe.c index 57721d9..119c76b 100644 --- a/src/gallium/drivers/r600/r600_pipe.c +++ b/src/gallium/drivers/r600/r600_pipe.c @@ -71,8 +71,8 @@ static void r600_destroy_context(struct pipe_context *context) r600_sb_context_destroy(rctx->sb_context); - pipe_resource_reference((struct pipe_resource**)>dummy_cmask, NULL); - pipe_resource_reference((struct pipe_resource**)>dummy_fmask, NULL); + r600_resource_reference(>dummy_cmask, NULL); + r600_resource_reference(>dummy_fmask, NULL); for (sh = 0; sh < PIPE_SHADER_TYPES; sh++) { rctx->b.b.set_constant_buffer(>b.b, sh, R600_BUFFER_INFO_CONST_BUFFER, NULL); diff --git a/src/gallium/drivers/r600/r600_shader.c b/src/gallium/drivers/r600/r600_shader.c index 9a1008e..ff098f1 100644 --- a/src/gallium/drivers/r600/r600_shader.c +++ b/src/gallium/drivers/r600/r600_shader.c @@ -288,7 +288,7 @@ error: void r600_pipe_shader_destroy(struct pipe_context *ctx, struct r600_pipe_shader *shader) { - pipe_resource_reference((struct pipe_resource**)>bo, NULL); + r600_resource_reference(>bo, NULL); r600_bytecode_clear(>shader.bc); r600_release_command_buffer(>command_buffer); } diff --git a/src/gallium/drivers/r600/r600_state.c b/src/gallium/drivers/r600/r600_state.c index 89a9f25..e805d33 100644 --- a/src/gallium/drivers/r600/r600_state.c +++ b/src/gallium/drivers/r600/r600_state.c @@ -967,10 +967,8 @@ static void r600_init_color_surface(struct r600_context *rctx, surf->cb_color_cmask = surf->cb_color_base; surf->cb_color_mask = 0; - pipe_resource_reference((struct pipe_resource**)>cb_buffer_cmask, - >resource.b.b); - pipe_resource_reference((struct pipe_resource**)>cb_buffer_fmask, - >resource.b.b); + r600_resource_reference(>cb_buffer_cmask, >resource); + r600_resource_reference(>cb_buffer_fmask, >resource); if (rtex->cmask.size) { surf->cb_color_cmask = rtex->cmask.offset >> 8; @@ -1003,7 +1001,7 @@ static void r600_init_color_surface(struct r600_context *rctx, struct pipe_transfer *transfer; void *ptr; - pipe_resource_reference((struct pipe_resource**)>dummy_cmask, NULL); + r600_resource_reference(>dummy_cmask, NULL); rctx->dummy_cmask = r600_buffer_create_helper(rscreen, cmask.size, cmask.alignment); /* Set the contents to 0xCC. */ @@ -1011,19 +1009,17 @@ static void r600_init_color_surface(struct r600_context *rctx, memset(ptr, 0xCC, cmask.size); pipe_buffer_unmap(>b.b, transfer); } - pipe_resource_reference((struct pipe_resource**)>cb_buffer_cmask, - >dummy_cmask->b.b); + r600_resource_reference(>cb_buffer_cmask, rctx->dummy_cmask); /* FMASK. */ if (!rctx->dummy_fmask || rctx->dummy_fmask->b.b.width0 < fmask.size || rctx->dummy_fmask->buf->alignment % fmask.alignment != 0) { - pipe_resource_reference((struct pipe_resource**)>dummy_fmask, NULL); + r600_resource_reference(>dummy_fmask, NULL); rctx->dummy_fmask = r600_buffer_create_helper(rscreen, fmask.size, fmask.alignment); } - pipe_resource_reference((struct pipe_resource**)>cb_buffer_fmask, -
Mesa (master): radeonsi: make si_is_format_supported static
Module: Mesa Branch: master Commit: d93bacc1fa4bf1d6d358da3615b00305e8518f33 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=d93bacc1fa4bf1d6d358da3615b00305e8518f33 Author: Marek OlšákDate: Tue Jun 21 21:46:16 2016 +0200 radeonsi: make si_is_format_supported static Reviewed-by: Alex Deucher Reviewed-by: Vedran Miletić Reviewed-by: Nicolai Hähnle --- src/gallium/drivers/radeonsi/si_pipe.c | 1 - src/gallium/drivers/radeonsi/si_state.c | 11 ++- src/gallium/drivers/radeonsi/si_state.h | 5 - 3 files changed, 6 insertions(+), 11 deletions(-) diff --git a/src/gallium/drivers/radeonsi/si_pipe.c b/src/gallium/drivers/radeonsi/si_pipe.c index 0670372..d835681 100644 --- a/src/gallium/drivers/radeonsi/si_pipe.c +++ b/src/gallium/drivers/radeonsi/si_pipe.c @@ -692,7 +692,6 @@ struct pipe_screen *radeonsi_screen_create(struct radeon_winsys *ws) sscreen->b.b.destroy = si_destroy_screen; sscreen->b.b.get_param = si_get_param; sscreen->b.b.get_shader_param = si_get_shader_param; - sscreen->b.b.is_format_supported = si_is_format_supported; sscreen->b.b.resource_create = r600_resource_create_common; si_init_screen_state_functions(sscreen); diff --git a/src/gallium/drivers/radeonsi/si_state.c b/src/gallium/drivers/radeonsi/si_state.c index e6d1025..2e2c5ca 100644 --- a/src/gallium/drivers/radeonsi/si_state.c +++ b/src/gallium/drivers/radeonsi/si_state.c @@ -1759,11 +1759,11 @@ static bool si_is_zs_format_supported(enum pipe_format format) return si_translate_dbformat(format) != V_028040_Z_INVALID; } -boolean si_is_format_supported(struct pipe_screen *screen, - enum pipe_format format, - enum pipe_texture_target target, - unsigned sample_count, - unsigned usage) +static boolean si_is_format_supported(struct pipe_screen *screen, + enum pipe_format format, + enum pipe_texture_target target, + unsigned sample_count, + unsigned usage) { unsigned retval = 0; @@ -3514,6 +3514,7 @@ static void si_apply_opaque_metadata(struct r600_common_screen *rscreen, void si_init_screen_state_functions(struct si_screen *sscreen) { + sscreen->b.b.is_format_supported = si_is_format_supported; sscreen->b.query_opaque_metadata = si_query_opaque_metadata; sscreen->b.apply_opaque_metadata = si_apply_opaque_metadata; } diff --git a/src/gallium/drivers/radeonsi/si_state.h b/src/gallium/drivers/radeonsi/si_state.h index 8d538e1..2e4923d 100644 --- a/src/gallium/drivers/radeonsi/si_state.h +++ b/src/gallium/drivers/radeonsi/si_state.h @@ -309,11 +309,6 @@ struct si_shader_selector; void si_init_atom(struct si_context *sctx, struct r600_atom *atom, struct r600_atom **list_elem, void (*emit_func)(struct si_context *ctx, struct r600_atom *state)); -boolean si_is_format_supported(struct pipe_screen *screen, - enum pipe_format format, - enum pipe_texture_target target, - unsigned sample_count, - unsigned usage); void si_init_state_functions(struct si_context *sctx); void si_init_screen_state_functions(struct si_screen *sscreen); void ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): radeonsi: boolean -> bool, TRUE -> true, FALSE -> false
Module: Mesa Branch: master Commit: 3eacbc52d51789f7c58dfe5ca1317962eb9d1a6a URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=3eacbc52d51789f7c58dfe5ca1317962eb9d1a6a Author: Marek OlšákDate: Tue Jun 21 21:29:39 2016 +0200 radeonsi: boolean -> bool, TRUE -> true, FALSE -> false Reviewed-by: Alex Deucher Reviewed-by: Vedran Miletić Reviewed-by: Nicolai Hähnle --- src/gallium/drivers/radeonsi/si_blit.c | 2 +- src/gallium/drivers/radeonsi/si_pipe.c | 6 +++--- src/gallium/drivers/radeonsi/si_pipe.h | 2 +- src/gallium/drivers/radeonsi/si_state.c | 20 ++-- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/gallium/drivers/radeonsi/si_blit.c b/src/gallium/drivers/radeonsi/si_blit.c index 73a72e0..46daeac 100644 --- a/src/gallium/drivers/radeonsi/si_blit.c +++ b/src/gallium/drivers/radeonsi/si_blit.c @@ -849,7 +849,7 @@ void si_resource_copy_region(struct pipe_context *ctx, util_blitter_blit_generic(sctx->blitter, dst_view, , src_view, src_box, src_width0, src_height0, PIPE_MASK_RGBAZS, PIPE_TEX_FILTER_NEAREST, NULL, - FALSE); + false); si_blitter_end(ctx); pipe_surface_reference(_view, NULL); diff --git a/src/gallium/drivers/radeonsi/si_pipe.c b/src/gallium/drivers/radeonsi/si_pipe.c index e025df4..0670372 100644 --- a/src/gallium/drivers/radeonsi/si_pipe.c +++ b/src/gallium/drivers/radeonsi/si_pipe.c @@ -164,7 +164,7 @@ static struct pipe_context *si_create_context(struct pipe_screen *screen, sctx->ce_suballocator = u_suballocator_create(>b.b, 1024 * 1024, PIPE_BIND_CUSTOM, - PIPE_USAGE_DEFAULT, FALSE); + PIPE_USAGE_DEFAULT, false); if (!sctx->ce_suballocator) goto fail; } @@ -704,7 +704,7 @@ struct pipe_screen *radeonsi_screen_create(struct radeon_winsys *ws) return NULL; } - if (!debug_get_bool_option("RADEON_DISABLE_PERFCOUNTERS", FALSE)) + if (!debug_get_bool_option("RADEON_DISABLE_PERFCOUNTERS", false)) si_init_perfcounters(sscreen); sscreen->b.has_cp_dma = true; @@ -714,7 +714,7 @@ struct pipe_screen *radeonsi_screen_create(struct radeon_winsys *ws) HAVE_LLVM < 0x0308 || (sscreen->b.debug_flags & DBG_MONOLITHIC_SHADERS) != 0; - if (debug_get_bool_option("RADEON_DUMP_SHADERS", FALSE)) + if (debug_get_bool_option("RADEON_DUMP_SHADERS", false)) sscreen->b.debug_flags |= DBG_FS | DBG_VS | DBG_GS | DBG_PS | DBG_CS; /* Create the auxiliary context. This must be done last. */ diff --git a/src/gallium/drivers/radeonsi/si_pipe.h b/src/gallium/drivers/radeonsi/si_pipe.h index fe92c6a..d181905 100644 --- a/src/gallium/drivers/radeonsi/si_pipe.h +++ b/src/gallium/drivers/radeonsi/si_pipe.h @@ -309,7 +309,7 @@ struct si_context { /* Scratch buffer */ struct r600_resource*scratch_buffer; - boolean emit_scratch_reloc; + boolemit_scratch_reloc; unsignedscratch_waves; unsignedspi_tmpring_size; diff --git a/src/gallium/drivers/radeonsi/si_state.c b/src/gallium/drivers/radeonsi/si_state.c index 04e9f19..e6d1025 100644 --- a/src/gallium/drivers/radeonsi/si_state.c +++ b/src/gallium/drivers/radeonsi/si_state.c @@ -1290,7 +1290,7 @@ static uint32_t si_translate_texformat(struct pipe_screen *screen, bool enable_compressed_formats = (sscreen->b.info.drm_major == 2 && sscreen->b.info.drm_minor >= 31) || sscreen->b.info.drm_major == 3; - boolean uniform = TRUE; + bool uniform = true; int i; /* Colorspace (return non-RGB formats directly). */ @@ -1751,7 +1751,7 @@ static bool si_is_vertex_format_supported(struct pipe_screen *screen, enum pipe_ static bool si_is_colorbuffer_format_supported(enum pipe_format format) { return si_translate_colorformat(format) != V_028C70_COLOR_INVALID && - r600_translate_colorswap(format, FALSE) != ~0U; + r600_translate_colorswap(format, false) != ~0U; } static bool si_is_zs_format_supported(enum pipe_format format) @@ -1769,15 +1769,15 @@ boolean si_is_format_supported(struct pipe_screen *screen, if (target >= PIPE_MAX_TEXTURE_TYPES) { R600_ERR("r600: unsupported texture type %d\n", target); - return FALSE; + return false; } if
Mesa (master): gallium/radeon: boolean -> bool, TRUE -> true, FALSE -> false
Module: Mesa Branch: master Commit: 7db10093d3ee26b0a5050ae01750465da1a76970 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=7db10093d3ee26b0a5050ae01750465da1a76970 Author: Marek OlšákDate: Tue Jun 21 21:29:39 2016 +0200 gallium/radeon: boolean -> bool, TRUE -> true, FALSE -> false Reviewed-by: Alex Deucher Reviewed-by: Vedran Miletić Reviewed-by: Nicolai Hähnle --- src/gallium/drivers/radeon/r600_buffer_common.c| 12 ++--- src/gallium/drivers/radeon/r600_perfcounter.c | 22 src/gallium/drivers/radeon/r600_pipe_common.c | 2 +- src/gallium/drivers/radeon/r600_pipe_common.h | 10 ++-- src/gallium/drivers/radeon/r600_query.c| 58 +++--- src/gallium/drivers/radeon/r600_query.h| 30 +-- src/gallium/drivers/radeon/r600_texture.c | 4 +- .../drivers/radeon/radeon_setup_tgsi_llvm.c| 10 ++-- src/gallium/drivers/radeon/radeon_uvd.c| 2 +- 9 files changed, 75 insertions(+), 75 deletions(-) diff --git a/src/gallium/drivers/radeon/r600_buffer_common.c b/src/gallium/drivers/radeon/r600_buffer_common.c index 4b0cf42..9583d70 100644 --- a/src/gallium/drivers/radeon/r600_buffer_common.c +++ b/src/gallium/drivers/radeon/r600_buffer_common.c @@ -30,18 +30,18 @@ #include #include -boolean r600_rings_is_buffer_referenced(struct r600_common_context *ctx, - struct pb_buffer *buf, - enum radeon_bo_usage usage) +bool r600_rings_is_buffer_referenced(struct r600_common_context *ctx, +struct pb_buffer *buf, +enum radeon_bo_usage usage) { if (ctx->ws->cs_is_buffer_referenced(ctx->gfx.cs, buf, usage)) { - return TRUE; + return true; } if (radeon_emitted(ctx->dma.cs, 0) && ctx->ws->cs_is_buffer_referenced(ctx->dma.cs, buf, usage)) { - return TRUE; + return true; } - return FALSE; + return false; } void *r600_buffer_map_sync_with_rings(struct r600_common_context *ctx, diff --git a/src/gallium/drivers/radeon/r600_perfcounter.c b/src/gallium/drivers/radeon/r600_perfcounter.c index af9a692..471c1dc 100644 --- a/src/gallium/drivers/radeon/r600_perfcounter.c +++ b/src/gallium/drivers/radeon/r600_perfcounter.c @@ -418,8 +418,8 @@ error: return NULL; } -static boolean r600_init_block_names(struct r600_common_screen *screen, -struct r600_perfcounter_block *block) +static bool r600_init_block_names(struct r600_common_screen *screen, + struct r600_perfcounter_block *block) { unsigned i, j, k; unsigned groups_shader = 1, groups_se = 1, groups_instance = 1; @@ -452,7 +452,7 @@ static boolean r600_init_block_names(struct r600_common_screen *screen, block->group_names = MALLOC(block->num_groups * block->group_name_stride); if (!block->group_names) - return FALSE; + return false; groupname = block->group_names; for (i = 0; i < groups_shader; ++i) { @@ -487,7 +487,7 @@ static boolean r600_init_block_names(struct r600_common_screen *screen, block->selector_names = MALLOC(block->num_groups * block->num_selectors * block->selector_name_stride); if (!block->selector_names) - return FALSE; + return false; groupname = block->group_names; p = block->selector_names; @@ -499,7 +499,7 @@ static boolean r600_init_block_names(struct r600_common_screen *screen, groupname += block->group_name_stride; } - return TRUE; + return true; } int r600_get_perfcounter_info(struct r600_common_screen *screen, @@ -577,17 +577,17 @@ void r600_perfcounters_destroy(struct r600_common_screen *rscreen) rscreen->perfcounters->cleanup(rscreen); } -boolean r600_perfcounters_init(struct r600_perfcounters *pc, - unsigned num_blocks) +bool r600_perfcounters_init(struct r600_perfcounters *pc, + unsigned num_blocks) { pc->blocks = CALLOC(num_blocks, sizeof(struct r600_perfcounter_block)); if (!pc->blocks) - return FALSE; + return false; - pc->separate_se = debug_get_bool_option("RADEON_PC_SEPARATE_SE", FALSE); - pc->separate_instance = debug_get_bool_option("RADEON_PC_SEPARATE_INSTANCE", FALSE); + pc->separate_se = debug_get_bool_option("RADEON_PC_SEPARATE_SE", false); + pc->separate_instance = debug_get_bool_option("RADEON_PC_SEPARATE_INSTANCE", false); - return TRUE; + return true; } void r600_perfcounters_add_block(struct
Mesa (master): nir: Add a NIR_VALIDATE environment variable
Module: Mesa Branch: master Commit: 81978c6febd43b8a88a4db09133f9659e15b492c URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=81978c6febd43b8a88a4db09133f9659e15b492c Author: Jason EkstrandDate: Thu Jun 23 14:22:03 2016 -0700 nir: Add a NIR_VALIDATE environment variable It defaults to true so default behavior doesn't change but it allows you to do NIR_VALIDATE=false if you don't want validation. Disabling validation can substantially speed up shader compiles so you frequently want to turn it off if compiler invariants aren't in question. Reviewed-by: Matt Turner Reviewed-by: Matt Turner Signed-off-by: Rob Clark --- src/compiler/nir/nir_validate.c | 6 ++ 1 file changed, 6 insertions(+) diff --git a/src/compiler/nir/nir_validate.c b/src/compiler/nir/nir_validate.c index e5f5b8a..63e85cf 100644 --- a/src/compiler/nir/nir_validate.c +++ b/src/compiler/nir/nir_validate.c @@ -1124,6 +1124,12 @@ dump_errors(validate_state *state) void nir_validate_shader(nir_shader *shader) { + static int should_validate = -1; + if (should_validate < 0) + should_validate = env_var_as_boolean("NIR_VALIDATE", true); + if (!should_validate) + return; + validate_state state; init_validate_state(); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): st/nine: Use offset_units_unscaled
Module: Mesa Branch: master Commit: b76fa5673924ce09e28f3000808e3bd50ffe4570 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b76fa5673924ce09e28f3000808e3bd50ffe4570 Author: Axel DavyDate: Tue Jun 14 23:24:24 2016 +0200 st/nine: Use offset_units_unscaled offset_units_unscaled enables proper support for depth bias for gallium nine. Use it if available. Solves issues with some games using depth bias. For example: https://github.com/iXit/Mesa-3D/issues/220 Signed-off-by: Axel Davy --- src/gallium/state_trackers/nine/device9.c| 1 + src/gallium/state_trackers/nine/device9.h| 1 + src/gallium/state_trackers/nine/nine_pipe.c | 18 +- src/gallium/state_trackers/nine/nine_pipe.h | 2 +- src/gallium/state_trackers/nine/nine_state.c | 2 +- 5 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/gallium/state_trackers/nine/device9.c b/src/gallium/state_trackers/nine/device9.c index bb1735a..b4ce3c8 100644 --- a/src/gallium/state_trackers/nine/device9.c +++ b/src/gallium/state_trackers/nine/device9.c @@ -427,6 +427,7 @@ NineDevice9_ctor( struct NineDevice9 *This, This->driver_caps.window_space_position_support = GET_PCAP(TGSI_VS_WINDOW_SPACE_POSITION); This->driver_caps.vs_integer = pScreen->get_shader_param(pScreen, PIPE_SHADER_VERTEX, PIPE_SHADER_CAP_INTEGERS); This->driver_caps.ps_integer = pScreen->get_shader_param(pScreen, PIPE_SHADER_FRAGMENT, PIPE_SHADER_CAP_INTEGERS); +This->driver_caps.offset_units_unscaled = GET_PCAP(POLYGON_OFFSET_UNITS_UNSCALED); nine_ff_init(This); /* initialize fixed function code */ diff --git a/src/gallium/state_trackers/nine/device9.h b/src/gallium/state_trackers/nine/device9.h index 73a43cf..d584a35 100644 --- a/src/gallium/state_trackers/nine/device9.h +++ b/src/gallium/state_trackers/nine/device9.h @@ -121,6 +121,7 @@ struct NineDevice9 boolean window_space_position_support; boolean vs_integer; boolean ps_integer; +boolean offset_units_unscaled; } driver_caps; struct { diff --git a/src/gallium/state_trackers/nine/nine_pipe.c b/src/gallium/state_trackers/nine/nine_pipe.c index 79b910c..c1814fe 100644 --- a/src/gallium/state_trackers/nine/nine_pipe.c +++ b/src/gallium/state_trackers/nine/nine_pipe.c @@ -70,7 +70,9 @@ nine_convert_dsa_state(struct pipe_depth_stencil_alpha_state *dsa_state, } void -nine_convert_rasterizer_state(struct pipe_rasterizer_state *rast_state, const DWORD *rs) +nine_convert_rasterizer_state(struct NineDevice9 *device, + struct pipe_rasterizer_state *rast_state, + const DWORD *rs) { struct pipe_rasterizer_state rast; @@ -120,14 +122,12 @@ nine_convert_rasterizer_state(struct pipe_rasterizer_state *rast_state, const DW /* offset_units has the ogl/d3d11 meaning. * d3d9: offset = scale * dz + bias * ogl/d3d11: offset = scale * dz + r * bias - * with r implementation dependant and is supposed to be - * the smallest value the depth buffer format can hold. - * In practice on current and past hw it seems to be 2^-23 - * for all formats except float formats where it varies depending - * on the content. - * For now use 1 << 23, but in the future perhaps add a way in gallium - * to get r for the format or get the gallium behaviour */ -rast.offset_units = asfloat(rs[D3DRS_DEPTHBIAS]) * (float)(1 << 23); + * with r implementation dependent (+ different formula for float depth + * buffers). r=2^-23 is often the right value for gallium drivers. + * If possible, use offset_units_unscaled, which gives the d3d9 + * behaviour, else scale by 1 << 23 */ +rast.offset_units = asfloat(rs[D3DRS_DEPTHBIAS]) * (device->driver_caps.offset_units_unscaled ? 1.0f : (float)(1 << 23)); +rast.offset_units_unscaled = device->driver_caps.offset_units_unscaled; rast.offset_scale = asfloat(rs[D3DRS_SLOPESCALEDEPTHBIAS]); /* rast.offset_clamp = 0.0f; */ diff --git a/src/gallium/state_trackers/nine/nine_pipe.h b/src/gallium/state_trackers/nine/nine_pipe.h index 4d2bc92..fe8e910 100644 --- a/src/gallium/state_trackers/nine/nine_pipe.h +++ b/src/gallium/state_trackers/nine/nine_pipe.h @@ -38,7 +38,7 @@ extern const enum pipe_format nine_d3d9_to_pipe_format_map[120]; extern const D3DFORMAT nine_pipe_to_d3d9_format_map[PIPE_FORMAT_COUNT]; void nine_convert_dsa_state(struct pipe_depth_stencil_alpha_state *, const DWORD *); -void nine_convert_rasterizer_state(struct pipe_rasterizer_state *, const DWORD *); +void nine_convert_rasterizer_state(struct NineDevice9 *, struct pipe_rasterizer_state *, const DWORD *); void nine_convert_blend_state(struct pipe_blend_state *, const DWORD *); void nine_convert_sampler_state(struct cso_context *, int idx, const DWORD *); diff --git a/src/gallium/state_trackers/nine/nine_state.c
Mesa (master): r600g: move PA_SU_POLY_OFFSET_DB_FMT_CNTL to poly offset states for r600
Module: Mesa Branch: master Commit: 400e8d8c4080de0d9ab907b6ebbcc15c1ab02822 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=400e8d8c4080de0d9ab907b6ebbcc15c1ab02822 Author: Axel DavyDate: Tue Jun 14 22:22:50 2016 +0200 r600g: move PA_SU_POLY_OFFSET_DB_FMT_CNTL to poly offset states for r600 Emit PA_SU_POLY_OFFSET_DB_FMT_CNTL with the other poly_offset states. This will be useful to implement PIPE_CAP_POLYGON_OFFSET_UNITS_UNSCALED. v2: Increase the num_dw field for the poly offset atom Signed-off-by: Axel Davy Reviewed-by: Marek Olšák --- src/gallium/drivers/r600/r600_state.c | 37 --- 1 file changed, 13 insertions(+), 24 deletions(-) diff --git a/src/gallium/drivers/r600/r600_state.c b/src/gallium/drivers/r600/r600_state.c index afb0e2f..578aef9 100644 --- a/src/gallium/drivers/r600/r600_state.c +++ b/src/gallium/drivers/r600/r600_state.c @@ -254,16 +254,24 @@ static void r600_emit_polygon_offset(struct r600_context *rctx, struct r600_atom struct r600_poly_offset_state *state = (struct r600_poly_offset_state*)a; float offset_units = state->offset_units; float offset_scale = state->offset_scale; + uint32_t pa_su_poly_offset_db_fmt_cntl = 0; switch (state->zs_format) { case PIPE_FORMAT_Z24X8_UNORM: case PIPE_FORMAT_Z24_UNORM_S8_UINT: offset_units *= 2.0f; + pa_su_poly_offset_db_fmt_cntl = + S_028DF8_POLY_OFFSET_NEG_NUM_DB_BITS((char)-24); break; case PIPE_FORMAT_Z16_UNORM: offset_units *= 4.0f; + pa_su_poly_offset_db_fmt_cntl = + S_028DF8_POLY_OFFSET_NEG_NUM_DB_BITS((char)-16); break; - default:; + default: + pa_su_poly_offset_db_fmt_cntl = + S_028DF8_POLY_OFFSET_NEG_NUM_DB_BITS((char)-23) | + S_028DF8_POLY_OFFSET_DB_IS_FLOAT_FMT(1); } radeon_set_context_reg_seq(cs, R_028E00_PA_SU_POLY_OFFSET_FRONT_SCALE, 4); @@ -271,6 +279,9 @@ static void r600_emit_polygon_offset(struct r600_context *rctx, struct r600_atom radeon_emit(cs, fui(offset_units)); radeon_emit(cs, fui(offset_scale)); radeon_emit(cs, fui(offset_units)); + + radeon_set_context_reg(cs, R_028DF8_PA_SU_POLY_OFFSET_DB_FMT_CNTL, + pa_su_poly_offset_db_fmt_cntl); } static uint32_t r600_get_blend_control(const struct pipe_blend_state *state, unsigned i) @@ -1058,25 +1069,6 @@ static void r600_init_depth_surface(struct r600_context *rctx, surf->db_depth_size = S_028000_PITCH_TILE_MAX(pitch) | S_028000_SLICE_TILE_MAX(slice); surf->db_prefetch_limit = (rtex->surface.level[level].nblk_y / 8) - 1; - switch (surf->base.format) { - case PIPE_FORMAT_Z24X8_UNORM: - case PIPE_FORMAT_Z24_UNORM_S8_UINT: - surf->pa_su_poly_offset_db_fmt_cntl = - S_028DF8_POLY_OFFSET_NEG_NUM_DB_BITS((char)-24); - break; - case PIPE_FORMAT_Z32_FLOAT: - case PIPE_FORMAT_Z32_FLOAT_S8X24_UINT: - surf->pa_su_poly_offset_db_fmt_cntl = - S_028DF8_POLY_OFFSET_NEG_NUM_DB_BITS((char)-23) | - S_028DF8_POLY_OFFSET_DB_IS_FLOAT_FMT(1); - break; - case PIPE_FORMAT_Z16_UNORM: - surf->pa_su_poly_offset_db_fmt_cntl = - S_028DF8_POLY_OFFSET_NEG_NUM_DB_BITS((char)-16); - break; - default:; - } - /* use htile only for first level */ if (rtex->htile_buffer && !level) { surf->db_htile_data_base = 0; @@ -1456,9 +1448,6 @@ static void r600_emit_framebuffer_state(struct r600_context *rctx, struct r600_a RADEON_PRIO_DEPTH_BUFFER_MSAA : RADEON_PRIO_DEPTH_BUFFER); - radeon_set_context_reg(cs, R_028DF8_PA_SU_POLY_OFFSET_DB_FMT_CNTL, - surf->pa_su_poly_offset_db_fmt_cntl); - radeon_set_context_reg_seq(cs, R_028000_DB_DEPTH_SIZE, 2); radeon_emit(cs, surf->db_depth_size); /* R_028000_DB_DEPTH_SIZE */ radeon_emit(cs, surf->db_depth_view); /* R_028004_DB_DEPTH_VIEW */ @@ -3084,7 +3073,7 @@ void r600_init_state_functions(struct r600_context *rctx) r600_init_atom(rctx, >db_misc_state.atom, id++, r600_emit_db_misc_state, 7); r600_init_atom(rctx, >db_state.atom, id++, r600_emit_db_state, 11); r600_init_atom(rctx, >dsa_state.atom, id++, r600_emit_cso_state, 0); - r600_init_atom(rctx, >poly_offset_state.atom, id++, r600_emit_polygon_offset, 6); + r600_init_atom(rctx, >poly_offset_state.atom, id++, r600_emit_polygon_offset, 9);
Mesa (master): gallium: Add a cap for offset_units_unscaled
Module: Mesa Branch: master Commit: 59a692916ca251db995050f7fc0bb7b4e6e4780b URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=59a692916ca251db995050f7fc0bb7b4e6e4780b Author: Axel DavyDate: Mon Jun 13 22:28:32 2016 +0200 gallium: Add a cap for offset_units_unscaled D3D9 has a different behaviour for depth bias. For OGL/D3D1X, the depth bias unit is the minimal resolvable value for the depth buffer, which depends on the format (and has different behaviour for float depth buffers). For D3D9, the depth bias unit is 1.0f. Signed-off-by: Axel Davy Reviewed-by: Marek Olšák --- src/gallium/docs/source/cso/rasterizer.rst | 6 ++ src/gallium/docs/source/screen.rst | 2 ++ src/gallium/drivers/freedreno/freedreno_screen.c | 1 + src/gallium/drivers/i915/i915_screen.c | 1 + src/gallium/drivers/ilo/ilo_screen.c | 1 + src/gallium/drivers/llvmpipe/lp_screen.c | 1 + src/gallium/drivers/nouveau/nv30/nv30_screen.c | 1 + src/gallium/drivers/nouveau/nv50/nv50_screen.c | 1 + src/gallium/drivers/nouveau/nvc0/nvc0_screen.c | 1 + src/gallium/drivers/r300/r300_screen.c | 1 + src/gallium/drivers/r600/r600_pipe.c | 1 + src/gallium/drivers/radeonsi/si_pipe.c | 1 + src/gallium/drivers/softpipe/sp_screen.c | 1 + src/gallium/drivers/svga/svga_screen.c | 1 + src/gallium/drivers/swr/swr_screen.cpp | 1 + src/gallium/drivers/vc4/vc4_screen.c | 1 + src/gallium/drivers/virgl/virgl_screen.c | 1 + src/gallium/include/pipe/p_defines.h | 1 + src/gallium/include/pipe/p_state.h | 7 +++ 19 files changed, 31 insertions(+) diff --git a/src/gallium/docs/source/cso/rasterizer.rst b/src/gallium/docs/source/cso/rasterizer.rst index 8d473b8..616e451 100644 --- a/src/gallium/docs/source/cso/rasterizer.rst +++ b/src/gallium/docs/source/cso/rasterizer.rst @@ -127,6 +127,12 @@ offset_tri offset_units Specifies the polygon offset bias +offset_units_unscaled +Specifies the unit of the polygon offset bias. If false, use the +GL/D3D1X behaviour. If true, offset_units is a floating point offset +which isn't scaled (D3D9). Note that GL/D3D1X behaviour has different +formula whether the depth buffer is unorm or float, which is not +the case for D3D9. offset_scale Specifies the polygon offset scale offset_clamp diff --git a/src/gallium/docs/source/screen.rst b/src/gallium/docs/source/screen.rst index a20b372..141b45a 100644 --- a/src/gallium/docs/source/screen.rst +++ b/src/gallium/docs/source/screen.rst @@ -343,6 +343,8 @@ The integer capabilities: * ``PIPE_CAP_TGSI_VOTE``: Whether the ``VOTE_*`` ops can be used in shaders. * ``PIPE_CAP_MAX_WINDOW_RECTANGLES``: The maxium number of window rectangles supported in ``set_window_rectangles``. +* ``PIPE_CAP_POLYGON_OFFSET_UNITS_UNSCALED``: If true, the driver implements support + for ``pipe_rasterizer_state::offset_units_unscaled``. .. _pipe_capf: diff --git a/src/gallium/drivers/freedreno/freedreno_screen.c b/src/gallium/drivers/freedreno/freedreno_screen.c index 9138024..93b70e0 100644 --- a/src/gallium/drivers/freedreno/freedreno_screen.c +++ b/src/gallium/drivers/freedreno/freedreno_screen.c @@ -264,6 +264,7 @@ fd_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param) case PIPE_CAP_PRIMITIVE_RESTART_FOR_PATCHES: case PIPE_CAP_TGSI_VOTE: case PIPE_CAP_MAX_WINDOW_RECTANGLES: + case PIPE_CAP_POLYGON_OFFSET_UNITS_UNSCALED: return 0; case PIPE_CAP_MAX_VIEWPORTS: diff --git a/src/gallium/drivers/i915/i915_screen.c b/src/gallium/drivers/i915/i915_screen.c index e898f7e..3f0ab98 100644 --- a/src/gallium/drivers/i915/i915_screen.c +++ b/src/gallium/drivers/i915/i915_screen.c @@ -275,6 +275,7 @@ i915_get_param(struct pipe_screen *screen, enum pipe_cap cap) case PIPE_CAP_PRIMITIVE_RESTART_FOR_PATCHES: case PIPE_CAP_TGSI_VOTE: case PIPE_CAP_MAX_WINDOW_RECTANGLES: + case PIPE_CAP_POLYGON_OFFSET_UNITS_UNSCALED: return 0; case PIPE_CAP_MAX_DUAL_SOURCE_RENDER_TARGETS: diff --git a/src/gallium/drivers/ilo/ilo_screen.c b/src/gallium/drivers/ilo/ilo_screen.c index a775aa6..2024688 100644 --- a/src/gallium/drivers/ilo/ilo_screen.c +++ b/src/gallium/drivers/ilo/ilo_screen.c @@ -504,6 +504,7 @@ ilo_get_param(struct pipe_screen *screen, enum pipe_cap param) case PIPE_CAP_PRIMITIVE_RESTART_FOR_PATCHES: case PIPE_CAP_TGSI_VOTE: case PIPE_CAP_MAX_WINDOW_RECTANGLES: + case PIPE_CAP_POLYGON_OFFSET_UNITS_UNSCALED: return 0; case PIPE_CAP_VENDOR_ID: diff --git a/src/gallium/drivers/llvmpipe/lp_screen.c b/src/gallium/drivers/llvmpipe/lp_screen.c index 7d01e64..684c7a5 100644 --- a/src/gallium/drivers/llvmpipe/lp_screen.c +++ b/src/gallium/drivers/llvmpipe/lp_screen.c @@ -327,6 +327,7 @@
Mesa (master): r600g: Implement POLYGON_OFFSET_UNITS_UNSCALED
Module: Mesa Branch: master Commit: f6704f2a4db7113e597d4bab2cefc02e166c2ad9 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=f6704f2a4db7113e597d4bab2cefc02e166c2ad9 Author: Axel DavyDate: Tue Jun 14 23:13:26 2016 +0200 r600g: Implement POLYGON_OFFSET_UNITS_UNSCALED Empirical tests show that the polygon offset behaviour is entirely determined by the content of the PA_SU_POLY_OFFSET states, and not by the depth buffer format bound. PA_SU_POLY_OFFSET seems to directly set the parameters of the polygon offset formula, and setting 0 for PA_SU_POLY_OFFSET_DB_FMT_CNTL (ie setting the unorm depth bias behaviour with a scale of 2^0 = 1.0f) gives the unscaled behaviour. Signed-off-by: Axel Davy Reviewed-by: Marek Olšák --- src/gallium/drivers/r600/evergreen_state.c | 39 +++- src/gallium/drivers/r600/r600_pipe.c | 2 +- src/gallium/drivers/r600/r600_pipe.h | 2 ++ src/gallium/drivers/r600/r600_state.c| 35 + src/gallium/drivers/r600/r600_state_common.c | 4 ++- 5 files changed, 46 insertions(+), 36 deletions(-) diff --git a/src/gallium/drivers/r600/evergreen_state.c b/src/gallium/drivers/r600/evergreen_state.c index 797f593..fab0359 100644 --- a/src/gallium/drivers/r600/evergreen_state.c +++ b/src/gallium/drivers/r600/evergreen_state.c @@ -492,6 +492,7 @@ static void *evergreen_create_rs_state(struct pipe_context *ctx, rs->offset_units = state->offset_units; rs->offset_scale = state->offset_scale * 16.0f; rs->offset_enable = state->offset_point || state->offset_line || state->offset_tri; + rs->offset_units_unscaled = state->offset_units_unscaled; if (state->point_size_per_vertex) { psize_min = util_get_min_point_size(state); @@ -1665,24 +1666,26 @@ static void evergreen_emit_polygon_offset(struct r600_context *rctx, struct r600 float offset_scale = state->offset_scale; uint32_t pa_su_poly_offset_db_fmt_cntl = 0; - switch (state->zs_format) { - case PIPE_FORMAT_Z24X8_UNORM: - case PIPE_FORMAT_Z24_UNORM_S8_UINT: - case PIPE_FORMAT_X8Z24_UNORM: - case PIPE_FORMAT_S8_UINT_Z24_UNORM: - offset_units *= 2.0f; - pa_su_poly_offset_db_fmt_cntl = - S_028B78_POLY_OFFSET_NEG_NUM_DB_BITS((char)-24); - break; - case PIPE_FORMAT_Z16_UNORM: - offset_units *= 4.0f; - pa_su_poly_offset_db_fmt_cntl = - S_028B78_POLY_OFFSET_NEG_NUM_DB_BITS((char)-16); - break; - default: - pa_su_poly_offset_db_fmt_cntl = - S_028B78_POLY_OFFSET_NEG_NUM_DB_BITS((char)-23) | - S_028B78_POLY_OFFSET_DB_IS_FLOAT_FMT(1); + if (!state->offset_units_unscaled) { + switch (state->zs_format) { + case PIPE_FORMAT_Z24X8_UNORM: + case PIPE_FORMAT_Z24_UNORM_S8_UINT: + case PIPE_FORMAT_X8Z24_UNORM: + case PIPE_FORMAT_S8_UINT_Z24_UNORM: + offset_units *= 2.0f; + pa_su_poly_offset_db_fmt_cntl = + S_028B78_POLY_OFFSET_NEG_NUM_DB_BITS((char)-24); + break; + case PIPE_FORMAT_Z16_UNORM: + offset_units *= 4.0f; + pa_su_poly_offset_db_fmt_cntl = + S_028B78_POLY_OFFSET_NEG_NUM_DB_BITS((char)-16); + break; + default: + pa_su_poly_offset_db_fmt_cntl = + S_028B78_POLY_OFFSET_NEG_NUM_DB_BITS((char)-23) | + S_028B78_POLY_OFFSET_DB_IS_FLOAT_FMT(1); + } } radeon_set_context_reg_seq(cs, R_028B80_PA_SU_POLY_OFFSET_FRONT_SCALE, 4); diff --git a/src/gallium/drivers/r600/r600_pipe.c b/src/gallium/drivers/r600/r600_pipe.c index fe1af7c..57721d9 100644 --- a/src/gallium/drivers/r600/r600_pipe.c +++ b/src/gallium/drivers/r600/r600_pipe.c @@ -282,6 +282,7 @@ static int r600_get_param(struct pipe_screen* pscreen, enum pipe_cap param) case PIPE_CAP_SURFACE_REINTERPRET_BLOCKS: case PIPE_CAP_QUERY_MEMORY_INFO: case PIPE_CAP_FRAMEBUFFER_NO_ATTACHMENT: + case PIPE_CAP_POLYGON_OFFSET_UNITS_UNSCALED: return 1; case PIPE_CAP_DEVICE_RESET_STATUS_QUERY: @@ -370,7 +371,6 @@ static int r600_get_param(struct pipe_screen* pscreen, enum pipe_cap param) case PIPE_CAP_PRIMITIVE_RESTART_FOR_PATCHES: case PIPE_CAP_TGSI_VOTE: case PIPE_CAP_MAX_WINDOW_RECTANGLES: - case PIPE_CAP_POLYGON_OFFSET_UNITS_UNSCALED: return 0; case PIPE_CAP_MAX_SHADER_PATCH_VARYINGS: diff --git a/src/gallium/drivers/r600/r600_pipe.h
Mesa (master): r600g: move PA_SU_POLY_OFFSET_DB_FMT_CNTL to poly offset states for evergreen
Module: Mesa Branch: master Commit: fe2ec50d754d9ddf38d167ff56e376577732c128 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=fe2ec50d754d9ddf38d167ff56e376577732c128 Author: Axel DavyDate: Tue Jun 14 22:30:11 2016 +0200 r600g: move PA_SU_POLY_OFFSET_DB_FMT_CNTL to poly offset states for evergreen Emit PA_SU_POLY_OFFSET_DB_FMT_CNTL with the other poly_offset states. This will be useful to implement PIPE_CAP_POLYGON_OFFSET_UNITS_UNSCALED. v2: Increase the num_dw field for the poly offset atom Signed-off-by: Axel Davy Reviewed-by: Marek Olšák --- src/gallium/drivers/r600/evergreen_state.c | 38 ++ 1 file changed, 13 insertions(+), 25 deletions(-) diff --git a/src/gallium/drivers/r600/evergreen_state.c b/src/gallium/drivers/r600/evergreen_state.c index 0b8488d..797f593 100644 --- a/src/gallium/drivers/r600/evergreen_state.c +++ b/src/gallium/drivers/r600/evergreen_state.c @@ -1222,27 +1222,6 @@ static void evergreen_init_depth_surface(struct r600_context *rctx, surf->db_depth_slice = S_02805C_SLICE_TILE_MAX(levelinfo->nblk_x * levelinfo->nblk_y / 64 - 1); - switch (surf->base.format) { - case PIPE_FORMAT_Z24X8_UNORM: - case PIPE_FORMAT_Z24_UNORM_S8_UINT: - case PIPE_FORMAT_X8Z24_UNORM: - case PIPE_FORMAT_S8_UINT_Z24_UNORM: - surf->pa_su_poly_offset_db_fmt_cntl = - S_028B78_POLY_OFFSET_NEG_NUM_DB_BITS((char)-24); - break; - case PIPE_FORMAT_Z32_FLOAT: - case PIPE_FORMAT_Z32_FLOAT_S8X24_UINT: - surf->pa_su_poly_offset_db_fmt_cntl = - S_028B78_POLY_OFFSET_NEG_NUM_DB_BITS((char)-23) | - S_028B78_POLY_OFFSET_DB_IS_FLOAT_FMT(1); - break; - case PIPE_FORMAT_Z16_UNORM: - surf->pa_su_poly_offset_db_fmt_cntl = - S_028B78_POLY_OFFSET_NEG_NUM_DB_BITS((char)-16); - break; - default:; - } - if (rtex->surface.flags & RADEON_SURF_SBUFFER) { uint64_t stencil_offset; unsigned stile_split = rtex->surface.stencil_tile_split; @@ -1627,8 +1606,6 @@ static void evergreen_emit_framebuffer_state(struct r600_context *rctx, struct r RADEON_PRIO_DEPTH_BUFFER_MSAA : RADEON_PRIO_DEPTH_BUFFER); - radeon_set_context_reg(cs, R_028B78_PA_SU_POLY_OFFSET_DB_FMT_CNTL, - zb->pa_su_poly_offset_db_fmt_cntl); radeon_set_context_reg(cs, R_028008_DB_DEPTH_VIEW, zb->db_depth_view); radeon_set_context_reg_seq(cs, R_028040_DB_Z_INFO, 8); @@ -1686,6 +1663,7 @@ static void evergreen_emit_polygon_offset(struct r600_context *rctx, struct r600 struct r600_poly_offset_state *state = (struct r600_poly_offset_state*)a; float offset_units = state->offset_units; float offset_scale = state->offset_scale; + uint32_t pa_su_poly_offset_db_fmt_cntl = 0; switch (state->zs_format) { case PIPE_FORMAT_Z24X8_UNORM: @@ -1693,11 +1671,18 @@ static void evergreen_emit_polygon_offset(struct r600_context *rctx, struct r600 case PIPE_FORMAT_X8Z24_UNORM: case PIPE_FORMAT_S8_UINT_Z24_UNORM: offset_units *= 2.0f; + pa_su_poly_offset_db_fmt_cntl = + S_028B78_POLY_OFFSET_NEG_NUM_DB_BITS((char)-24); break; case PIPE_FORMAT_Z16_UNORM: offset_units *= 4.0f; + pa_su_poly_offset_db_fmt_cntl = + S_028B78_POLY_OFFSET_NEG_NUM_DB_BITS((char)-16); break; - default:; + default: + pa_su_poly_offset_db_fmt_cntl = + S_028B78_POLY_OFFSET_NEG_NUM_DB_BITS((char)-23) | + S_028B78_POLY_OFFSET_DB_IS_FLOAT_FMT(1); } radeon_set_context_reg_seq(cs, R_028B80_PA_SU_POLY_OFFSET_FRONT_SCALE, 4); @@ -1705,6 +1690,9 @@ static void evergreen_emit_polygon_offset(struct r600_context *rctx, struct r600 radeon_emit(cs, fui(offset_units)); radeon_emit(cs, fui(offset_scale)); radeon_emit(cs, fui(offset_units)); + + radeon_set_context_reg(cs, R_028B78_PA_SU_POLY_OFFSET_DB_FMT_CNTL, + pa_su_poly_offset_db_fmt_cntl); } static void evergreen_emit_cb_misc_state(struct r600_context *rctx, struct r600_atom *atom) @@ -3645,7 +3633,7 @@ void evergreen_init_state_functions(struct r600_context *rctx) r600_init_atom(rctx, >db_misc_state.atom, id++, evergreen_emit_db_misc_state, 10); r600_init_atom(rctx, >db_state.atom, id++, evergreen_emit_db_state, 14); r600_init_atom(rctx, >dsa_state.atom,
Mesa (master): radeonsi: Implement POLYGON_OFFSET_UNITS_UNSCALED
Module: Mesa Branch: master Commit: be7957b156e30ffe9fb647b58ba00e236e498c3f URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=be7957b156e30ffe9fb647b58ba00e236e498c3f Author: Axel DavyDate: Tue Jun 14 22:41:50 2016 +0200 radeonsi: Implement POLYGON_OFFSET_UNITS_UNSCALED Empirical tests show that the polygon offset behaviour is entirely determined by the content of the PA_SU_POLY_OFFSET states, and not by the depth buffer format bound. PA_SU_POLY_OFFSET seems to directly set the parameters of the polygon offset formula, and setting 0 for PA_SU_POLY_OFFSET_DB_FMT_CNTL (ie setting the unorm depth bias behaviour with a scale of 2^0 = 1.0f) gives the unscaled behaviour. Signed-off-by: Axel Davy Reviewed-by: Marek Olšák --- src/gallium/drivers/radeonsi/si_pipe.c | 2 +- src/gallium/drivers/radeonsi/si_state.c | 32 ++-- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/src/gallium/drivers/radeonsi/si_pipe.c b/src/gallium/drivers/radeonsi/si_pipe.c index 37406aa..e025df4 100644 --- a/src/gallium/drivers/radeonsi/si_pipe.c +++ b/src/gallium/drivers/radeonsi/si_pipe.c @@ -357,6 +357,7 @@ static int si_get_param(struct pipe_screen* pscreen, enum pipe_cap param) case PIPE_CAP_FRAMEBUFFER_NO_ATTACHMENT: case PIPE_CAP_ROBUST_BUFFER_ACCESS_BEHAVIOR: case PIPE_CAP_GENERATE_MIPMAP: + case PIPE_CAP_POLYGON_OFFSET_UNITS_UNSCALED: return 1; case PIPE_CAP_RESOURCE_FROM_USER_MEMORY: @@ -415,7 +416,6 @@ static int si_get_param(struct pipe_screen* pscreen, enum pipe_cap param) case PIPE_CAP_PRIMITIVE_RESTART_FOR_PATCHES: case PIPE_CAP_TGSI_VOTE: case PIPE_CAP_MAX_WINDOW_RECTANGLES: - case PIPE_CAP_POLYGON_OFFSET_UNITS_UNSCALED: return 0; case PIPE_CAP_MAX_SHADER_PATCH_VARYINGS: diff --git a/src/gallium/drivers/radeonsi/si_state.c b/src/gallium/drivers/radeonsi/si_state.c index ccae571..04e9f19 100644 --- a/src/gallium/drivers/radeonsi/si_state.c +++ b/src/gallium/drivers/radeonsi/si_state.c @@ -810,20 +810,24 @@ static void *si_create_rs_state(struct pipe_context *ctx, float offset_scale = state->offset_scale * 16.0f; uint32_t pa_su_poly_offset_db_fmt_cntl = 0; - switch (i) { - case 0: /* 16-bit zbuffer */ - offset_units *= 4.0f; - pa_su_poly_offset_db_fmt_cntl = S_028B78_POLY_OFFSET_NEG_NUM_DB_BITS(-16); - break; - case 1: /* 24-bit zbuffer */ - offset_units *= 2.0f; - pa_su_poly_offset_db_fmt_cntl = S_028B78_POLY_OFFSET_NEG_NUM_DB_BITS(-24); - break; - case 2: /* 32-bit zbuffer */ - offset_units *= 1.0f; - pa_su_poly_offset_db_fmt_cntl = S_028B78_POLY_OFFSET_NEG_NUM_DB_BITS(-23) | - S_028B78_POLY_OFFSET_DB_IS_FLOAT_FMT(1); - break; + if (!state->offset_units_unscaled) { + switch (i) { + case 0: /* 16-bit zbuffer */ + offset_units *= 4.0f; + pa_su_poly_offset_db_fmt_cntl = + S_028B78_POLY_OFFSET_NEG_NUM_DB_BITS(-16); + break; + case 1: /* 24-bit zbuffer */ + offset_units *= 2.0f; + pa_su_poly_offset_db_fmt_cntl = + S_028B78_POLY_OFFSET_NEG_NUM_DB_BITS(-24); + break; + case 2: /* 32-bit zbuffer */ + offset_units *= 1.0f; + pa_su_poly_offset_db_fmt_cntl = S_028B78_POLY_OFFSET_NEG_NUM_DB_BITS(-23) | + S_028B78_POLY_OFFSET_DB_IS_FLOAT_FMT(1); + break; + } } si_pm4_set_reg(pm4, R_028B80_PA_SU_POLY_OFFSET_FRONT_SCALE, ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): radeon: Remove useless pa_su_poly_offset_db_fmt_cntl
Module: Mesa Branch: master Commit: c2b7b48a54e0124dd8aa0513a264d76535ea9829 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=c2b7b48a54e0124dd8aa0513a264d76535ea9829 Author: Axel DavyDate: Tue Jun 14 22:32:04 2016 +0200 radeon: Remove useless pa_su_poly_offset_db_fmt_cntl pa_su_poly_offset_db_fmt_cntl usages were removed in previous patches. Signed-off-by: Axel Davy Reviewed-by: Marek Olšák --- src/gallium/drivers/radeon/r600_pipe_common.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/gallium/drivers/radeon/r600_pipe_common.h b/src/gallium/drivers/radeon/r600_pipe_common.h index 8117c9a..a70c7fe 100644 --- a/src/gallium/drivers/radeon/r600_pipe_common.h +++ b/src/gallium/drivers/radeon/r600_pipe_common.h @@ -317,7 +317,6 @@ struct r600_surface { unsigned db_htile_surface; unsigned db_htile_data_base; unsigned db_preload_control;/* EG and later */ - unsigned pa_su_poly_offset_db_fmt_cntl; }; struct r600_common_screen { ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit