Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit d318dd3

Browse files
committed
Remove some GL/D3D legacy format quirks from vulkan vertex buffers
- Fix mapping of B8G8R8A8 -- this is the same as the old D3DCOLOR. - Remove all the other stream types that don't match anything in Vulkan. - Remove unused resource pointer in stream There is still future cleanup work to do here -- we should be able to do vertex fetch purely based on the VkFormat rather than mapping it onto the GL model. Change-Id: Ia100ec68e8930acd17b6cba35a27403b4ef8e883 Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/25768 Kokoro-Presubmit: kokoro <noreply+kokoro@google.com> Tested-by: Chris Forbes <chrisforbes@google.com> Reviewed-by: Nicolas Capens <nicolascapens@google.com>
1 parent c7943e9 commit d318dd3

3 files changed

Lines changed: 3 additions & 128 deletions

File tree

src/Device/Stream.hpp

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,22 +19,16 @@
1919

2020
namespace sw
2121
{
22-
class Resource;
23-
2422
enum StreamType ENUM_UNDERLYING_TYPE_UNSIGNED_INT
2523
{
2624
STREAMTYPE_COLOR, // 4 normalized unsigned bytes, ZYXW order
27-
STREAMTYPE_UDEC3, // 3 unsigned 10-bit fields
28-
STREAMTYPE_DEC3N, // 3 normalized signed 10-bit fields
29-
STREAMTYPE_INDICES, // 4 unsigned bytes, stored unconverted into X component
3025
STREAMTYPE_FLOAT, // Normalization ignored
3126
STREAMTYPE_BYTE,
3227
STREAMTYPE_SBYTE,
3328
STREAMTYPE_SHORT,
3429
STREAMTYPE_USHORT,
3530
STREAMTYPE_INT,
3631
STREAMTYPE_UINT,
37-
STREAMTYPE_FIXED, // Normalization ignored (16.16 format)
3832
STREAMTYPE_HALF, // Normalization ignored
3933
STREAMTYPE_2_10_10_10_INT,
4034
STREAMTYPE_2_10_10_10_UINT,
@@ -44,16 +38,14 @@ namespace sw
4438

4539
struct StreamResource
4640
{
47-
Resource *resource;
4841
const void *buffer;
4942
unsigned int stride;
5043
};
5144

5245
struct Stream : public StreamResource
5346
{
54-
Stream(Resource *resource = 0, const void *buffer = 0, unsigned int stride = 0)
47+
Stream(const void *buffer = nullptr, unsigned int stride = 0)
5548
{
56-
this->resource = resource;
5749
this->buffer = buffer;
5850
this->stride = stride;
5951
}
@@ -81,7 +73,6 @@ namespace sw
8173
{
8274
static const float4 null = {0, 0, 0, 1};
8375

84-
resource = 0;
8576
buffer = &null;
8677
stride = 0;
8778
type = STREAMTYPE_FLOAT;

src/Pipeline/VertexRoutine.cpp

Lines changed: 0 additions & 117 deletions
Original file line numberDiff line numberDiff line change
@@ -376,115 +376,6 @@ namespace sw
376376
transpose4xN(v.x, v.y, v.z, v.w, stream.count);
377377
}
378378
break;
379-
case STREAMTYPE_UDEC3:
380-
{
381-
// FIXME: Vectorize
382-
{
383-
Int x, y, z;
384-
385-
x = y = z = *Pointer<Int>(source0);
386-
387-
v.x.x = Float(x & 0x000003FF);
388-
v.x.y = Float(y & 0x000FFC00);
389-
v.x.z = Float(z & 0x3FF00000);
390-
}
391-
392-
{
393-
Int x, y, z;
394-
395-
x = y = z = *Pointer<Int>(source1);
396-
397-
v.y.x = Float(x & 0x000003FF);
398-
v.y.y = Float(y & 0x000FFC00);
399-
v.y.z = Float(z & 0x3FF00000);
400-
}
401-
402-
{
403-
Int x, y, z;
404-
405-
x = y = z = *Pointer<Int>(source2);
406-
407-
v.z.x = Float(x & 0x000003FF);
408-
v.z.y = Float(y & 0x000FFC00);
409-
v.z.z = Float(z & 0x3FF00000);
410-
}
411-
412-
{
413-
Int x, y, z;
414-
415-
x = y = z = *Pointer<Int>(source3);
416-
417-
v.w.x = Float(x & 0x000003FF);
418-
v.w.y = Float(y & 0x000FFC00);
419-
v.w.z = Float(z & 0x3FF00000);
420-
}
421-
422-
transpose4x3(v.x, v.y, v.z, v.w);
423-
424-
v.y *= Float4(1.0f / 0x00000400);
425-
v.z *= Float4(1.0f / 0x00100000);
426-
}
427-
break;
428-
case STREAMTYPE_DEC3N:
429-
{
430-
// FIXME: Vectorize
431-
{
432-
Int x, y, z;
433-
434-
x = y = z = *Pointer<Int>(source0);
435-
436-
v.x.x = Float((x << 22) & 0xFFC00000);
437-
v.x.y = Float((y << 12) & 0xFFC00000);
438-
v.x.z = Float((z << 2) & 0xFFC00000);
439-
}
440-
441-
{
442-
Int x, y, z;
443-
444-
x = y = z = *Pointer<Int>(source1);
445-
446-
v.y.x = Float((x << 22) & 0xFFC00000);
447-
v.y.y = Float((y << 12) & 0xFFC00000);
448-
v.y.z = Float((z << 2) & 0xFFC00000);
449-
}
450-
451-
{
452-
Int x, y, z;
453-
454-
x = y = z = *Pointer<Int>(source2);
455-
456-
v.z.x = Float((x << 22) & 0xFFC00000);
457-
v.z.y = Float((y << 12) & 0xFFC00000);
458-
v.z.z = Float((z << 2) & 0xFFC00000);
459-
}
460-
461-
{
462-
Int x, y, z;
463-
464-
x = y = z = *Pointer<Int>(source3);
465-
466-
v.w.x = Float((x << 22) & 0xFFC00000);
467-
v.w.y = Float((y << 12) & 0xFFC00000);
468-
v.w.z = Float((z << 2) & 0xFFC00000);
469-
}
470-
471-
transpose4x3(v.x, v.y, v.z, v.w);
472-
473-
v.x *= Float4(1.0f / 0x00400000 / 511.0f);
474-
v.y *= Float4(1.0f / 0x00400000 / 511.0f);
475-
v.z *= Float4(1.0f / 0x00400000 / 511.0f);
476-
}
477-
break;
478-
case STREAMTYPE_FIXED:
479-
{
480-
v.x = Float4(*Pointer<Int4>(source0)) * *Pointer<Float4>(constants + OFFSET(Constants,unscaleFixed));
481-
v.y = Float4(*Pointer<Int4>(source1)) * *Pointer<Float4>(constants + OFFSET(Constants,unscaleFixed));
482-
v.z = Float4(*Pointer<Int4>(source2)) * *Pointer<Float4>(constants + OFFSET(Constants,unscaleFixed));
483-
v.w = Float4(*Pointer<Int4>(source3)) * *Pointer<Float4>(constants + OFFSET(Constants,unscaleFixed));
484-
485-
transpose4xN(v.x, v.y, v.z, v.w, stream.count);
486-
}
487-
break;
488379
case STREAMTYPE_HALF:
489380
{
490381
if(stream.count >= 1)
@@ -540,14 +431,6 @@ namespace sw
540431
}
541432
}
542433
break;
543-
case STREAMTYPE_INDICES:
544-
{
545-
v.x.x = *Pointer<Float>(source0);
546-
v.x.y = *Pointer<Float>(source1);
547-
v.x.z = *Pointer<Float>(source2);
548-
v.x.w = *Pointer<Float>(source3);
549-
}
550-
break;
551434
case STREAMTYPE_2_10_10_10_INT:
552435
{
553436
Int4 src;

src/Vulkan/VkPipeline.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,10 +70,11 @@ sw::StreamType getStreamType(VkFormat format)
7070
case VK_FORMAT_R8_UINT:
7171
case VK_FORMAT_R8G8_UINT:
7272
case VK_FORMAT_R8G8B8A8_UINT:
73-
case VK_FORMAT_B8G8R8A8_UNORM:
7473
case VK_FORMAT_A8B8G8R8_UNORM_PACK32:
7574
case VK_FORMAT_A8B8G8R8_UINT_PACK32:
7675
return sw::STREAMTYPE_BYTE;
76+
case VK_FORMAT_B8G8R8A8_UNORM:
77+
return sw::STREAMTYPE_COLOR;
7778
case VK_FORMAT_R8_SNORM:
7879
case VK_FORMAT_R8_SINT:
7980
case VK_FORMAT_R8G8_SNORM:

0 commit comments

Comments
 (0)