#include "r300_cs.h"
#include "r300_context.h"
+#include "r300_state_inlines.h"
#include "r300_reg.h"
#include "r300_winsys.h"
-static void translate_vertex_format(enum pipe_format format,
- unsigned nr_comps,
- unsigned component_size,
- unsigned dst_loc,
- uint32_t *hw_fmt1,
- uint32_t *hw_fmt2)
-{
- uint32_t fmt1 = 0;
-
- switch (pf_type(format))
- {
- case PIPE_FORMAT_TYPE_FLOAT:
- assert(component_size == 4);
- fmt1 = R300_DATA_TYPE_FLOAT_1 + nr_comps - 1;
- break;
- case PIPE_FORMAT_TYPE_UNORM:
- case PIPE_FORMAT_TYPE_SNORM:
- case PIPE_FORMAT_TYPE_USCALED:
- case PIPE_FORMAT_TYPE_SSCALED:
- if (component_size == 1)
- {
- assert(nr_comps == 4);
- fmt1 = R300_DATA_TYPE_BYTE;
- }
- else if (component_size == 2)
- {
- if (nr_comps == 2)
- fmt1 = R300_DATA_TYPE_SHORT_2;
- else if (nr_comps == 4)
- fmt1 = R300_DATA_TYPE_SHORT_4;
- else
- assert(0);
- }
- else
- {
- assert(0);
- }
-
- if (pf_type(format) == PIPE_FORMAT_TYPE_SNORM)
- {
- fmt1 |= R300_SIGNED;
- }
- else if (pf_type(format) == PIPE_FORMAT_TYPE_SSCALED)
- {
- fmt1 |= R300_SIGNED;
- fmt1 |= R300_NORMALIZE;
- }
- else if (pf_type(format) == PIPE_FORMAT_TYPE_USCALED)
- {
- fmt1 |= R300_NORMALIZE;
- }
- break;
- default:
- assert(0);
- break;
- }
-
- *hw_fmt1 = fmt1 | (dst_loc << R300_DST_VEC_LOC_SHIFT);
- *hw_fmt2 = (pf_swizzle_x(format) << R300_SWIZZLE_SELECT_X_SHIFT) |
- (pf_swizzle_y(format) << R300_SWIZZLE_SELECT_Y_SHIFT) |
- (pf_swizzle_z(format) << R300_SWIZZLE_SELECT_Z_SHIFT) |
- (pf_swizzle_w(format) << R300_SWIZZLE_SELECT_W_SHIFT) |
- (0xf << R300_WRITE_ENA_SHIFT);
-}
-
static INLINE void setup_vertex_attribute(struct r300_vertex_info *vinfo,
struct pipe_vertex_element *vert_elem,
unsigned attr_num)
{
- uint32_t hw_fmt1, hw_fmt2;
- translate_vertex_format(vert_elem->src_format,
- vert_elem->nr_components,
- pf_size_x(vert_elem->src_format),
- attr_num,
- &hw_fmt1,
- &hw_fmt2);
+ uint16_t hw_fmt1, hw_fmt2;
+
+ hw_fmt1 = r300_translate_vertex_data_type(vert_elem->src_format) |
+ (attr_num << R300_DST_VEC_LOC_SHIFT);
+ hw_fmt2 = r300_translate_vertex_data_swizzle(vert_elem->src_format);
if (attr_num % 2 == 0)
{