[SPIR-V] 32 [u]int formats

This commit is contained in:
DrChat 2018-02-19 11:01:45 -06:00
parent ff6d306728
commit 103ecbab7e
1 changed files with 52 additions and 0 deletions

View File

@ -1398,10 +1398,62 @@ void SpirvShaderTranslator::ProcessVertexFetchInstruction(
// vertex = b.createCompositeConstruct(float_type_, {components[0]}); // vertex = b.createCompositeConstruct(float_type_, {components[0]});
vertex = components[0]; vertex = components[0];
} break; } break;
case VertexFormat::k_32_32: { case VertexFormat::k_32_32: {
spv::Id components[2] = {};
for (uint32_t i = 0; i < 2; i++) {
auto index = b.createBinOp(spv::Op::OpIAdd, int_type_, vertex_idx,
b.makeUintConstant(i));
auto vertex_ptr = b.createAccessChain(
spv::StorageClass::StorageClassUniform, data_ptr, {index});
auto vertex_data = b.createLoad(vertex_ptr);
if (instr.attributes.is_integer) {
if (instr.attributes.is_signed) {
components[i] =
b.createUnaryOp(spv::Op::OpBitcast, int_type_, vertex_data);
components[i] = b.createUnaryOp(spv::Op::OpConvertSToF, float_type_,
vertex_data);
} else {
components[i] = b.createUnaryOp(spv::Op::OpConvertUToF, float_type_,
vertex_data);
}
} else {
// TODO(DrChat)
}
}
vertex = b.createCompositeConstruct(vec2_float_type_,
{components[0], components[1]});
} break; } break;
case VertexFormat::k_32_32_32_32: { case VertexFormat::k_32_32_32_32: {
spv::Id components[4] = {};
for (uint32_t i = 0; i < 4; i++) {
auto index = b.createBinOp(spv::Op::OpIAdd, int_type_, vertex_idx,
b.makeUintConstant(i));
auto vertex_ptr = b.createAccessChain(
spv::StorageClass::StorageClassUniform, data_ptr, {index});
auto vertex_data = b.createLoad(vertex_ptr);
if (instr.attributes.is_integer) {
if (instr.attributes.is_signed) {
components[i] =
b.createUnaryOp(spv::Op::OpBitcast, int_type_, vertex_data);
components[i] = b.createUnaryOp(spv::Op::OpConvertSToF, float_type_,
vertex_data);
} else {
components[i] = b.createUnaryOp(spv::Op::OpConvertUToF, float_type_,
vertex_data);
}
} else {
// TODO(DrChat)
}
}
vertex = b.createCompositeConstruct(
vec2_float_type_,
{components[0], components[1], components[2], components[3]});
} break; } break;
case VertexFormat::k_32_FLOAT: { case VertexFormat::k_32_FLOAT: {