amd/common: add ac_get_cb_shader_mask() helper
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
This commit is contained in:
@@ -21,6 +21,8 @@
|
|||||||
* IN THE SOFTWARE.
|
* IN THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
#include "ac_shader_util.h"
|
#include "ac_shader_util.h"
|
||||||
#include "sid.h"
|
#include "sid.h"
|
||||||
|
|
||||||
@@ -43,3 +45,36 @@ ac_get_spi_shader_z_format(bool writes_z, bool writes_stencil,
|
|||||||
return V_028710_SPI_SHADER_ZERO;
|
return V_028710_SPI_SHADER_ZERO;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned
|
||||||
|
ac_get_cb_shader_mask(unsigned spi_shader_col_format)
|
||||||
|
{
|
||||||
|
unsigned i, cb_shader_mask = 0;
|
||||||
|
|
||||||
|
for (i = 0; i < 8; i++) {
|
||||||
|
switch ((spi_shader_col_format >> (i * 4)) & 0xf) {
|
||||||
|
case V_028714_SPI_SHADER_ZERO:
|
||||||
|
break;
|
||||||
|
case V_028714_SPI_SHADER_32_R:
|
||||||
|
cb_shader_mask |= 0x1 << (i * 4);
|
||||||
|
break;
|
||||||
|
case V_028714_SPI_SHADER_32_GR:
|
||||||
|
cb_shader_mask |= 0x3 << (i * 4);
|
||||||
|
break;
|
||||||
|
case V_028714_SPI_SHADER_32_AR:
|
||||||
|
cb_shader_mask |= 0x9 << (i * 4);
|
||||||
|
break;
|
||||||
|
case V_028714_SPI_SHADER_FP16_ABGR:
|
||||||
|
case V_028714_SPI_SHADER_UNORM16_ABGR:
|
||||||
|
case V_028714_SPI_SHADER_SNORM16_ABGR:
|
||||||
|
case V_028714_SPI_SHADER_UINT16_ABGR:
|
||||||
|
case V_028714_SPI_SHADER_SINT16_ABGR:
|
||||||
|
case V_028714_SPI_SHADER_32_ABGR:
|
||||||
|
cb_shader_mask |= 0xf << (i * 4);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
assert(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return cb_shader_mask;
|
||||||
|
}
|
||||||
|
@@ -30,4 +30,7 @@ unsigned
|
|||||||
ac_get_spi_shader_z_format(bool writes_z, bool writes_stencil,
|
ac_get_spi_shader_z_format(bool writes_z, bool writes_stencil,
|
||||||
bool writes_samplemask);
|
bool writes_samplemask);
|
||||||
|
|
||||||
|
unsigned
|
||||||
|
ac_get_cb_shader_mask(unsigned spi_shader_col_format);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -416,38 +416,6 @@ static unsigned si_choose_spi_color_format(VkFormat vk_format,
|
|||||||
return normal;
|
return normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned si_get_cb_shader_mask(unsigned spi_shader_col_format)
|
|
||||||
{
|
|
||||||
unsigned i, cb_shader_mask = 0;
|
|
||||||
|
|
||||||
for (i = 0; i < 8; i++) {
|
|
||||||
switch ((spi_shader_col_format >> (i * 4)) & 0xf) {
|
|
||||||
case V_028714_SPI_SHADER_ZERO:
|
|
||||||
break;
|
|
||||||
case V_028714_SPI_SHADER_32_R:
|
|
||||||
cb_shader_mask |= 0x1 << (i * 4);
|
|
||||||
break;
|
|
||||||
case V_028714_SPI_SHADER_32_GR:
|
|
||||||
cb_shader_mask |= 0x3 << (i * 4);
|
|
||||||
break;
|
|
||||||
case V_028714_SPI_SHADER_32_AR:
|
|
||||||
cb_shader_mask |= 0x9 << (i * 4);
|
|
||||||
break;
|
|
||||||
case V_028714_SPI_SHADER_FP16_ABGR:
|
|
||||||
case V_028714_SPI_SHADER_UNORM16_ABGR:
|
|
||||||
case V_028714_SPI_SHADER_SNORM16_ABGR:
|
|
||||||
case V_028714_SPI_SHADER_UINT16_ABGR:
|
|
||||||
case V_028714_SPI_SHADER_SINT16_ABGR:
|
|
||||||
case V_028714_SPI_SHADER_32_ABGR:
|
|
||||||
cb_shader_mask |= 0xf << (i * 4);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
assert(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return cb_shader_mask;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
radv_pipeline_compute_spi_color_formats(struct radv_pipeline *pipeline,
|
radv_pipeline_compute_spi_color_formats(struct radv_pipeline *pipeline,
|
||||||
const VkGraphicsPipelineCreateInfo *pCreateInfo,
|
const VkGraphicsPipelineCreateInfo *pCreateInfo,
|
||||||
@@ -477,7 +445,7 @@ radv_pipeline_compute_spi_color_formats(struct radv_pipeline *pipeline,
|
|||||||
col_format |= cf << (4 * i);
|
col_format |= cf << (4 * i);
|
||||||
}
|
}
|
||||||
|
|
||||||
blend->cb_shader_mask = si_get_cb_shader_mask(col_format);
|
blend->cb_shader_mask = ac_get_cb_shader_mask(col_format);
|
||||||
|
|
||||||
if (blend_mrt0_is_dual_src)
|
if (blend_mrt0_is_dual_src)
|
||||||
col_format |= (col_format & 0xf) << 4;
|
col_format |= (col_format & 0xf) << 4;
|
||||||
|
@@ -981,38 +981,6 @@ static unsigned si_get_spi_shader_col_format(struct si_shader *shader)
|
|||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned si_get_cb_shader_mask(unsigned spi_shader_col_format)
|
|
||||||
{
|
|
||||||
unsigned i, cb_shader_mask = 0;
|
|
||||||
|
|
||||||
for (i = 0; i < 8; i++) {
|
|
||||||
switch ((spi_shader_col_format >> (i * 4)) & 0xf) {
|
|
||||||
case V_028714_SPI_SHADER_ZERO:
|
|
||||||
break;
|
|
||||||
case V_028714_SPI_SHADER_32_R:
|
|
||||||
cb_shader_mask |= 0x1 << (i * 4);
|
|
||||||
break;
|
|
||||||
case V_028714_SPI_SHADER_32_GR:
|
|
||||||
cb_shader_mask |= 0x3 << (i * 4);
|
|
||||||
break;
|
|
||||||
case V_028714_SPI_SHADER_32_AR:
|
|
||||||
cb_shader_mask |= 0x9 << (i * 4);
|
|
||||||
break;
|
|
||||||
case V_028714_SPI_SHADER_FP16_ABGR:
|
|
||||||
case V_028714_SPI_SHADER_UNORM16_ABGR:
|
|
||||||
case V_028714_SPI_SHADER_SNORM16_ABGR:
|
|
||||||
case V_028714_SPI_SHADER_UINT16_ABGR:
|
|
||||||
case V_028714_SPI_SHADER_SINT16_ABGR:
|
|
||||||
case V_028714_SPI_SHADER_32_ABGR:
|
|
||||||
cb_shader_mask |= 0xf << (i * 4);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
assert(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return cb_shader_mask;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void si_shader_ps(struct si_shader *shader)
|
static void si_shader_ps(struct si_shader *shader)
|
||||||
{
|
{
|
||||||
struct tgsi_shader_info *info = &shader->selector->info;
|
struct tgsi_shader_info *info = &shader->selector->info;
|
||||||
@@ -1095,7 +1063,7 @@ static void si_shader_ps(struct si_shader *shader)
|
|||||||
spi_baryc_cntl |= S_0286E0_POS_FLOAT_ULC(1);
|
spi_baryc_cntl |= S_0286E0_POS_FLOAT_ULC(1);
|
||||||
|
|
||||||
spi_shader_col_format = si_get_spi_shader_col_format(shader);
|
spi_shader_col_format = si_get_spi_shader_col_format(shader);
|
||||||
cb_shader_mask = si_get_cb_shader_mask(spi_shader_col_format);
|
cb_shader_mask = ac_get_cb_shader_mask(spi_shader_col_format);
|
||||||
|
|
||||||
/* Ensure that some export memory is always allocated, for two reasons:
|
/* Ensure that some export memory is always allocated, for two reasons:
|
||||||
*
|
*
|
||||||
|
Reference in New Issue
Block a user