KR20220157467A - 손실 압축 기법들 - Google Patents

손실 압축 기법들 Download PDF

Info

Publication number
KR20220157467A
KR20220157467A KR1020227036666A KR20227036666A KR20220157467A KR 20220157467 A KR20220157467 A KR 20220157467A KR 1020227036666 A KR1020227036666 A KR 1020227036666A KR 20227036666 A KR20227036666 A KR 20227036666A KR 20220157467 A KR20220157467 A KR 20220157467A
Authority
KR
South Korea
Prior art keywords
bits
component
pixels
compression
block
Prior art date
Application number
KR1020227036666A
Other languages
English (en)
Inventor
타이슨 제이. 버글랜드
카티크 라마니
스테판 라쇼스키
저스틴 에이. 헨슬리
다부드 에이. 잠쉬디
앤서니 피. 들로리어
Original Assignee
애플 인크.
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US16/855,459 external-priority patent/US11405622B2/en
Priority claimed from US16/855,540 external-priority patent/US11664816B2/en
Application filed by 애플 인크. filed Critical 애플 인크.
Publication of KR20220157467A publication Critical patent/KR20220157467A/ko

Links

Images

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/3059Digital compression and data reduction techniques where the original information is represented by a subset or similar information, e.g. lossy compression
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/3082Vector coding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/124Quantisation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/17Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
    • H04N19/176Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a block, e.g. a macroblock
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/593Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving spatial prediction techniques

Abstract

압축되는 픽셀들의 블록의 상이한 영역들에 대한 상이한 양자화를 사용하는 픽셀 데이터의 압축에 관한 기법들이 개시된다. 일부 실시예들에서, 압축 회로부는 압축되는 픽셀들의 블록의 픽셀들에 포함된 다수의 구성요소들에 대해, 픽셀들의 블록의 각자의 영역들에서의 각자의 최소 및 최대 구성요소 값들을 결정하도록 구성된다. 압축 회로부는, 결정된 최소 및 최대 구성요소 값들에 기초하여, 제1 영역 내의 제1 구성요소에 대한 기본 값에 대한 델타 값들을 표현하기 위해 제1 개수의 비트들을 사용하고 제1 영역 내의 제2 구성요소에 대한 기본 값에 대한 델타 값들을 표현하기 위해 제2의 상이한 개수의 비트들을 사용할 것을 결정할 수 있다. 이어서, 압축 회로부는, 결정된 제1 및 제2 개수의 비트들을 사용하여 픽셀들의 블록의 제1 영역 내의 픽셀들의 제1 및 제2 구성요소들에 대한 델타 값들을 양자화할 수 있다. 일부 실시예들에서, 압축 회로부는 영역 내에 교차 구성요소 비트 공유를 제공할지의 여부를 결정한다.

Description

손실 압축 기법들
본 개시내용은 데이터 압축 회로부에 관한 것이다.
컴퓨팅 디바이스들은, 예컨대 메모리 풋프린트 또는 대역폭을 감소시키기 위해 다양한 유형들의 데이터를 압축할 수 있다. 압축은 그래픽 프로세서에 의해 프로세싱된 픽셀들과 같은 멀티미디어 데이터에 특히 유용할 수 있다. 일부 압축은, 압축해제된 데이터가 압축 이전의 이미지와 매칭되지 않을 수 있도록 하는 손실성이다. 한편, 무손실 압축은 압축해제 이후에 오리지널 데이터를 제공한다. 상이한 무손실 압축 기법들은 상이한 특성들, 예컨대, 압축, 압축 속도, 압축비 등을 위해 요구되는 영역 또는 전력과 같은 계산 리소스들을 가질 수 있다. 유사하게, 상이한 손실 압축 기법들은, 압축해제 이후 데이터의 정확도를 포함한 상이한 특성들을 가질 수 있다(일부 손실 기법들은 다른 것들보다 더 큰 손실을 야기할 수 있음). 압축 구현의 품질은 성능, 전력 소비, 또는 회로 영역에 실질적인 영향을 미칠 수 있다.
도 1a는 일부 실시예들에 따른, 예시적인 압축 회로부를 예시하는 블록도이다.
도 1b는 일부 실시예들에 따른, 예시적인 무손실 및 손실 압축 회로부를 예시하는 블록도이다.
도 2a는 일부 실시예들에 따른, 4개의 영역들을 포함하는 픽셀들의 예시적인 블록을 예시하는 블록도이다.
도 2b는 일부 실시예들에 따른, 이웃 예측자를 위한 픽셀들의 블록에 대한 예시적인 이웃 관계들을 예시하는 블록도이다.
도 3은 일부 실시예들에 따른, 무손실 압축 기법을 선택하기 위한 예시적인 방법을 예시하는 흐름도이다.
도 4는 일부 실시예들에 따른, 픽셀들의 무손실 압축된 블록의 예시적인 포맷화를 예시하는 블록도이다.
도 5는 일부 실시예들에 따른, 손실 압축을 위한 예시적인 방법을 예시하는 흐름도이다.
도 6은 일부 실시예들에 따른, 픽셀들의 손실 압축된 블록의 영역의 예시적인 포맷화를 예시하는 블록도이다.
도 7은 일부 실시예들에 따른, 무손실 압축을 위한 예시적인 방법을 예시하는 흐름도이다.
도 8은 일부 실시예들에 따른, 손실 압축을 위한 예시적인 방법을 예시하는 흐름도이다.
도 9는 일부 실시예들에 따른, 예시적인 컴퓨터 시스템을 예시하는 블록도이다.
도 10은 일부 실시예들에 따른, 회로 설계 정보를 저장하는 예시적인 컴퓨터 판독가능 매체를 예시하는 블록도이다.
본 명세서는 다양한 실시예들에 대한 참조를 포함하여, 본 개시내용이 하나의 특정 구현예를 지칭하는 것이 아니라 오히려 첨부된 청구범위를 포함하는 본 개시내용의 사상 내에 포함되는 실시예들의 범위를 지칭하도록 의도된다. 특정 특성들, 구조들, 또는 특징들은 본 개시내용에 부합하는 임의의 적합한 방식으로 조합될 수 있다.
본 개시내용 내에서, 상이한 엔티티들(이는, "유닛들", "회로들", 다른 컴포넌트들 등으로 다양하게 지칭될 수 있음)은 하나 이상의 태스크들 또는 동작들을 수행하도록 "구성된" 것으로 설명되거나 또는 청구될 수 있다. 이러한 표현-[하나 이상의 태스크들을 수행]하도록 구성된 [엔티티]-은 본 명세서에서 구조(즉, 전자 회로와 같은 물리적인 것)를 지칭하는 데 사용된다. 더 상세하게는, 이러한 표현은 이러한 구조가 동작 동안 하나 이상의 태스크들을 수행하도록 배열됨을 나타내는 데 사용된다. 구조는 그 구조가 현재 동작되고 있지 않더라도 일부 태스크를 수행하도록 "구성된다"고 말할 수 있다. "픽셀 데이터의 블록을 압축하도록 구성된 압축 회로"는, 예를 들어, 문제의 회로가 현재 사용되고 있지 않더라도(예컨대, 전력이 그에 연결되지 않음), 동작 동안 이러한 기능을 수행하는 회로를 커버하도록 의도된다. 따라서, 일부 태스크를 수행하도록 "구성된" 것으로 설명된 또는 인용된 엔티티는 디바이스, 회로, 태스크를 구현하도록 실행가능한 프로그램 명령어들을 저장하는 메모리 등과 같은 물리적인 것을 지칭한다. 이러한 문구는 무형인 것을 지칭하기 위해 본 명세서에서 사용되지는 않는다.
용어 "~ 하도록 구성된"은 "~하도록 구성가능한"을 의미하도록 의도되지 않는다. 예를 들어, 프로그래밍되지 않은 FPGA는, 그것이 일부 구체적인 기능을 수행하도록 "구성가능"할 수 있지만, 그러한 기능을 수행하도록 "구성된" 것으로 간주되지 않을 것이다. 적절한 프로그래밍 후에, 이어서 FPGA는 그러한 기능을 수행하도록 구성될 수 있다.
구조가 하나 이상의 태스크들을 수행하도록 "구성"되었다고 첨부된 청구항들에 인용하는 것은 명백히 그 청구항 구성요소에 대하여 35 U.S.C. §(112)(f)를 적용하지 않도록 의도된다. 따라서, 출원된 본 출원서의 어떠한 청구항들도 수단+기능식 요소들을 갖는 것으로 해석되도록 의도되지 않는다. 출원인이 심사 시 Section(112)(f)의 적용을 바란다면, [기능을 수행]"하기 위한 수단" 구조를 사용하여 청구항 구성요소들을 열거할 것이다.
본 명세서에서 사용되는 바와 같이, 용어 "기초하여"는 결정에 영향을 주는 하나 이상의 인자들을 설명하기 위해 사용된다. 이러한 용어는 부가적인 인자들이 결정에 영향을 줄 수 있는 가능성을 배제하지 않는다. 즉, 결정은 단지 특정된 인자들에 기초하거나 또는 그 특정된 인자들뿐만 아니라 다른, 불특정된 인자들에 기초할 수 있다. "B에 기초하여 A를 결정한다"라는 문구를 고려한다. 이러한 문구는 B가 A를 결정하는 데 사용되거나 A의 결정에 영향을 주는 인자라는 것을 명시한다. 이러한 문구는 A의 결정이 C와 같은 일부 다른 인자에 또한 기초할 수 있음을 배제하지 않는다. 또한, 이 문구는 A가 B만에 기초하여 결정되는 실시예를 커버하도록 의도된다. 본 명세서에서 사용되는 바와 같이, "에 기초하여"라는 문구는 "적어도 부분적으로 기초하여"라는 문구와 동의어이다.
또한, 본 명세서에 사용되는 바와 같이, 용어들 "제1", "제2", "제3" 등은 반드시 요소들 사이의 순서화(예컨대, 시간적)를 암시하는 것은 아니다. 예를 들어, "제1" 그래픽 동작 및 "제2" 그래픽 동작에 대한 언급은 그래픽 동작의 순서를 암시하지 않아서, 이들 동작들 사이의 시간적 관계를 제약하는 추가 언어가 없다. 요약하면, "제1", "제2" 등과 같은 참조들은 상세한 설명 및 첨부된 청구항들에서 참조의 용이함을 위한 라벨들로서 사용된다.
본 개시내용은 무손실 및 손실 압축 둘 모두에 대한 기법들의 실시예를 논의한다. 일부 실시예들에서, 프로세서는, 무손실 압축이 타깃 출력 데이터 크기를 충족할 수 없다는 것이 결정되는 경우에만, 픽셀들의 주어진 블록을 위해 손실 압축이 사용되는 모드에서 동작한다. 다양한 개시된 실시예들에서, 압축은 픽셀 데이터의 블록들에 대해 동작하지만, 이러한 예들은 본 개시내용의 범주를 제한하도록 의도되지 않는다. 오히려, 개시된 기법들은 다양한 유형들의 입력 데이터를 압축하도록 구현될 수 있다.
도 1a는 예시적인 압축 회로부(110)를 예시하는 블록도이다. 상기에서 논의된 바와 같이, 입력 데이터는 압축될 픽셀들의 블록에 대한 값들을 포함할 수 있다(그리고 각각의 픽셀은 다수의 구성요소들 또는 채널들에 대한 값들을 포함할 수 있음). 압축된 데이터는, 예를 들어, 압축 이후 픽셀들을 표현하는 데이터, 사용된 압축의 유형을 나타내는 헤더 정보, 및 압축된 블록의 크기를 설명하는 메타데이터를 포함할 수 있다.
도 1b는 일부 실시예들에 따른, 예시적인 무손실 압축 회로부(120) 및 손실 압축 회로부(130)를 예시하는 블록도이다. 일부 실시예들에서, 손실 압축 회로부(130)는, 무손실 압축 회로부(120)가, 그것이 타깃 압축된 크기를 달성할 수 없다고 결정하지 않는 한, 입력 데이터를 압축하도록 구성되지 않는다. 일부 실시예들에서, 무손실 및 손실 압축은 적어도 부분적으로 동시에 진행될 수 있다. 개시된 실시예들이 무손실 및 손실 압축 둘 모두를 지원하지만, 개시된 기법들은 또한 독립적으로 사용될 수 있다. 예를 들어, 프로세서는 개시된 손실 압축 기법들을 지원할 수 있지만 개시된 무손실 압축 기법들을 지원하지 않을 수 있거나, 그 반대도 마찬가지이다. 그러나, 일부 실시예들에서, 개시된 기법들은, 압축 회로부가 픽셀들의 주어진 블록에 대한 무손실 및 손실 압축 둘 모두를 고려한다는 사실을 이용한다.
도 2a는 일부 실시예들에 따른, 픽셀들의 예시적인 블록을 예시하는 블록도이다. 각각의 픽셀은 다수의 대응하는 데이터 필드들, 예컨대 R, G, B, A 채널들, 또는 다른 용도들에 사용될 수 있는 구성요소들을 가질 수 있다. 따라서, 픽셀들의 블록의 압축은 각각의 유효 픽셀에 대한 다수의 구성요소들에 대해 동작할 수 있다. 예시된 실시예에서, 블록은 MxN 픽셀들을 포함하며, 여기서 M 및 N은 동일하거나 상이할 수 있는 정수들이다. 예를 들어, 블록은 4x4, 4x8, 8x4, 8x8, 8x16 등일 수 있다. 예시된 예에서, 블록은 도 2a의 더 굵은 선들에 의해 4개의 영역들로 분할된다. 블록은 일부 실시예에서, 각각이 다수의 픽셀들을 포함하는 다양한 적절한 수의 영역들로 세분될 수 있다.
일부 실시예들에서, 디바이스는, 예컨대, 이용가능한 기법들 중에서 가장 큰 압축비를 초래하는, 무손실 압축 기법을 선택하기 위해 상이한 무손실 압축 예측자들을 결정한다. 상이한 예측자들은, 예컨대, 기본에 대한 그들의 델타 값들에 기초하여 픽셀들을 인코딩하기 위해, 상이한 기본 픽셀들을 사용할 수 있다. 예를 들어, 개시된 기법들은 원점, 구배, 및 이웃 예측자들을 활용할 수 있다. 일부 실시예들에서, 기본 및 구배 예측자들은 기본 픽셀로서 픽셀(0,0)을 사용하는 반면, 이웃 예측자는 상이한 이웃 기본(neighbor base, NB) 픽셀을 사용한다. 예시된 예에서, NB 픽셀은 블록의 중심 근처에 위치된다. 다른 실시예들에서, 하나 이상의 예측자들은 픽셀들의 주어진 블록에 대한 그들의 기본 위치를 동적으로 결정할 수 있지만, 이것은 복잡도 및 전력 소비를 증가시킬 수 있다.
일부 실시예들에서, 원점 예측자는 각각의 픽셀 구성요소를 기본 픽셀(예컨대, 픽셀(0,0))의 동일한 구성요소에 대한 델타 값으로서 표현한다. 일부 실시예들에서, 역상관성을 갖는 원점 예측자(origin-with-decorrelation predictor)는 원점 예측자와 유사하게 동작할 수 있지만, 먼저, 구성요소들 간의 상관관계를 감소시킬 수 있고 압축비들에 긍정적인 영향을 줄 수 있는 다른 대응하는 구성요소들로부터 하나의 구성요소(예컨대, 녹색 구성요소)의 값들을 감산할 수 있다. 일부 실시예들에서, 구배 예측자는 각각의 픽셀 구성요소를 기본 픽셀의 동일한 구성요소에 대한 델타 값 + 구배 값으로서 표현한다. 일부 실시예들에서, 이웃 예측자는 각각의 픽셀 구성요소를 이웃 픽셀의 동일한 구성요소에 대한 델타 값으로서 표현한다. 역상관성을 갖는 이웃 예측자(neighbor-with-decorrelation predictor)는 이웃 예측자와 유사할 수 있지만, 하나의 구성요소가 감산된다.
도 2b는 일부 실시예들에 따른, 이웃 예측자에 대한 예시적인 패턴을 도시한다. 도 2b에서, 각각의 픽셀로부터의 화살표는 이웃 픽셀을 나타내고, 그의 델타가 이웃 픽셀에 기초하여 계산된다. 도시된 바와 같이, 패턴은, 델타를 사용하여 표현되지 않고 상이한 실시예들에서 다양한 위치들에 위치될 수 있는 기본 픽셀을 포함한다. 예시된 패턴은 설명의 목적들을 위해 포함되지만, 본 개시내용의 범주를 제한하도록 의도되지 않으며; 픽셀들 사이의 관계를 인코딩하기 위한 다양한 패턴들이 다양한 예측자들에 대해 구현될 수 있다.
다수의 예측자들을 사용한 예시적인 무손실 압축
일부 실시예들에서, 컴퓨팅 시스템은 픽셀 데이터의 입력 블록에 대한 다수의 상이한 압축 기법들의 성능을 결정하기 위해, 적어도 부분적으로 동시에, 상이한 압축 기법들에 대한 다수의 무손실 예측자들을 계산한다. 예를 들어, 원점 예측자가 7의 원점 값으로부터 최대 델타를 갖는 픽셀을 갖는 반면, 이웃 예측자가 3의 최대 델타를 갖는 픽셀을 갖는 상황을 고려한다. 부호없는 델타들 t를 갖는 구현예에서, 원점 예측자는 압축된 형태로 각각의 픽셀을 표현하기 위해 3개의 비트들을 필요로 하는 반면, 이웃 예측자는 압축된 형태로 각각의 픽셀을 표현하기 위해 2개의 비트들만을 필요로 한다. 전체적인 최상의 예측자는, 하기에서 더 상세히 논의되는 바와 같이, 필요한 헤더 크기, 바이어스의 사용이 델타 크기에 영향을 미치는지의 여부, 블록의 상이한 영역들 내의 픽셀들이 상이한 개수의 비트들을 사용하여 표현될 수 있는지의 여부 등과 같은 추가적인 고려사항들에 의해 추가로 영향을 받을 수 있다. 따라서, 동시에 다수의 예측자들을 위해 필요한 크기를 계산한 이후, 시스템은 최소 압축 크기(예컨대, 헤더 메타데이터 + 블록 내의 모든 픽셀들을 표현하기 위해 필요한 비트들)를 제공하는 압축 기법을 선택할 수 있다.
도 3은 일부 실시예들에 따른, 픽셀들의 블록의 무손실 압축을 위한 예시적인 기법을 예시하는 흐름도이다. 도 3에 도시된 방법은 다른 것들 중에서도, 본 명세서에 개시되는 컴퓨터 회로부, 시스템들, 디바이스들, 요소들 또는 컴포넌트들 중 임의의 것과 함께 사용될 수 있다. 다양한 실시예들에서, 도시된 방법 요소들 중 일부는 동시에, 또는 도시된 바와는 상이한 순서로 수행될 수 있거나, 또는 생략될 수 있다. 부가적인 방법 요소들이 또한 원하는 대로 수행될 수 있다.
310에서, 예시된 실시예에서, 컴퓨팅 시스템은 다수의 예측자들을 사용하여 각각의 픽셀의 각각의 구성요소에 대한 델타를 결정한다. 예시적인 예측자들은 원점 예측자, 역상관성을 갖는 원점 예측자, 구배 예측자, 이웃 예측자, 및 역상관성을 갖는 이웃 예측자를 포함한다. 구배 예측자의 경우, 시스템은 먼저, 예컨대 하기의 수학식들에 따라, 각각의 구성요소에 대한 원점 픽셀(0, 0)에 대한 x 및 y 구배들을 결정할 수 있으며:
dcdx = wrap_to_range(pixel(1, 0).c - pixel(0, 0).c, component_width/2)
dcdy = wrap_to_range(pixel(0, 1).c - pixel(0, 0).c, component_width/2
여기서, component_width는 구성요소를 표현하는 데 사용되는 비트들의 개수를 나타내고, ".c" 표기는 현재 구성요소를 지칭한다.
하기의 의사코드는 블록 내의 x, y 위치에서의 주어진 픽셀에 대한 각각의 예측자에 대한 델타를 결정하기 위한 예시적인 기법들을 표현하며:
delta_origin = pixel(x, y).c - pixel(0, 0).c
여기서 픽셀(0,0)은 원점 예측자에 대한 기본 픽셀이다.
delta_origin_decorrelate = wrap_to_range(pixel(x, y).c - pixel(x, y).green) - wrap_to_range(pixel(0, 0).c - pixel(0, 0).green)
여기서, 역상관성은 녹색 구성요소를 감산함으로써 수행된다.
delta_gradient = pixel(x, y).c - (pixel(0, 0).c + dcdx*x + dcdy*y)
여기서, 픽셀(0,0)은 구배 예측자에 대한 기본 픽셀이다.
delta_neighbor = pixel(x, y).c - pixel(nx, ny).c
여기서, 픽셀(nx,ny)은 이웃 패턴에 따른 픽셀(x,y)에 대한 이웃 픽셀이다.
delta_neighbor_decorrelate = wrap_to_range(pixel(x, y).c - pixel(x, y).green) - wrap_to_range(pixel(nx, ny).c - pixel(nx, ny).green)
312에서, 예시된 실시예에서, 시스템은, 전체 블록에 대해, 각각의 예측자를 위한 각각의 픽셀 구성요소에 대한 델타를 표현하는 데 필요한 비트들의 최대 개수를 결정한다. 시스템은 델타들을 구성요소 폭과 동일한 비트 폭을 갖는 부호있는 값들로서 인코딩할 수 있다. 하기는 주어진 부호있는 구성요소의 델타들을 위해 필요한 비트들의 개수를 결정하기 위한 예시적인 기법을 표현하며:
bits_c = max(signed_num_bits(max_delta_c), signed_num_bits(min_delta_c))
여기서, signed_num_bits는 입력의 2의 보수 인코딩을 포함하는 데 필요한 비트들의 개수를 결정하는 함수이고, max_delta_c는 구성요소에 대한 최대 델타 값이고, min_delta_c는 구성요소에 대한 최소 델타 값이다. 일부 실시예들에서, 시스템은 각각의 구성요소에 대해 블록에 모든 델타들을 패킹하는 데 필요한 비트들의 개수를 결정하도록 구성된다.
314에서, 예시된 실시예에서, 시스템은 또한, 블록의 각각의 하위 영역(예컨대, 도 2a에 도시된 4개의 영역들 각각)에 대해, 각각의 예측자를 위한 각각의 픽셀 구성요소에 대한 델타를 표현하는 데 필요한 비트들의 최대 개수를 결정한다. 일부 실시예들에서, 시스템은 각각의 구성요소에 대해 블록의 각각의 하위 영역에 모든 델타들을 패킹하는 데 필요한 비트들의 개수를 결정하도록 구성된다. 일부 실시예들에서, 이는, 그것이 전체 압축비를 개선할 때, 상이한 영역들이 델타들에 대해 상이한 개수의 비트들을 사용할 수 있게 할 수 있다.
316에서, 예시된 실시예에서, 시스템은 블록에 대해 바이어스가 bits_c를 (예컨대, 1만큼) 감소시킬지의 여부를 결정한다. 일부 실시예들에서, 이러한 결정은 각각의 구성요소 및 각각의 예측자에 대해 수행되지만, 각각의 영역에 대해서는 별도로 수행되지 않는다. 하기의 의사 코드는 바이어스가 사용되어야 하는지의 여부 및 바이어스 값을 결정하기 위한 예시적인 기법을 표현하며:
biased_bits_c = num_bits(max_delta_c - min_delta_c)
if (bits_c > biased_bits_c)
delta_bits_c = biased_bits_c;
bias_c = (-1 << (delta_bits_c - 1)) - min_delta_c
else
delta_bits_c = bits_c
bias_c = 0
318에서, 예시된 실시예에서, 시스템은, 상이한 영역들에서의 델타들에 대해 상이한 개수의 비트들을 사용하는 경우 델타들을 표현하기 위해 비트 폭들의 잠재적인 감소들을 결정한다. 예를 들어, 하기의 의사코드는, 특정 영역에 대한 구성요소에 대한 델타를 표현하는 데 필요한 비트들의 개수를 표현하는 region_bits_c를 결정하기 위한 기법을 표현하며, 여기서 N은 영역들의 개수를 표현하며:
for region (0 .. N-1)
region_bits_c = max(signed_num_bits(region_max_delta_c), signed_num_bits(region_min_delta_c))
reduction_c[region] = delta_bits_c - region_bits_c
일부 실시예들에서, delta_bits_c 값에 대해 일정 영역에 대한 최대 감소가 있다는 점에 주목한다. 일부 실시예들에서, 각각의 영역에 대한 reduction_c[]는, 임의의 영역이 0이 아닌 감소를 갖는 경우, 압축된 데이터를 위해 헤더에 인코딩된다.
320에서, 예시된 실시예에서, 시스템은 픽셀들의 블록을 압축하는 데 사용하기 위한 하나 이상의 예측자들을 선택한다. 일부 실시예들에서, 시스템은 비트들의 가변 크기를 계산함으로써 어느 예측자가 최상의 압축을 제공하는지를 결정한다. 하기의 의사코드는 주어진 예측자에 대한 델타들에 필요한 비트들의 개수를 결정하기 위한 기법을 표현하며:
for region (0 .. N-1)
size_predictor_c += region_bits_c_predictor[region] * num_pixels_region[region]
여기서 num_pixels_region은 상이한 영역들에 대해 달라질 수 있는데, 예컨대 그 이유는 원점 픽셀을 갖는 영역이 그 픽셀에 대한 델타를 필요로 하지 않을 수 있기 때문이다.
이어서, 시스템은, 각각의 예측자에 대해, 헤더의 비용을 결정할 수 있는데, 이는 예측자가 영역들 또는 바이어스를 사용하는지의 여부에 기초하여 달라질 수 있다. 또한, 구배들과 같은 일부 유형들의 예측자들은 구배를 표현하기 위해 추가적인 헤더 오버헤드를 유발할 수 있다.
size_predictor_c += predictor_c.region_nonzero() ? NUM_REGIONS * region_code_size_bits_c : 0
size_predictor_c += predictor_c.bias != 0 ? delta_bits_c
size_gradient_c += component_width[c]
region_code_size_bits가 일정 영역에 대한 델타들의 크기를 특정하는 데 필요한 비트들의 개수를 표현하는 경우, region_nonzero는, 임의의 영역 감소 코드(상기의 reduction_c[0 .. N-1])가 0이 아닌 경우에 참(true)으로서 정의되고, predictor_c.bias는 예측자가 바이어스를 사용했는지의 여부를 나타낸다.
일부 실시예들에서, 시스템은 각각의 구성요소에 대해 더 작은 크기를 갖는 예측자를 선택한다. 따라서, 픽셀들의 블록을 압축하는 것은 상이한 구성요소들에 대해 상이한 압축 기법들을 사용할 수 있다. 일부 실시예들에서, 예측자들이 동일한 출력 크기를 갖는 경우, 예측자 선택의 미리정의된 순서가 있다. 무손실 압축의 일부 실시예들에서, 개시된 계산들은 상이한 구성요소들에 대해 별도로 수행될 수 있다. 대조적으로, 하기에서 논의되는 바와 같이, 손실 압축은 소정 상황들에서 구성요소들 사이에 비트들을 공유할 수 있다.
322에서, 예시된 실시예에서, 시스템은 선택에 기초하여 블록을 압축한다. 이는, 결정된 파라미터들을 사용하여 각각의 픽셀의 각각의 구성요소에 대한 델타 값들을 저장하는 것을 포함할 수 있다.
324에서, 예시된 실시예에서, 시스템은 블록을 위한 헤더에 대한 레이아웃을 생성하고, 헤더를 패킹한다. 헤더는 선택된 예측자, 델타당 비트들의 개수, 영역 정보, 바이어스 정보 등을 나타낼 수 있다. 헤더의 상세한 예시적인 실시예들이 도 4를 참조하여 하기에서 논의된다.
326에서, 예시된 실시예에서, 시스템은 블록에 대한 메타데이터를 생성한다. 일부 실시예들에서, 메타데이터는 압축된 블록의 크기를 나타낸다. 메타데이터는 손실 및 무손실 포맷들 둘 모두에 대해 동일한 크기, 예컨대 1 바이트일 수 있다. 메타데이터는 블록이 압축되어 있지 않은지 아니면 압축되어 있는지를 나타낼 수 있다. 압축된 블록들의 경우, 메타데이터는 블록이 손실성인지 아니면 무손실성인지를 나타낼 수 있다. 무손실 블록의 경우, 블록에 대한 각각의 구성요소에 대한 예측자가 동일하고 어떠한 구성요소들도 바이어스 또는 역상관성이 인에이블되게 하지 않는 경우, 블록은 일정한 것으로서 설명될 수 있다. 메타데이터는 상이한 압축 컨테이너 포맷들에 대해 이러한 시나리오에서 테이블 룩업에 따라 설정될 수 있다. 블록이 일정하지 않은 경우, 블록은 패딩될 수 있고, 메타데이터는 블록 크기를 설명할 수 있다. 일부 실시예들에서, 블록 크기를 설명하기 위해 메타데이터의 모든 비트들이 필요한 것은 아닐 때, 메타데이터는 헤더로부터의 구성요소(예컨대, 구성요소 0)에 대한 모드 비트들의 일부분을 포함할 수 있다(이는 압축된 블록의 크기를 추가로 감소시킬 수 있음). 일부 실시예들에서, 메타데이터[7:4]에 대한 4'b111의 값의 값은 손실 압축을 나타낸다. 일부 실시예들에서, 이러한 값은, 무손실 압축된 블록의 크기가 타깃 크기 이하일 때에는 메타데이터에서 결코 발생하지 않을 것이다. 이러한 사실은, 일부 실시예들에서, 메타데이터에서 압축된 블록의 크기를 명시적으로 인코딩하는 것을 회피하기 위해, 손실 압축 기법에 의해 사용될 수 있다. 오히려, 메타데이터가 손실 압축을 나타내는 경우, 이는, 압축된 블록이 손실 압축에 대한 타깃 블록 크기를 갖는다는 것을 암시한다.
328에서, 예시된 실시예에서, 시스템은 블록을 패킹한다. 이는 하기의 도 4에 도시된 바와 같이, 헤더 및 영역 정보를 정렬하는 것을 포함할 수 있다. 각각의 영역에 대한 델타들은 트위들(twiddle) 순서로 패킹될 수 있다. 헤더의 일부가 블록에 대한 메타데이터에 포함되는 경우, 시스템은 그 정보를 헤더로부터 제거하고, 헤더의 크기는 감소된다. 압축되지 않은 블록들의 경우, 시스템은 헤더 없이 미리결정된 순서로 픽셀들을 배열할 수 있다. 일부 실시예들에서, 다수의 압축된 블록들은, 예를 들어, 메모리에의 기입을 위해 매크로-블록으로 함께 패킹될 수 있다.
다양한 실시예들에서, 개시된 기법들은 유리하게는, 전통적인 기법들에 비해 개선된 무손실 압축비들 및 개선된 압축 속도를 제공할 수 있다. 특히, 상이한 영역들에 대한 상이한 델타 폭들을 가능하게 하는 것은, 하나의 영역이 상이한 영역들에 대한 감소들을 인코딩하기 위해 합리적인 양의 헤더 정보와 함께 매우 큰 최대 델타를 갖는 영역들에서 양호한 압축을 제공할 수 있다.
도 4는 일부 실시예들에 따른, 헤더를 갖는 픽셀들의 예시적인 압축된 블록을 예시하는 도면이다. 예시된 실시예에서, 압축된 블록은 헤더(410), 및 N개의 영역들에 대한 픽셀 데이터를 특정하는 영역 필드들을 포함한다.
헤더(410)는 예시된 실시예에서, 모드 필드, 비트 필드, 및 기본 필드를 포함한다. 헤더(410)는 또한, 블록을 압축하는 데 사용되는 압축 파라미터들에 따라 영역 필드, 바이어스 필드, 또는 구배 필드(파선들을 사용하여 도시됨)를 선택적으로 포함할 수 있다. 일부 실시예들에서, 시스템은 픽셀들의 블록에 대한 각각의 구성요소에 대한 별개의 헤더를 생성한다. 다른 실시예들에서, 블록에 단일 헤더가 사용되고, 헤더는 상이한 구성요소들에 대한 필드들의 별개의 인스턴스들을 포함한다.
모드 필드는 일부 실시예들에서, 구성요소가 어떻게 압축되는지를 설명한다. 일부 실시예들에서, 이러한 필드는 선택된 예측자(예컨대, 이웃, 구배, 또는 원점), 상이한 영역들에서의 델타당 상이한 개수의 비트들이 인에이블되는지의 여부, 바이어스가 인에이블되는지의 여부, 및 역상관성이 사용되는지의 여부를 나타낸다. 역상관성을 지원하지 않는 일부 포맷들의 경우, 시스템은 모드 필드의 크기를 감소시키기 위해 역상관성 비트를 생략할 수 있다.
비트 필드는 일부 실시예들에서, 블록에 대한 델타 비트 폭을 나타낸다. 예를 들어, 시스템은 각각의 구성요소에 대해 비트 필드를 delta_bits_c - 1로서 인코딩할 수 있다. 비트 필드의 크기는 log2(component_width)일 수 있다. 일부 실시예들에서, 1의 델타 비트 폭은 -1 내지 0의 값들을 표현하고, 2의 폭은 -2 내지 1의 값들을 표현하고, 3의 폭은 -4 내지 3의 값들을 표현하고, 등등이다. 하나 이상의 영역들에 대한 비트 폭들은 하기에서 논의되는 바와 같이, 비트 필드에 의해 나타낸 비트 폭으로부터 감소될 수 있다는 점에 주목한다.
기본 필드는 일부 실시예들에서, 선택된 예측자를 위해 사용되는 기본 값을 나타낸다. 기본 필드의 크기는 구성요소 폭에 대응할 수 있다. 역상관성이 인에이블되는 경우, 이러한 필드는 역상관된 기본 값을 나타낸다.
영역 필드는 일부 실시예들에서, 블록 내의 각각의 영역에 대한 감소를 설명한다. 일부 실시예들에서, 이러한 필드는, 모드 필드가, 영역들이 인에이블됨을 나타내는 경우에만 포함될 수 있다는 점에 주목한다. 일부 실시예들에서, 이러한 필드는 블록에 대한 비트 폭에 대한 그 필드의 감소를 나타내는 각각의 영역에 대한 서브필드를 포함한다. 예를 들어, 비트 폭이 8이고 영역 R3의 감소가 3인 경우, 영역 R3에서의 델타들에 대한 비트 폭은 5이다.
바이어스 필드는 일부 실시예들에서, 압축 동안 델타들로부터 감산될 바이어스 값을 나타낸다. 일부 실시예들에서, 이러한 필드는, 모드 필드가, 바이어스가 인에이블됨을 나타내는 경우에만 포함될 수 있다는 점에 주목한다. 일부 실시예들에서, 이러한 필드의 크기는 delta_bits_c이다.
구배 필드는 일부 실시예들에서, 구배들 dcdx 및 dcdy를 나타낸다. 이러한 필드의 크기는 component_width & ~1 일 수 있다. 일부 실시예들에서, 이러한 필드는, 모드 필드가, 구배 예측자가 선택되었음을 나타내는 경우에만 포함될 수 있다는 점에 주목한다.
도시된 바와 같이, 각각의 영역은 그 영역 내의 픽셀들에 대한 델타들을 포함한다. 압축해제 동안, 디바이스는 헤더(410)에 기초하여 각각의 영역의 시작부를 위치시킬 수 있다. 예시된 예에서, 영역 0은 기본 픽셀(예시된 실시예에서, 픽셀 0 또는 픽셀 M-1 중 어느 하나)을 포함하며, 여기서 M은 영역당 픽셀들의 개수이다. 예시된 실시예에서, 실제로 기본으로서 사용되지 않는 잠재적 기본 픽셀은 항상, 영역 내의 마지막 위치에 위치되는데, 이는 디코딩을 단순화시킬 수 있다. 따라서, 다양한 실시예들에서, 기본 픽셀을 포함하는 영역은 다른 영역들보다 하나 적은 델타를 포함할 수 있다. 예시된 예에서, 다른 영역들(예컨대, 영역 N-1) 내의 픽셀들은 픽셀 P0으로부터 픽셀 M-1의 순서로 저장된다.
일부 실시예들에서, 압축해제 회로부는 다양한 압축 액션들을 원상태로 돌림으로써 픽셀들의 압축된 블록을 압축해제하도록 구성된다. 예를 들어, 압축해제 회로부는 먼저, 예컨대 다수의 압축된 블록들을 포함하는 더 큰 데이터 세트 내의 블록들에 대한 메타데이터에 기초하여, 픽셀들의 블록의 위치를 결정할 수 있다. 이어서, 압축해제 회로부는 블록에 대한 메타데이터를 디코딩한다. 메타데이터가 일정한 블록을 나타낸다면, 디바이스는 서브-블록이 일정한 색상을 포함하는 경우에 각각의 픽셀에 일정한 데이터를 복사할 수 있다. 메타데이터가 압축되지 않은 블록들을 나타내는 경우, 압축해제 회로부는 단순히 픽셀 데이터를 예상된 포맷으로 언패킹할 수 있다.
이어서, 압축해제 회로부는 일부 실시예들에서, 헤더를 언패킹하여 가변 필드들의 크기 및 패킹된 델타들의 시작부를 결정한다. 이어서, 디바이스는 헤더에 의해 특정된 비트 폭들을 사용하여 델타들을 언패킹한다. 원점 및 구배 모드들의 경우, 시스템은 기본 값에 델타들을 추가함으로써 헤더를 사용하여 각각의 구성요소를 직접 압축해제한다. 이웃 모드의 경우, 디바이스는 초기에 내부 구성요소들을 디코딩할 수 있고, 그 뒤에 이웃 컴포넌트들을 디코딩할 수 있다. 시스템은 압축 동안 적용되는 경우, 역상관성을 반전시킨다. 일부 실시예들에서, 이러한 압축해제 절차는 손실 없이 오리지널 픽셀 데이터를 제공한다.
예시적인 손실 압축 기법들
일부 실시예들에서, 컴퓨팅 시스템은 도 3의 기법과 같은 무손실 기법이 타깃 압축된 블록 크기를 충족시키지 않는 것으로 결정된 후, 손실 압축 기법으로 되돌아간다. 타깃 블록 크기는 프로그래밍가능할 수 있거나 또는 프로세싱 모드에 기초하여 달라질 수 있다. 또한, 일부 실시예들에서, 컴퓨팅 시스템은 무손실 압축에 대한 출력 크기를 먼저 결정하지 않고서 손실 압축을 수행할 수 있다.
일부 실시예들에서, 개시된 손실 기법은 개별적으로, 압축되는 픽셀들의 블록의 상이한 영역들을 고려한다. 또한, 시스템은 초기 양자화를 선택한 이후 구성요소들에 걸쳐 비트들을 공유할지의 여부를 결정할 수 있고, 기본들에 사용되는 비트 폭들 및 델타들을 조정할 수 있고, 소정 에러 상태들 또는 폴백 모드들을 핸들링할 수 있다.
도 5는 일부 실시예들에 따른, 픽셀들의 블록의 손실 압축을 위한 예시적인 기법을 예시하는 흐름도이다. 도 5에 도시된 방법은 다른 것들 중에서도, 본 명세서에 개시되는 컴퓨터 회로부, 시스템들, 디바이스들, 요소들 또는 컴포넌트들 중 임의의 것과 함께 사용될 수 있다. 다양한 실시예들에서, 도시된 방법 요소들 중 일부는 동시에, 또는 도시된 바와는 상이한 순서로 수행될 수 있거나, 또는 생략될 수 있다. 부가적인 방법 요소들이 또한 원하는 대로 수행될 수 있다.
510에서, 예시된 실시예에서, 컴퓨팅 시스템은 무손실 예측자 결과들이 너무 크다고 결정한다. 예를 들어, 도 3의 기법에서 사용되는 무손실 예측자들 중 어느 것도 픽셀들의 블록을 임계 데이터 크기로 압축할 수 없다. 다른 실시예들에서, 손실 압축은 무손실 예측자들을 먼저 수행하지 않고서 수행될 수 있다는 점에 주목한다. 일부 실시예들에서, 손실 압축으로 되돌아가기 전에 무손실 압축자가 사용될 수 있는지의 여부를 체크하는 것은 전체 압축비들을 개선할 수 있다.
512에서, 예시된 실시예에서, 시스템은 바이어스를 추가하고, 픽셀 구성요소 값들을 클램핑한다. 예를 들어, 하기의 시스템은 구성요소가 부호있는 포맷(예컨대, 부호있는 정수 또는 부호있는 정규화됨)으로 표현되는지 아니면 다른 포맷(예컨대, 부동 또는 부호없음)으로 표현되는지를 결정할 수 있다. 부호있는 경우, 각각의 구성요소 및 각각의 영역에 대해, 시스템은 부호 비트를 플립핑함으로써 바이어스를 적용한다. 이어서, 결과는, 적절하다면, 보존(preservation)을 위한 최소값으로 클램핑된다.
514에서, 예시된 실시예에서, 시스템은 압축되는 픽셀들의 블록의 각각의 영역에서 각각의 픽셀 구성요소에 대한 최소 및 최대 값들을 결정한다. 이는 각각의 영역 내의 최소 압축가능 픽셀(들)을 결정하기 위한 하나의 기법이다. 일부 실시예들에서, 최소 값은 기본으로서 사용되고, 최대 값은 구성요소의 범위를 결정하는 데 사용된다. 이러한 프로세싱의 출력들은 각각의 영역에 대한 각각의 구성요소에 대한 min_value, 각각의 영역에 대한 각각의 구성요소에 대한 min_position(최소 값을 갖는 픽셀의 위치), 및 각각의 영역에 대한 각각의 구성요소에 대한 max_value일 수 있다.
516에서, 예시된 실시예에서, 시스템은 손실 양자화 모드를 결정한다. 주어진 구성요소 폭의 경우, 다수의 모드들이 이용가능할 수 있다. 모드들은, 예컨대 룩업 테이블에서, 미리결정되고 인코딩될 수 있다. 각각의 모드는 범위, 기본 비트들, 델타 비트들, 레벨, 자유 레벨, 및 기본이 보호되는지의 여부와 같은 다양한 속성들에 대해 잠재적으로 상이한 값들을 가질 수 있다. 기본 비트들 및 델타 비트들은 기본 및 델타들을 각각 인코딩하는 데 사용되는 비트들의 개수를 나타낼 수 있다. 기본들은 더 높은 모드들에서 더 양자화될 수 있는 반면, 델타들은 더 낮은 모드들로 더 양자화될 수 있다. 레벨은 모드가 얼마나 강하게 양자화될지(또는 양자화되지 않을지)를 나타낼 수 있다. 시스템은 또한, 교차 구성요소 비트 공유를 적용할지의 여부를 결정하기 위해 레벨을 사용할 수 있다. 전체적으로, 레벨은 부호가 있을 수 있고, 하위 레벨 값들은 더 큰 양자화를 나타낼 수 있다. 자유 레벨은 현재 구성요소의 기본 또는 델타 비트들로부터 감산하지 않고서 다른 구성요소에 주어질 수 있는 레벨들의 수를 나타낼 수 있다. 보호된 기본은 다른 구성요소에 레벨들을 제공할 때 구성요소의 기본 비트들이 감소될 수 없음을 나타낸다.
하나의 예에서, 하기의 표는 일부 실시예들에 따른, 16-비트 구성요소 폭의 2개의 모드들에 대한 모드 정보를 포함한다(그러나, 다양한 인코딩들이 구현될 수 있다는 점에 주목함). 이러한 예에서, 보여주지 않은 다른 모드들(예컨대, 모드 1 내지 모드 14)은, 예컨대 모드 0에 대한 값과 모드 15에 대한 값 사이의 범위들에서, 다양한 범위들, 기본 비트들, 델타 비트들, 레벨들, 자유 레벨들, 및 보호된 값들을 가질 수 있다:
Figure pct00001
일부 실시예들에서, 손실 양자화 모드를 결정하기 위해, 시스템은 먼저, 각각의 영역에 대해, 각각의 구성요소에 대한 최대 델타들을 찾아서 델타들을 표현하는 데 필요한 부호없는 비트들의 개수를 결정함으로써 모든 델타들을 패킹하는 데 필요한 비트들의 개수를 결정한다. 이러한 값은 이러한 범위들에 기초하여 각각의 구성요소에 대한 양자화 모드를 생성하는 데 사용될 수 있다. 달리 말하면, 각각의 모드는 범위와 연관될 수 있고, 그 모드는, 영역 내의 구성요소에 대한 max_value와 min_value 사이의 차이가 그 범위 내에 있도록 선택될 수 있다. 일단 모드가 선택되면, 압축 회로부는 모드에 기초하여 교차 구성요소 비트 공유를 수행할지의 여부를 결정할 수 있다.
일부 실시예들에서, 시스템은 기본 값을 양자화함으로써 델타 범위를 확장시키는 것(델타 양자화를 감소시키는 것)이 양자화 손실을 감소시킬 것인지의 여부를 추가로 결정한다. 예를 들어, 시스템은, 양자화 이후 새로운 기본 값을 결정하고 이러한 값이 전이 임계치를 충족시키는지의 여부를 결정하기 위해 마스크를 적용할 수 있다. 따라서, 시스템은, 일부 상황들에서, 기본 min_value를 추가로 양자화하여 델타 양자화에 사용하기 위한 추가적인 비트들을 제공할 것을 결정할 수 있다. 이는 예를 들어, 양자화 모드를 1씩 증가시킴으로써 구현될 수 있다. 이러한 지점에서, 시스템은 일부 실시예들에서, 각각의 영역 내의 각각의 구성요소에 대한 양자화 모드를 선택하였다.
518에서, 예시된 실시예에서, 시스템은 교차 구성요소 비트 공유를 사용할지의 여부를 결정한다. 대체적으로 말하면, 일부 구성요소들은 (예컨대, 일정한 값들 또는 작은 델타 범위들에 대해) 더 적은 기본/델타 비트들을 필요로 할 수 있고, 그들의 비트들 중 일부를 포기하여 다른 구성요소들이 그 다른 구성요소들에 대한 양자화 에러를 감소시킬 수 있다.
일부 실시예들에서, 이것은 각각의 영역에 대해, 각각의 구성요소의 양자화 모드들을, 예컨대 최소로부터 최대까지 분류하는 것을 포함한다. 예시적인 4-구성요소 포맷의 경우, 예를 들어, 시스템은, 예시적인 4-구성요소 포맷에서, m0이 최소 모드를 갖는 구성요소에 대응하고, ㎥이 최대 모드를 갖는 구성요소에 대응하고, m1 및 m2가 2개의 다른 구성요소들에 대응하도록 모드들을 분류할 수 있다.
이어서, 시스템은 각각의 구성요소의 모드들 사이의 차이들을 결정할 수 있으며, 차이들을 사용하여 어느 구성요소들이 양자화 레벨들을 얻거나 상실하는지를 결정할 수 있다. 하기의 코드는 그러한 계산의 하나의 비제한적인 예를 도시하지만, 다양한 기법들이 고려된다:
Figure pct00002
그 밖에는,
Figure pct00003
이러한 코드 예는 4-채널 비트 공유를 위한 것이지만, 유사한 기법들이, 예컨대 2-채널 모드들에서 상이한 개수의 채널들에 사용될 수 있다는 점에 주목한다. 이러한 지점에서, 시스템은 각각의 구성요소에 걸쳐 양자화 레벨들을 분산시켰고, start_level 및 end_level은 각각의 구성요소가 어떻게 양자화될지를 나타낸다. 모드들 및 모드들에 기초하여 비트들을 공유하는 것에 관한 상기의 논의가 설명의 목적들을 위해 포함되지만, 본 개시내용은 이러한 특정 기법들로 제한되지 않는다는 점에 주목한다. 오히려, 개시된 시스템들은 주어진 영역 내의 구성요소들 간에 비트들을 공유할지의 여부를 결정하기 위해 다양한 기법들을 구현할 수 있다.
520에서, 예시된 실시예에서, 시스템은 기본 및 델타 비트들을 조정한다. 일부 실시예들에서, 이는 요소(518)에서 결정된 양자화 레벨들을 사용한다. 예를 들어, 하기의 의사코드는 이러한 기능을 구현할 수 있다.
Figure pct00004
이러한 지점에서, 시스템은 일부 실시예들에서, 각각의 구성요소에 대해 최종 base_bits 및 delta_bits를 생성하였다.
522에서, 예시된 실시예에서, 시스템은 픽셀-양자화 폴백이 필요한지의 여부를 체크한다. 소정 상황들에서, 기본 및 델타들을 양자화하기보다는 영역 내의 입력 픽셀 데이터를 직접 양자화하는 것이 바람직할 수 있다. 하나의 예시적인 상황은, 델타들에 사용되는 양자화의 레벨이 입력 픽셀 데이터의 직접 양자화를 초과하는 양자화 에러들을 생성할 때이다. 다른 그러한 상황은, 입력 데이터가 부동 소수점 포맷으로 표현되고 구성요소가 특수 인코딩과 매칭된 적어도 하나의 값(예컨대, 음의 0, 플러스 또는 마이너스 무한대, 또는 숫자가 아닌(not a number, NaN) 기준(canonical))을 가졌을 때이며, 여기서 지수는 모든 1의 것이고 가수의 최상위 비트가 설정된다. 일부 실시예들에서, 시스템은 이러한 시나리오들 중 어느 하나가 일정 영역에 대해 검출되는 경우, 그 영역에 대한 픽셀 값들의 직접 양자화로 폴백하도록 구성된다. 폴백이 발생하는 경우, 시스템은 그 영역에 대한 요소(526)로 스킵할 수 있다.
524에서, 예시된 실시예에서, 시스템은 선택된 파라미터들에 따라 기본들 및 델타들을 계산하고 양자화한다. 시스템은 일정 영역 내의 픽셀 구성요소들에 대한 델타를, 그 영역에 대한 기본 값으로부터 그들의 값을 감산함으로써 결정할 수 있다. 따라서, 각각의 N-픽셀 영역에 대해, N-1개의 델타 값들이 각각의 구성요소에 대해 생성될 수 있는데, 그 이유는 기본 픽셀이 0의 암시된 델타 값을 갖기 때문이다. 이어서, 일부 실시예들에서, 시스템은 각각의 영역에 대한 결정된 개수의 비트들을 사용하여 델타 값들을 양자화한다. 양자화는, 최대 구성요소 값을 보존하고 바이어스(예컨대, 압축해제 동안의 중간점 재구성으로 인한 바이어스)를 감소시키기 위한 조정을 포함할 수 있다.
526에서, 예시된 실시예에서, 시스템은 압축된 픽셀 정보를 패킹한다. 패킹은 픽셀-양자화 폴백 모드가 사용되었는지의 여부에 따라 상이하게 수행될 수 있다. 하기에서 더 상세히 논의되는 도 6은 예시적인 패킹 포맷들을 제공한다.
528에서, 예시된 실시예에서, 시스템은 압축된 데이터에 대한 메타데이터를 생성한다. 일부 실시예들에서, 메타데이터는 모든 포맷들에 대해 동일한 크기, 예컨대 1 바이트이다. 일부 실시예들에서, 유효 데이터가 없는 서브-블록들은 0의 메타데이터 값을 갖는다. 일부 실시예들에서, 메타데이터[7:4]를 4'b1111로 설정하는 것은 손실 모드를 나타내는데, 이는 압축된 블록의 크기가 손실 타깃 크기에 대응한다는 것을 암시할 수 있다(이는 메타데이터에서 압축된 블록의 크기를 명시적으로 인코딩하는 것을 회피할 수 있음). 일부 실시예들에서, 나머지 비트들은 각각, (예시적인 4-영역 실시예들에서) 특정 영역에 대해 양자화 폴백이 사용되었는지의 여부를 나타낸다. 일부 실시예들에서, 다수의 압축된 블록들이 그들의 메타데이터와 함께, 예컨대 메모리에의 조합된 기입을 위해, 함께 패킹된다.
도 6은 일부 실시예들에 따른, 압축된 픽셀들의 블록의 영역에 대한 예시적인 포맷을 예시하는 블록도이다. 예시된 실시예에서, 포맷은 고정 헤더(610), 가변 헤더(620), 패딩 비트들(630), 및 패킹된 델타들(640)을 포함한다.
고정 헤더(610) 및 가변 헤더(620)에서, 일부 실시예들에서, 시스템은 상이한 구성요소들(예컨대, RGBA)에 대한 데이터를 인터리빙한다. 데이터는 일부 실시예들에서, 손실 타깃 크기의 1/4 내에 피팅되어야 한다. 일부 실시예들에서, 패딩(630)은, 헤더가 영역에 대한 데이터의 시작부에 정렬되고 마지막 델타가 영역에 대한 데이터의 종단부와 정렬되도록 추가된다. 고정 헤더(610)는 일부 실시예들에서, 모드를 인코딩하는 반면, 가변 헤더(620)는 각각의 구성요소에 대해, 기본 값 위치 및 양자화된 기본 값을 인코딩한다.
일부 실시예들에서, 패킹된 델타들(640)은 기본을 제외하고서, 각각의 구성요소에 대한 영역 내의 각각의 픽셀에 대한 델타를 포함한다. 예를 들어, 예시된 실시예에서, 패킹된 델타들은 픽셀들 P0 내지 Pi에 대한 데이터를 포함하며, 여기서 영역 내에는 i+2개의 픽셀들이 있다. 예시된 4-구성요소 실시예에서, 각각의 픽셀 필드는 4개의 델타들(각각의 구성요소에 대해 하나씩)을 포함하고, 필요한 경우, 패딩을 포함할 수 있다. 픽셀당 상이한 개수의 구성요소들을 갖는 실시예에 대해, 더 많은 또는 더 적은 개수의 델타들이 포함될 수 있다는 점에 주목한다. 폴백 모드가 영역에 사용될 때, 일부 실시예들에서, 모든 구성요소들은 동일하게 양자화되고, 헤더 인코딩이 없다.
압축해제 회로부는 일부 실시예들에서, 손실 압축해제를 위해 하기의 절차를 수행하도록 구성된다. 첫째, 디바이스는, 예컨대 이전 블록들의 메타데이터 값들에 기초하여, 압축된 블록의 위치를 결정할 수 있다. 둘째, 압축해제 회로부는 블록에 대한 메타데이터를 디코딩할 수 있다. 메타데이터가 일정한 블록을 나타내는 경우, 압축해제 회로부는 색상을 각각의 픽셀에 복사할 수 있다. 메타데이터가 타깃 크기 내에 피팅되는 무손실 블록을 나타내는 경우, 무손실 기법들을 참조하여 전술된 바와 같이, 무손실 압축해제 회로부가 블록을 디코딩한다. 메타데이터가, 양자화를 요구한 손실 블록을 나타내는 경우, 손실 압축해제 회로부는 블록을 디코딩한다.
압축해제 회로부는 패킹된 블록 내의 각각의 영역에 대해, 영역 인코딩을 결정한다. 폴백 인코딩이 사용되었다면, 그것은 영역을 언패킹하고, 각각의 픽셀을 역양자화하기 위해 중간점 재구성을 수행한다. 이러한 영역의 압축해제는 이러한 지점에서 마감될 수 있다. 폴백 인코딩이 사용되지 않았다면, 압축해제 회로부는 추출된 모드에 기초하여 언패킹하고 디코딩한다. 일부 실시예들에서, 이는, 모드에 기초하여 기본 및 델타 비트 폭들을 결정하고 교차 구성요소 비트 공유에 따라 조정하는 것을 포함한다(압축해제 회로부는, 각각의 구성요소에 대한 모드들에 기초하여 교차 구성요소 비트 공유를 결정하기 위해 압축 회로부와 동일한 계산을 수행할 수 있음). 이어서, 압축해제 회로부는 기본 및 기본 위치를 언패킹할 수 있고, 양자화된 델타들을 언패킹할 수 있다. 이어서, 압축해제 회로부는 델타들을 역양자화할 수 있고, 픽셀 값들을 재구성할 수 있다. 손실 압축을 위해, 출력 픽셀 구성요소 값들은 양자화로 인해 입력 픽셀 구성요소 값들과 매칭되지 않을 수 있다.
개시된 기법들은 유리하게는, 전통적인 기법들에 비해, 양호한 압축비들, 낮은 전력 소비, 및 손실 압축에 대한 개선된 정확도를 제공할 수 있다.
예시적인 방법들
도 7은 일부 실시예들에 따른, 무손실 압축을 위한 예시적인 방법을 예시하는 흐름도이다. 도 7에 도시된 방법은 다른 것들 중에서도, 본 명세서에 개시되는 컴퓨터 회로부, 시스템들, 디바이스들, 요소들 또는 컴포넌트들 중 임의의 것과 함께 사용될 수 있다. 다양한 실시예들에서, 도시된 방법 요소들 중 일부는 동시에, 또는 도시된 바와는 상이한 순서로 수행될 수 있거나, 또는 생략될 수 있다. 부가적인 방법 요소들이 또한 원하는 대로 수행될 수 있다.
710에서, 예시된 실시예에서, 압축 회로부는, 다수의 상이한 무손실 압축 기법들에 대해 적어도 부분적으로 동시에, 그 기법을 사용하여, 압축되는 픽셀들의 세트 내의, 최소 압축가능 픽셀을 표현하는 데 필요한 비트들의 개수를 결정한다. 픽셀들의 세트 내의 "최소 압축가능 픽셀"은 주어진 압축 기법에서 표현할 최대량의 데이터를 요구하는 픽셀을 지칭한다. 예를 들어, 4개의 픽셀들의 세트 및 원점 예측자에 대해, 픽셀들이 1개, 2개, 4개, 및 31개의 각자의 델타들을 갖는 상황을 고려한다. 31의 델타를 갖는 픽셀은 최소 압축가능 픽셀인데, 그 이유는 그것이 원점 압축 기법의 경우에 그의 델타를 표현하기 위해 대부분의 비트들을 요구하기 때문이다. 다수의 픽셀들은, 예컨대 다수의 픽셀들이 동일한 최대 개수의 비트들을 요구하는 경우, 세트 내의 "최소 압축가능 픽셀들"일 수 있다는 점에 주목한다. 일부 실시예들에서, 도 7의 요소들은 픽셀들의 세트 내의 픽셀들의 상이한 구성요소들에 대해 별도로 수행된다.
일부 실시예들에서, 압축 회로부는, 압축 기법들 중 몇몇에 대한 픽셀들의 세트 내의 픽셀들의 다수의 영역들에 대해, 그 기법을 사용하여, 최소 압축가능 픽셀을 표현하는 데 필요한 비트들의 영역 개수를 결정한다. 일부 실시예들에서, 기법들 중 하나 이상의 기법들에 대한 헤더 정보는 비트들의 각자의 영역 개수들과 비트들의 개수 사이의 차이들을 나타내는 필드들을 포함한다. 이것은, 예컨대 하나의 영역이 특히 어려운 픽셀을 갖지만 다른 영역들은 그렇지 않은 시나리오들에서, 더 양호한 압축비들을 제공할 수 있다.
일부 실시예들에서, 압축 기법들은, 픽셀들의 세트 내의 픽셀들에 대한 값들과 픽셀들의 세트 내의 원점 픽셀의 값 사이의 델타들을 결정하는 원점 기법, 픽셀들의 세트 내의 인접 픽셀들에 대한 값들 사이의 델타들을 결정하는 이웃 기법, 및 픽셀들의 세트 내의 픽셀들에 대한 값들과, 원점 픽셀에 인접한 하나 이상의 픽셀들에 기초한 구배 값에 추가된 픽셀들의 세트 내의 원점 픽셀의 값 사이의 델타들을 결정하는 구배 기법을 포함한다. 일부 실시예들에서, 픽셀 데이터는 픽셀당 다수의 구성요소들을 포함하고, 압축 기법들은 하나의 구성요소(예컨대, 녹색 구성요소)로부터의 값들을 하나 이상의 다른 구성요소들로부터 감산하는 하나 이상의 역상관성 기법들을 포함한다. 압축 기법들 중 하나 이상은 고정된 기본 픽셀 위치들을 가질 수 있는데, 이는 상이한 기법들에 대해 상이할 수 있다.
720에서, 예시된 실시예에서, 압축 회로부는 다수의 압축 기법들에 대한 압축 정보를 저장하는 데 필요한 결정된 개수의 비트들 및 헤더 크기들에 기초하여 압축 기법들 중 하나를 선택한다. 일부 실시예들에서, 압축 기법의 선택은 비트들의 결정된 영역 개수들에 추가로 기초할 수 있다.
730에서, 예시된 실시예에서, 압축 회로부는 선택된 압축 기법을 사용하여 픽셀들의 세트에 대한 값들을 인코딩하는 정보를 저장한다. 예를 들어, 압축 회로부는 선택된 기법에 따라 각각의 픽셀에 대한 각각의 구성요소에 대한 델타를 저장할 수 있고, 선택된 기법 및 델타들의 크기를 나타내는 헤더 정보를 생성할 수 있다.
일부 실시예들에서, 압축 회로부는 픽셀들의 압축된 세트의 크기를 나타내는 메타데이터를 생성한다. 일부 실시예들에서, 메타데이터는 고정된 크기를 가지며, 압축 회로부는, 픽셀들의 압축된 세트의 크기를 표현하기 위해 메타데이터의 모든 비트들이 필요한 것은 아니라고 결정하는 것에 응답하여, 메타데이터에 헤더 정보의 하나 이상의 비트들을 포함한다. 이는 픽셀들의 압축된 블록의 전체 크기를 추가로 감소시킬 수 있다.
도 8은 일부 실시예들에 따른, 손실 압축을 위한 예시적인 방법을 예시하는 흐름도이다. 도 7에 도시된 방법은 다른 것들 중에서도, 본 명세서에 개시되는 컴퓨터 회로부, 시스템들, 디바이스들, 요소들 또는 컴포넌트들 중 임의의 것과 함께 사용될 수 있다. 다양한 실시예들에서, 도시된 방법 요소들 중 일부는 동시에, 또는 도시된 바와는 상이한 순서로 수행될 수 있거나, 또는 생략될 수 있다. 부가적인 방법 요소들이 또한 원하는 대로 수행될 수 있다.
810에서, 예시된 실시예에서, 압축 회로부는 압축되는 픽셀들의 블록에 대한 픽셀 데이터에 액세스한다. 픽셀 데이터는 각각의 픽셀에 대한 다수의 구성요소들에 대한 값들을 포함할 수 있다. 구성요소 값들은 픽셀들의 상이한 블록들에 대해 상이한 폭들을 가질 수 있고, 폭들은 프로그래밍가능할 수 있다. 일부 실시예들에서, 압축 회로부는 부호있는 포맷으로 표현된 하나 이상의 구성요소 값들에 바이어스를 적용할지의 여부를 결정한다.
820에서, 예시된 실시예에서, 압축 회로부는 픽셀들의 블록의 픽셀들에 포함된 다수의 구성요소들에 대해, 픽셀들의 블록의 각자의 상이한 영역들에서의 각자의 최소 및 최대 구성요소 값들을 결정한다.
830에서, 예시된 실시예에서, 압축 회로부는, 결정된 최소 및 최대 구성요소 값들에 기초하여, 제1 영역 내의 제1 구성요소에 대한 기본 값에 대한 델타 값들을 표현하기 위해 제1 개수의 비트들을 사용하고, 제1 영역 내의 제2 구성요소에 대한 기본 값에 대한 델타 값들을 표현하기 위해 제2의 상이한 개수의 비트들을 사용할 것을 결정한다.
일부 실시예들에서, 제1 및 제2 개수의 비트들을 결정하기 위해, 압축 회로부는 대응하는 최소 구성요소 값과 최대 구성요소 값 사이의 차이에 기초하여 제1 구성요소에 대한 제1 영역 내의 델타 값들을 표현하기 위해 비트들의 제1 초기 개수를 결정하고, 대응하는 최소 구성요소 값과 최대 구성요소 값 사이의 차이에 기초하여 제2 구성요소에 대한 제1 영역 내의 델타 값들을 표현하기 위해 비트들의 제2 초기 개수를 결정한다. 이어서, 압축 회로부는 델타 비트들을 제2 구성요소와 공유하기 위해 제1 초기 개수의 비트들을 감소시킬 것을 결정하는 것에 응답하여 제1 및 제2 개수의 비트들을 선택한다.
일부 실시예들에서, 압축 회로부는 모드 기반 룩업 기법을 사용하여, 교차 구성요소 비트 공유를 적용할지의 여부를 결정한다. 예를 들어, 압축 회로부는, 제1 구성요소에 대한 제1 영역 내의 최소 구성요소 값과 최대 구성요소 값 사이의 차이에 기초하여 제1 구성요소에 대한 압축 모드를 결정할 수 있다. 이어서, 압축 회로부는 상이한 구성요소들의 모드들에 기초하여 비트들을 공유할지의 여부를 결정할 수 있다. 예를 들어, 각각의 모드는 하기 중 하나 이상을 나타낼 수 있다: 기본 비트들의 초기 개수, 델타 비트들의 초기 개수, 압축 레벨, 구성요소의 기본 또는 델타 비트들로부터 감산하지 않고서 다른 구성요소에 제공될 수 있는 레벨들의 수를 나타내는 자유 레벨 값, 및 하나 이상의 레벨들을 다른 구성요소에 제공할 때 구성요소의 기본 비트들이 감소될 수 있는지의 여부를 나타내는 보호되는 기본 값. 영역 내의 각각의 구성요소에 대한 이러한 필드들에 기초하여, 교차 구성요소 비트 공유 로직은, 예컨대 전체 양자화를 감소시키기 위해, 비트 공유의 정도를 결정할 수 있다.
840에서, 예시된 실시예에서, 압축 회로부는, 결정된 제1 및 제2 개수의 비트들을 사용하여 픽셀들의 블록의 제1 영역 내의 픽셀들의 제1 및 제2 구성요소들에 대한 델타 값들을 양자화한다. 델타들은 기본 픽셀 값에 대해 결정될 수 있다. 양자화는 손실 압축을 초래할 수 있다. 일부 실시예들에서, 압축 회로부는 제3의 상이한 결정된 개수의 비트들을 사용하여 픽셀들의 블록의 제2 영역 내의 픽셀들의 제1 구성요소에 대한 델타 값들을 양자화한다. 다시 말해, 압축 회로부는 상이한 영역들에서 상이한 개수의 비트들을 사용하여 동일한 구성요소에 대한 델타 값들을 양자화할 수 있다.
일부 실시예들에서, 압축 회로부는 픽셀들의 블록의 제2 영역에 대한 픽셀 구성요소 값들의 직접 양자화를 선택하고 적용하도록 구성된다. 압축 회로부는, 제2 영역에 대한 델타 값들에 사용되는 양자화의 레벨이 입력 픽셀 데이터의 직접 양자화를 초과하는 양자화 에러들을 생성하거나 또는 제2 영역 내의 구성요소의 부동 소수점 값이 특수 부동 소수점 값들의 세트에 포함된다고 결정하는 것에 응답하여, (예컨대, 기본 및 델타 값들과는 대조적으로) 직접 양자화를 적용할 수 있다.
850에서, 예시된 실시예에서, 압축 회로부는, 양자화된 델타들을 사용하여 픽셀들의 블록의 압축된 버전을 저장한다. 예를 들어, 압축 회로부는 픽셀들의 압축된 블록을 캐시/메모리 계층구조 내의 레벨에 기록할 수 있다. 블록은 나중에, 그래픽 프레임들을 생성하는 데 사용하기 위해 회수되고 압축해제될 수 있다.
본 명세서에서 사용되는 바와 같이, 용어 "각각"은 다수의 요소들의 세트 내의 모든 요소를 지칭하는 데 사용되지만, 지칭되고 있지 않은 장치 또는 방법과 연관된 다른 요소들이 있을 수 있다. 다시 말해, "각각"이 속성 또는 액션을 복수의 요소들의 모든 구성원에 귀속시키는 일 실시예와 관련하여 사용되는 경우, 그것은 실시예가 속성 또는 액션이 적용되지 않는 요소의 다른 인스턴스들을 포함할 수 있는 가능성을 배제하려고 의도되지 않는다. 예를 들어, 장치가 압축 기법들 A 내지 F를 지원하는 경우, 어구 "다수의 압축 기법들의 세트 중의 각각의 기법에 대해, . . .을 결정한다"는 모든 지원되는 기법들의 다양한 서브세트들(예컨대, 서브세트 A와 B, B 내지 E, D와 F 등) 내의 각각의 기법을 지칭할 수 있다. 유사하게, 픽셀들의 블록 내의 픽셀들의 "각각의 구성요소"에 대한 동작을 수행할 때, 이러한 어구는 (예컨대, 구성요소들 중 하나 이상이 픽셀 정보를 저장하는 데 사용되고 있지 않을 때) 모든 잠재적 구성요소들의 일부 서브세트를 지칭할 수 있다.
하기의 번호가 매겨진 항목들은 본 명세서에 개시된 다양한 비제한적인 실시예들을 나타낸다:
세트 A
A1. 장치로서,
압축 회로부를 포함하며, 압축 회로부는,
다수의 상이한 무손실 압축 기법들에 대해 적어도 부분적으로 동시에, 그 기법을 사용하여, 압축되는 픽셀들의 세트 내의, 최소 압축가능 픽셀을 표현하는 데 필요한 비트들의 개수를 결정하도록;
다수의 압축 기법들에 대한 압축 정보를 저장하는 데 필요한 결정된 개수의 비트들 및 헤더 크기들에 기초하여 압축 기법들 중 하나를 선택하도록; 그리고
선택된 압축 기법을 사용하여 픽셀들의 세트에 대한 값들을 인코딩하는 정보를 저장하도록 구성되는, 장치.
A2. 세트 A 내의 임의의 이전 항목에 있어서, 압축 회로부는,
압축 기법들 중 몇몇에 대한 픽셀들의 세트 내의 픽셀들의 다수의 영역들에 대해, 그 기법을 사용하여, 최소 압축가능 픽셀을 표현하는 데 필요한 비트들의 영역 개수를 결정하도록 추가로 구성되고,
압축 기법들 중 하나의 압축 기법의 선택은 결정된 영역 개수의 비트들에 추가로 기초하는, 장치.
A3. 세트 A 내의 임의의 이전 항목에 있어서, 기법들 중 하나 이상의 기법들에 대한 헤더 정보는 비트들의 각자의 영역 개수들과 비트들의 개수 사이의 차이들을 나타내는 필드들을 포함하는, 장치.
A4. 세트 A 내의 임의의 이전 항목에 있어서, 헤더 정보는 선택된 압축 기법, 픽셀들의 세트 내의 픽셀들의 구성요소들에 대한 델타들을 표현하는 데 사용되는 비트들의 개수, 및 기본 픽셀 값을 추가로 나타내는, 장치.
A5. 세트 A 내의 임의의 이전 항목에 있어서, 다수의 상이한 무손실 압축 기법들은,
픽셀들의 세트 내의 픽셀들에 대한 값들과 픽셀들의 세트 내의 원점 픽셀의 값 사이의 델타들을 결정하는 원점 기법;
픽셀들의 세트 내의 인접 픽셀들에 대한 값들 사이의 델타들을 결정하는 이웃 기법; 및
픽셀들의 세트 내의 픽셀들에 대한 값들과, 원점 픽셀에 인접한 하나 이상의 픽셀들에 기초한 구배 값에 추가된 픽셀들의 세트 내의 원점 픽셀의 값 사이의 델타들을 결정하는 구배 기법을 포함하는, 장치.
A6. 세트 A 내의 임의의 이전 항목에 있어서, 구배 기법에 대해, 압축 회로부는 픽셀들의 세트에 대해 헤더에 구배 값을 저장하도록 구성되는, 장치.
A7. 세트 A 내의 임의의 이전 항목에 있어서, 픽셀 데이터는 픽셀당 다수의 구성요소들을 포함하고, 다수의 상이한 무손실 압축 기법들은 하나의 구성요소로부터의 값들을 하나 이상의 다른 구성요소들로부터 감산하는 하나 이상의 역상관성 기법들을 포함하는, 장치.
A8. 세트 A 내의 임의의 이전 항목에 있어서, 압축 회로부는, 픽셀들의 압축된 세트의 크기를 나타내는 메타데이터를 생성하도록 추가로 구성되는, 장치.
A9. 세트 A 내의 임의의 이전 항목에 있어서, 메타데이터는 고정된 크기를 가지며, 압축 회로부는, 픽셀들의 압축된 세트의 크기를 표현하기 위해 메타데이터의 모든 비트들이 필요한 것은 아니라고 결정하는 것에 응답하여, 메타데이터에 헤더 정보의 하나 이상의 비트들을 포함하도록 추가로 구성되는, 장치.
A10. 세트 A 내의 임의의 이전 항목에 있어서, 압축 회로부는 픽셀들의 세트에서의 픽셀 값들에 바이어스를 적용할지의 여부를 결정하도록 추가로 구성되는, 장치.
A11. 세트 A 내의 임의의 이전 항목에 있어서, 압축 기법들 중 하나 이상은 고정된 기본 픽셀 위치를 갖고, 상이한 압축 기법들은 상이한 기본 픽셀 위치들을 사용하는, 장치.
A12. 세트 A 내의 임의의 이전 항목에 있어서, 압축 회로부는 최소 압축가능 픽셀을 별개로 결정하도록 그리고 픽셀들의 세트 내의 픽셀들에 포함된 다수의 구성요소들에 대한 압축 기법을 선택하도록 구성되는, 장치.
A13. 세트 A 내의 임의의 이전 항목의 장치에 의해 수행되는 동작들의 임의의 조합을 포함하는 방법.
A14. 설계에 따른 회로를 생성하기 위해 설계 정보를 사용하도록 구성되는 반도체 제조 시스템에 의해 인식되는 포맷으로 하드웨어 집적 회로의 적어도 일부분의 설계를 특정하는 상기 설계 정보를 저장하는 비일시적 컴퓨터 판독가능 저장 매체로서, 상기 설계 정보는, 상기 회로가,
세트 A 내의 임의의 이전 항목에서 인용되는 요소들의 임의의 조합을 포함하는 것을 특정하는, 비일시적 컴퓨터 판독가능 저장 매체.
예시적인 디바이스
이제, 도 9를 참조하면, 디바이스(900)의 예시적인 실시예를 예시하는 블록도가 도시되어 있다. 일부 실시예들에서, 디바이스(900)의 요소들은 시스템 온 칩 내에 포함될 수 있다. 일부 실시예들에서, 디바이스(900)는 배터리 전력이 공급될 수 있는 모바일 디바이스 내에 포함될 수 있다. 따라서, 디바이스(900)에 의한 전력 소비는 중요한 설계 고려사항일 수 있다. 예시된 실시예에서, 디바이스(900)는 패브릭(910), 계산 복합체(920), 입력/출력(I/O) 브리지(950), 캐시/메모리 제어기(945), 그래픽 유닛(970), 및 디스플레이 유닛(965)을 포함한다. 일부 실시예들에서, 디바이스(900)는 예시된 컴포넌트들, 예컨대 비디오 프로세서 인코더들 및 디코더들, 이미지 프로세싱 또는 인식 요소들, 컴퓨터 비전 요소들 등에 더하여 그리고/또는 그 대신에, 다른 컴포넌트들(도시되지 않음)을 포함할 수 있다.
패브릭(910)은 다양한 상호접속부들, 버스들, MUX들, 제어기들 등을 포함할 수 있고, 디바이스(900)의 다양한 요소들 사이의 통신을 용이하게 하도록 구성될 수 있다. 일부 실시예들에서, 패브릭(910)의 부분들은 다양한 상이한 통신 프로토콜들을 구현하도록 구성될 수 있다. 다른 실시예들에서, 패브릭(910)은 단일 통신 프로토콜을 구현할 수 있고, 패브릭(910)에 결합된 요소들은 단일 통신 프로토콜로부터 다른 통신 프로토콜들로 내부적으로 변환할 수 있다.
예시된 실시예에서, 계산 복합체(920)는 버스 인터페이스 유닛(bus interface unit, BIU)(925), 캐시(930), 및 코어들(935, 940)을 포함한다. 다양한 실시예들에서, 계산 복합체(920)는 다양한 수들의 프로세서들, 프로세서 코어들 및/또는 캐시들을 포함할 수 있다. 예를 들어, 계산 복합체(920)는 1, 2, 또는 4개의 프로세서 코어들, 또는 임의의 다른 적합한 수를 포함할 수 있다. 일 실시예에서, 캐시(930)는 세트 연관 L2 캐시이다. 일부 실시예들에서, 코어들(935 및/또는 940)은 내부 명령어 및/또는 데이터 캐시들을 포함할 수 있다. 일부 실시예들에서, 패브릭(910), 캐시(930), 또는 디바이스(900) 내의 다른 곳에 있는 코히어런시 유닛(도시되지 않음)은 디바이스(900)의 다양한 캐시들 사이의 코히어런시를 유지하도록 구성될 수 있다. BIU(925)는 계산 복합체(920)와 디바이스(900)의 다른 요소들 사이의 통신을 관리하도록 구성될 수 있다. 코어들(935, 940)과 같은 프로세서 코어들은 운영 체제 명령어들 및 사용자 응용 명령어들을 포함할 수 있는 특정 명령어 세트 아키텍처(ISA)의 명령어들을 실행시키도록 구성될 수 있다.
캐시/메모리 제어기(945)는 패브릭(910)과 하나 이상의 캐시들 및/또는 메모리들 사이의 데이터의 전송을 관리하도록 구성될 수 있다. 예를 들어, 캐시/메모리 제어기(945)는 L3 캐시에 결합될 수 있고, 이는 이어서, 시스템 메모리에 결합될 수 있다. 다른 실시예들에서, 캐시/메모리 제어기(945)는 메모리에 직접 결합될 수 있다. 일부 실시예들에서, 캐시/메모리 제어기(945)는 하나 이상의 내부 캐시들을 포함할 수 있다.
본 명세서에 사용되는 바와 같이, 용어 "에 결합된"은 요소들 사이의 하나 이상의 접속들을 나타낼 수 있고, 결합은 개재 요소들을 포함할 수 있다. 예를 들어, 도 9에서, 그래픽 유닛(970)은 패브릭(910) 및 캐시/메모리 제어기(945)를 통해 메모리"에 결합된" 것으로 기술될 수 있다. 대조적으로, 도 9의 예시된 실시예에서, 그래픽 유닛(970)은 개재 요소들이 없기 때문에 패브릭(910)에 "직접 결합"된다.
그래픽 유닛(970)은 하나 이상의 프로세서들 및/또는 하나 이상의 그래픽 프로세싱 유닛(GPU)들을 포함할 수 있다. 그래픽 유닛(970)은, 예를 들어 OPENGL®, Metal, 또는 DIRECT3D® 명령어들과 같은 그래픽-지향 명령어들을 수신할 수 있다. 그래픽 유닛(970)은 특수 GPU 명령어들을 실행하거나, 또는 수신된 그래픽-지향 명령어들에 기초하여 다른 동작들을 수행할 수 있다. 그래픽 유닛(970)은 대체적으로, 데이터의 큰 블록들을 병렬로 프로세싱하도록 구성될 수 있고, 디스플레이로의 출력을 위해 프레임 버퍼 내에 이미지들을 구축할 수 있다. 그래픽 유닛(970)은 하나 이상의 그래픽 프로세싱 파이프라인들에서 변환, 조명, 삼각형, 및/또는 렌더링 엔진들을 포함할 수 있다. 그래픽 유닛(970)은 디스플레이 이미지들에 대한 픽셀 정보를 출력할 수 있다. 다양한 실시예들에서, 프로그래밍가능 셰이더(975)는 픽셀 태스크들, 정점 태스크들, 및 계산 태스크들(이는, 그래픽 관련일 수 있거나 그렇지 않을 수 있음)을 포함할 수 있는 그래픽 프로그램들을 실행하도록 구성된 고도의 병렬 실행 코어들을 포함할 수 있다.
일부 실시예들에서, 프로그래밍가능 셰이더(975)는 개시된 압축 회로부를 포함한다.
디스플레이 유닛(965)은 프레임 버퍼로부터 데이터를 판독하도록 그리고 디스플레이를 위한 픽셀 값들의 스트림을 제공하도록 구성될 수 있다. 디스플레이 유닛(965)은, 일부 실시예들에서 디스플레이 파이프라인으로서 구성될 수 있다. 또한, 디스플레이 유닛(965)은 출력 프레임을 생성하기 위해 다수의 프레임들을 혼합하도록 구성될 수 있다. 또한, 디스플레이 유닛(965)은 사용자 디스플레이(예컨대, 터치스크린 또는 외부 디스플레이)에 결합하기 위한 하나 이상의 인터페이스들(예컨대, MIPI® 또는 임베디드 디스플레이 포트(eDP))을 포함할 수 있다.
I/O 브리지(950)는, 예를 들어, 범용 직렬 버스(universal serial bus, USB) 통신, 보안, 오디오, 및/또는 저전력 상시-온 기능을 구현하도록 구성된 다양한 요소들을 포함할 수 있다. I/O 브리지(950)는 또한, 예를 들어, 펄스폭 변조(pulse-width modulation, PWM), 범용 입/출력(GPIO), 직렬 주변 인터페이스(SPI), 및/또는 인터-집적 회로(I2C)와 같은 인터페이스들을 포함할 수 있다. 다양한 유형들의 주변기기들 및 디바이스들이 I/O 브리지(950)를 통해 디바이스(900)에 결합될 수 있다.
예시적인 컴퓨터 판독가능 매체
본 개시내용은 위에서 상세하게 다양한 예시적인 회로들을 기술하였다. 본 개시내용은 그러한 회로를 포함하는 실시예들뿐만 아니라, 그러한 회로를 특정하는 설계 정보를 포함하는 컴퓨터 판독가능 저장 매체도 포괄하고자 하는 것이다. 따라서, 본 개시내용은 개시된 회로를 포함하는 장치뿐만 아니라 개시된 회로를 포함하는 하드웨어(예를 들어, 집적 회로)를 생성하도록 구성된 제조 시스템에 의해 인식되는 포맷으로 회로를 특정하는 저장 매체를 포괄하는 청구범위를 지원하도록 의도된다. 그러한 저장 매체에 대한 청구범위는, 예를 들어 회로 설계를 생성하지만 그 자체가 설계를 제조하지는 않는 엔티티를 포괄하도록 의도된다.
도 8은 일부 실시예들에 따른, 회로 설계 정보를 저장하는 예시적인 비일시적 컴퓨터 판독가능 저장 매체를 예시하는 블록도이다. 예시된 실시예에서, 반도체 제조 시스템(820)은 비일시적 컴퓨터 판독가능 매체(810) 상에 저장된 설계 정보(815)를 프로세싱하도록 그리고 설계 정보(815)에 기초하여 집적 회로(830)를 제조하도록 구성된다.
비일시적 컴퓨터 판독가능 저장 매체(810)는 다양한 적절한 유형들의 메모리 디바이스들 또는 저장 디바이스들 중 임의의 것을 포함할 수 있다. 비일시적 컴퓨터 판독가능 저장 매체(810)는, 설치 매체, 예컨대 CD-ROM, 플로피 디스크들, 또는 테이프 디바이스; DRAM, DDR RAM, SRAM, EDO RAM, 램버스(Rambus) RAM 등과 같은 컴퓨터 시스템 메모리 또는 랜덤 액세스 메모리; 플래시, 자기 매체, 예를 들어, 하드 드라이브, 또는 광학 저장소와 같은 비휘발성 메모리; 레지스터들, 또는 다른 유사한 유형들의 메모리 요소들 등일 수 있다. 비일시적 컴퓨터 판독가능 저장 매체(810)는 또한 다른 유형들의 비일시적 메모리 또는 이들의 조합들을 포함할 수 있다. 비일시적 컴퓨터 판독가능 저장 매체(810)는 상이한 위치들, 예컨대 네트워크를 통해 접속되는 상이한 컴퓨터 시스템들에 상주할 수 있는 둘 이상의 메모리 매체들을 포함할 수 있다.
설계 정보(815)는, 제한 없이, VHDL, Verilog, SystemC, Syste㎷erilog, RHDL, M, MyHDL 등과 같은 하드웨어 설명 언어들을 포함하는 다양한 적절한 컴퓨터 언어들 중 임의의 것을 사용하여 특정될 수 있다. 설계 정보(815)는 집적 회로(830)의 적어도 일부분을 제조하기 위해 반도체 제조 시스템(820)에 의해 사용가능할 수 있다. 설계 정보(815)의 포맷은 적어도 하나의 반도체 제조 시스템(820)에 의해 인식될 수 있다. 일부 실시예들에서, 설계 정보(815)는 또한, 집적 회로(830)의 합성 및/또는 레이아웃을 특정하는 하나 이상의 셀 라이브러리들을 포함할 수 있다. 일부 실시예들에서, 설계 정보는 셀 라이브러리 요소들 및 그들의 접속성을 특정하는 넷리스트(netlist)의 형태로 전체적으로 또는 부분적으로 특정된다. 단독으로 취해진 설계 정보(815)는 대응하는 집적 회로의 제조를 위한 충분한 정보를 포함할 수 있거나 또는 포함하지 않을 수 있다. 예를 들어, 설계 정보(815)는 제조될 회로 요소들을 특정하지만, 그들의 물리적 레이아웃을 특정하지 않을 수 있다. 이러한 경우에, 설계 정보(815)는 특정된 회로부를 실제로 제조하기 위해 레이아웃 정보와 조합될 필요가 있을 수 있다.
다양한 실시예들에서, 집적 회로(830)는 메모리들, 아날로그 또는 혼합 신호 회로들 등과 같은 하나 이상의 맞춤형 매크로셀들을 포함할 수 있다. 그러한 경우들에서, 설계 정보(815)는 포함된 매크로셀들에 관련된 정보를 포함할 수 있다. 그러한 정보는, 제한 없이, 개략적 캡처 데이터베이스, 마스크 설계 데이터, 거동 모델들, 및 디바이스 또는 트랜지스터 레벨 넷리스트들을 포함할 수 있다. 본 명세서에 사용되는 바와 같이, 마스크 설계 데이터는 그래픽 데이터 시스템(GDSII), 또는 임의의 다른 적합한 포맷에 따라 포맷팅될 수 있다.
반도체 제조 시스템(820)은 집적 회로들을 제조하도록 구성된 다양한 적절한 요소들 중 임의의 것을 포함할 수 있다. 이것은, 예를 들어, 반도체 재료들을 (예컨대, 마스킹을 포함할 수 있는 웨이퍼 상에) 침착시키는 것, 재료들을 제거하는 것, 침착된 재료들의 형상을 변경시키는 것, 재료들을 (예컨대, 재료들을 도핑하거나 또는 자외선 처리를 사용하여 유전 상수들을 수정함으로써) 수정하는 것 등을 위한 요소들을 포함할 수 있다. 반도체 제조 시스템(820)은 또한, 정확한 동작을 위해 제조된 회로들의 다양한 테스트를 수행하도록 구성될 수 있다.
다양한 실시예들에서, 집적 회로(830)는 설계 정보(815)에 의해 특정된 회로 설계에 따라 동작하도록 구성되고, 이는 본 명세서에 기술된 기능 중 임의의 것을 수행하는 것을 포함할 수 있다. 예를 들어, 집적 회로(830)는 도 1a 및 도 1b에 도시된 다양한 요소들 중 임의의 것을 포함할 수 있다. 또한, 집적 회로(830)는 다른 컴포넌트들과 함께 본 명세서에 기술된 다양한 기능들을 수행하도록 구성될 수 있다. 추가로, 본 명세서에 설명된 기능은 다수의 접속된 집적 회로들에 의해 수행될 수 있다.
본 명세서에 사용되는 바와 같이, "~하도록 구성된 회로의 설계를 특정하는 설계 정보"라는 형태의 문구는 요소가 충족되기 위해 해당 회로가 제조되어야 한다는 것을 의미하지 않는다. 오히려, 이러한 문구는 설계 정보가, 제조 시에, 표시된 액션들을 수행하도록 구성될 것이거나 특정된 컴포넌트들을 포함할 회로를 설명한다는 것을 나타낸다.
***
특정 실시예들이 위에서 설명되었지만, 이들 실시예들은 단일 실시예만이 특정 특징부에 대해 설명된 경우에도 본 개시내용의 범주를 제한하도록 의도되지 않는다. 본 개시내용에 제공된 특징부들의 예들은 달리 언급되지 않는 한 제한적인 것이 아니라 예시적인 것으로 의도된다. 위의 설명은 본 개시내용의 이익을 취하는 당업자에게 자명한 바와 같이 그러한 대안물들, 수정물들, 및 등가물들을 포괄하도록 의도된다.
본 개시내용의 범주는, 본 명세서에 다뤄진 문제점들 중 임의의 것 또는 전부를 완화시키든 아니든, (명시적으로 또는 묵시적으로) 본 명세서에 개시된 임의의 특징부 또는 특징부들의 조합, 또는 그의 임의의 일반화를 포함한다. 따라서, 특징부들의 임의의 그러한 조합에 대해 본 출원(또는 그에 대한 우선권을 주장하는 출원)의 심사 동안에 새로운 청구범위가 작성될 수 있다. 구체적으로, 첨부된 청구범위를 참조하면, 종속항들로부터의 특징부들은 독립항들의 특징부들과 조합될 수 있으며, 개개의 독립항들로부터의 특징부들은 첨부된 청구범위에 열거된 특정 조합들로 조합될 수 있을 뿐 아니라 임의의 적절한 방식으로 조합될 수 있다.

Claims (20)

  1. 장치로서,
    압축 회로부를 포함하며, 상기 압축 회로부는:
    압축되는 픽셀들의 블록에 대한 픽셀 데이터에 액세스하도록;
    상기 픽셀들의 블록의 픽셀들에 포함된 다수의 구성요소들에 대해, 상기 픽셀들의 블록의 각자의 상이한 영역들에서 각자의 최소 및 최대 구성요소 값들을 결정하도록;
    상기 결정된 최소 및 최대 구성요소 값들에 기초하여, 제1 영역 내의 제1 구성요소에 대한 기본 값에 대한 델타 값들을 표현하기 위해 제1 개수의 비트들을 사용하고, 상기 제1 영역 내의 제2 구성요소에 대한 기본 값에 대한 델타 값들을 표현하기 위해 제2의 상이한 개수의 비트들을 사용할 것을 결정하도록;
    상기 결정된 제1 및 제2 개수의 비트들을 사용하여 상기 픽셀들의 블록의 상기 제1 영역 내의 픽셀들의 상기 제1 및 제2 구성요소들에 대한 델타 값들을 양자화하도록; 그리고
    상기 양자화된 델타들을 사용하여 상기 픽셀들의 블록의 압축된 버전을 저장하도록 구성되는, 장치.
  2. 제1항에 있어서, 상기 제1 및 제2 개수의 비트들을 사용할 것을 결정하기 위해, 상기 압축 회로부는,
    상기 제1 구성요소에 대한 상기 제1 영역 내의 델타 값들을 표현하기 위해 제1 초기 개수의 비트들을 결정하도록;
    상기 제2 구성요소에 대한 상기 제1 영역 내의 델타 값들을 표현하기 위해 제2 초기 개수의 비트들을 결정하도록; 그리고
    델타 비트들을 상기 제2 구성요소와 공유하기 위해 상기 제1 초기 개수의 비트들을 감소시킬 것을 결정하는 것에 응답하여 상기 제1 및 제2 개수의 비트들을 선택하도록 구성되는, 장치.
  3. 제2항에 있어서, 상기 압축 회로부는,
    상기 제1 구성요소에 대한 상기 제1 영역 내의 최소 구성요소 값과 최대 구성요소 값 사이의 차이에 기초하여 상기 제1 구성요소에 대한 압축 모드를 결정하도록; 그리고
    상기 결정된 압축 모드에 기초하여 델타 비트들을 상기 제2 구성요소와 공유하기 위해 상기 제1 초기 개수의 비트들을 감소시킬 것을 결정하도록 구성되고, 상기 압축 모드는 기본 비트들의 초기 개수, 델타 비트들의 초기 개수, 상기 구성요소의 기본 또는 델타 비트들로부터 감산하지 않으면서 다른 구성요소에 부여할 수 있는 레벨들의 수를 나타내는 자유 레벨 값, 및 하나 이상의 레벨들을 다른 구성요소에 부여할 때 상기 구성요소의 기본 비트들이 감소될 수 있는지의 여부를 나타내는 보호되는 기본 값을 나타내는, 장치.
  4. 제1항에 있어서, 상기 압축 회로부는 제3의 상이한 결정된 개수의 비트들을 사용하여 상기 픽셀들의 블록의 제2 영역 내의 픽셀들의 상기 제1 구성요소에 대한 델타 값들을 양자화하도록 추가로 구성되는, 장치.
  5. 제1항에 있어서, 상기 압축 회로부는 상기 픽셀들의 블록의 제2 영역에 대한 픽셀 구성요소 값들의 직접 양자화를 선택하고 적용하도록 추가로 구성되는, 장치.
  6. 제5항에 있어서, 상기 압축 회로부는,
    상기 제2 영역에 대한 델타 값들에 사용되는 양자화의 레벨이 상기 입력 픽셀 데이터의 직접 양자화를 초과하는 양자화 에러들을 생성하거나; 또는
    상기 제2 영역 내의 구성요소의 부동 소수점 값이 특수 부동 소수점 값들의 세트에 포함된다고 결정하는 것에 응답하여, 상기 제2 영역에 대한 픽셀 구성요소 값들의 직접 양자화를 적용하도록 구성되는, 장치.
  7. 제5항에 있어서, 상기 압축 회로부는,
    상기 픽셀들의 블록이 손실 압축을 사용하여 압축되었다는 것 - 상기 장치는 상기 픽셀들의 압축된 블록이 손실 압축의 사용에 기초하여 타깃 압축 출력 크기와 매칭하는 크기를 가짐을 암시하도록 구성됨 -; 및
    픽셀 구성요소 값들의 직접 양자화가 상기 영역들 중의 각자의 영역들에 대해 사용되었는지의 여부를 나타내는, 상기 픽셀들의 압축된 블록에 대한 메타데이터를 생성하도록 구성되는, 장치.
  8. 제1항에 있어서, 상기 압축 회로부는, 상기 각자의 최소 및 최대 값들을 결정하기 전에, 부호있는 포맷으로 표현되는 하나 이상의 구성요소 값들에 바이어스를 적용하도록 추가로 구성되는, 장치.
  9. 방법으로서,
    압축 회로부에 의해, 압축되는 픽셀들의 블록에 대한 픽셀 데이터에 액세스하는 단계;
    상기 압축 회로부에 의해, 상기 픽셀들의 블록의 픽셀들에 포함된 다수의 구성요소들에 대해, 상기 픽셀들의 블록의 상이한 각자의 영역들에서 각자의 최소 및 최대 구성요소 값들을 결정하는 단계;
    상기 압축 회로부에 의해, 상기 결정된 최소 및 최대 구성요소 값들에 기초하여, 제1 영역 내의 제1 구성요소에 대한 기본 값에 대한 델타 값들을 표현하기 위해 제1 개수의 비트들을 사용하고, 상기 제1 영역 내의 제2 구성요소에 대한 기본 값에 대한 델타 값들을 표현하기 위해 제2의 상이한 개수의 비트들을 사용할 것을 결정하는 단계;
    상기 압축 회로부에 의해, 상기 결정된 제1 및 제2 개수의 비트들을 사용하여 상기 픽셀들의 블록의 상기 제1 영역 내의 픽셀들의 상기 제1 및 제2 구성요소들에 대한 델타 값들을 양자화하는 단계; 및
    상기 압축 회로부에 의해, 상기 양자화된 델타들을 사용하여 상기 픽셀들의 블록의 압축된 버전을 저장하는 단계를 포함하는, 방법.
  10. 제9항에 있어서, 상기 제1 및 제2 개수의 비트들을 결정하는 단계는,
    상기 압축 회로부에 의해, 대응하는 최소 구성요소 값과 최대 구성요소 값 사이의 차이에 기초하여 상기 제1 구성요소에 대한 상기 제1 영역 내의 델타 값들을 표현하기 위해 제1 초기 개수의 비트들을 결정하는 단계;
    상기 압축 회로부에 의해, 대응하는 최소 구성요소 값과 최대 구성요소 값 사이의 차이에 기초하여 상기 제2 구성요소에 대한 상기 제1 영역 내의 델타 값들을 표현하기 위해 제2 초기 개수의 비트들을 결정하는 단계; 및
    상기 압축 회로부에 의해, 델타 비트들을 상기 제2 구성요소와 공유하기 위해 상기 제1 초기 개수의 비트들을 감소시킬 것을 결정하는 것에 응답하여 상기 제1 및 제2 개수의 비트들을 선택하는 단계를 포함하는, 방법.
  11. 제10항에 있어서,
    상기 제1 구성요소에 대한 상기 제1 영역 내의 최소 구성요소 값과 최대 구성요소 값 사이의 차이에 기초하여 상기 제1 구성요소에 대한 압축 모드를 결정하는 단계; 및
    상기 결정된 압축 모드에 기초하여 델타 비트들을 상기 제2 구성요소와 공유하기 위해 상기 제1 초기 개수의 비트들을 감소시킬 것을 결정하는 단계를 추가로 포함하고, 상기 압축 모드는 기본 비트들의 초기 개수, 델타 비트들의 초기 개수, 압축 레벨, 및 상기 구성요소의 기본 또는 델타 비트들로부터 감산하지 않으면서 다른 구성요소에 부여할 수 있는 레벨들의 수를 나타내는 자유 레벨 값을 나타내는, 방법.
  12. 제9항에 있어서, 상기 픽셀들의 블록의 제2 영역에 대한 픽셀 구성요소 값들의 직접 양자화를 적용하는 단계를 추가로 포함하는, 방법.
  13. 제9항에 있어서,
    상기 픽셀들의 블록이 손실 압축을 사용하여 압축되었음을 나타내는 상기 픽셀들의 압축된 블록에 대한 메타데이터를 생성하는 단계를 추가로 포함하고, 압축해제 회로부는 상기 픽셀들의 압축된 블록이 상기 손실 압축의 사용에 기초하여 타깃 압축 출력 크기와 매칭하는 크기를 가짐을 암시하는, 방법.
  14. 설계에 따른 회로를 생성하기 위해 설계 정보를 사용하도록 구성되는 반도체 제조 시스템에 의해 인식되는 포맷으로 하드웨어 집적 회로의 적어도 일부분의 설계를 특정하는 상기 설계 정보를 저장하는 비일시적 컴퓨터 판독가능 저장 매체로서, 상기 설계 정보는, 상기 회로가,
    압축 회로부를 포함하는 것을 특정하며, 상기 압축 회로부는:
    압축되는 픽셀들의 블록에 대한 픽셀 데이터에 액세스하도록;
    상기 픽셀들의 블록의 픽셀들에 포함된 다수의 구성요소들에 대해, 상기 픽셀들의 블록의 상이한 각자의 영역들에서 각자의 최소 및 최대 구성요소 값들을 결정하도록;
    상기 결정된 최소 및 최대 구성요소 값들에 기초하여, 제1 영역 내의 제1 구성요소에 대한 기본 값에 대한 델타 값들을 표현하기 위해 제1 개수의 비트들을 사용하고, 상기 제1 영역 내의 제2 구성요소에 대한 기본 값에 대한 델타 값들을 표현하기 위해 제2의 상이한 개수의 비트들을 사용할 것을 결정하도록;
    상기 결정된 제1 및 제2 개수의 비트들을 사용하여 상기 픽셀들의 블록의 상기 제1 영역 내의 픽셀들의 상기 제1 및 제2 구성요소들에 대한 델타 값들을 양자화하도록; 그리고
    상기 양자화된 델타들을 사용하여 상기 픽셀들의 블록의 압축된 버전을 저장하도록 구성되는, 비일시적 컴퓨터 판독가능 저장 매체.
  15. 제14항에 있어서, 상기 제1 및 제2 개수의 비트들을 사용할 것을 결정하기 위해, 상기 압축 회로부는,
    상기 제1 구성요소에 대한 상기 제1 영역 내의 델타 값들을 표현하기 위해 제1 초기 개수의 비트들을 결정하도록;
    상기 제2 구성요소에 대한 상기 제1 영역 내의 델타 값들을 표현하기 위해 제2 초기 개수의 비트들을 결정하도록; 그리고
    델타 비트들을 상기 제2 구성요소와 공유하기 위해 상기 제1 초기 개수의 비트들을 감소시킬 것을 결정하는 것에 응답하여 상기 제1 및 제2 개수의 비트들을 선택하도록 구성되는, 비일시적 컴퓨터 판독가능 저장 매체.
  16. 제15항에 있어서, 상기 압축 회로부는,
    상기 제1 구성요소에 대한 상기 제1 영역 내의 최소 구성요소 값과 최대 구성요소 값 사이의 차이에 기초하여 상기 제1 구성요소에 대한 압축 모드를 결정하도록; 그리고
    상기 결정된 압축 모드에 기초하여 델타 비트들을 상기 제2 구성요소와 공유하기 위해 상기 제1 초기 개수의 비트들을 감소시킬 것을 결정하도록 구성되고, 상기 압축 모드는 기본 비트들의 초기 개수, 델타 비트들의 초기 개수, 압축 레벨, 및 상기 구성요소의 기본 또는 델타 비트들로부터 감산하지 않으면서 다른 구성요소에 부여할 수 있는 레벨들의 수를 나타내는 자유 레벨 값을 나타내는, 비일시적 컴퓨터 판독가능 저장 매체.
  17. 제14항에 있어서, 상기 압축 회로부는 제3의 상이한 결정된 개수의 비트들을 사용하여 상기 픽셀들의 블록의 제2 영역 내의 픽셀들의 상기 제1 구성요소에 대한 델타 값들을 양자화하도록 추가로 구성되는, 비일시적 컴퓨터 판독가능 저장 매체.
  18. 제14항에 있어서, 상기 압축 회로부는 상기 픽셀들의 블록의 제2 영역에 대한 픽셀 구성요소 값들의 직접 양자화를 선택하고 적용하도록 추가로 구성되는, 비일시적 컴퓨터 판독가능 저장 매체.
  19. 제18항에 있어서, 상기 압축 회로부는,
    상기 픽셀들의 블록이 손실 압축을 사용하여 압축되었다는 것 - 상기 회로는 상기 픽셀들의 압축된 블록이 손실 압축의 사용에 기초하여 타깃 압축 출력 크기와 매칭하는 크기를 가짐을 암시하도록 구성됨 -; 및
    픽셀 구성요소 값들의 직접 양자화가 상기 영역들 중의 각자의 영역들에 대해 사용되었는지의 여부를 나타내는, 상기 픽셀들의 압축된 블록에 대한 메타데이터를 생성하도록 구성되는, 비일시적 컴퓨터 판독가능 저장 매체.
  20. 제14항에 있어서, 상기 압축 회로부는, 상기 각자의 최소 및 최대 값들을 결정하기 전에, 부호있는 포맷으로 표현되는 하나 이상의 구성요소 값들에 바이어스를 적용하도록 추가로 구성되는, 비일시적 컴퓨터 판독가능 저장 매체.
KR1020227036666A 2020-04-22 2021-04-16 손실 압축 기법들 KR20220157467A (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US16/855,459 US11405622B2 (en) 2020-04-22 2020-04-22 Lossless compression techniques
US16/855,540 US11664816B2 (en) 2020-04-22 2020-04-22 Lossy compression techniques
US16/855,540 2020-04-22
US16/855,459 2020-04-22
PCT/US2021/027623 WO2021216361A1 (en) 2020-04-22 2021-04-16 Lossy compression techniques

Publications (1)

Publication Number Publication Date
KR20220157467A true KR20220157467A (ko) 2022-11-29

Family

ID=75914572

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020227036666A KR20220157467A (ko) 2020-04-22 2021-04-16 손실 압축 기법들

Country Status (5)

Country Link
KR (1) KR20220157467A (ko)
CN (1) CN115516769A (ko)
DE (1) DE112021002484T5 (ko)
GB (1) GB2608965A (ko)
WO (1) WO2021216361A1 (ko)

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03129987A (ja) * 1989-10-14 1991-06-03 Sony Corp 映像信号符号化装置及び映像信号符号化方法
ES2191177T3 (es) * 1996-05-17 2003-09-01 Matsushita Electric Ind Co Ltd Decodificador de imagenes.
JP3687080B2 (ja) * 1996-07-17 2005-08-24 ソニー株式会社 画像符号化装置および画像符号化方法、画像復号化装置および画像復号化方法、並びに記録媒体

Also Published As

Publication number Publication date
CN115516769A (zh) 2022-12-23
GB202215649D0 (en) 2022-12-07
GB2608965A (en) 2023-01-18
DE112021002484T5 (de) 2023-04-06
WO2021216361A1 (en) 2021-10-28

Similar Documents

Publication Publication Date Title
US11847550B2 (en) Sparse convolutional neural network accelerator
US20230253979A1 (en) Lossy Compression Techniques
US11843788B2 (en) Lossless compression techniques
US8432410B1 (en) 3D graphics API extension for a shared exponent image format
US8023752B1 (en) Decompression of 16 bit data using predictor values
US20180089091A1 (en) Cache and compression interoperability in a graphics processor pipeline
US8355028B2 (en) Scheme for varying packing and linking in graphics systems
US20140359219A1 (en) Cache Memory Controller for Accelerated Data Transfer
US11663743B2 (en) Image data decompression
US11823419B2 (en) Image data decompression using difference values between data values and origin values for image data channels
US20230051125A1 (en) Coding Blocks of Pixels
US20230131251A1 (en) System and method for memory compression for deep learning networks
KR20220157467A (ko) 손실 압축 기법들
US10387119B2 (en) Processing circuitry for encoded fields of related threads
CN116795324A (zh) 混合精度浮点乘法装置和混合精度浮点数处理方法
US20210304446A1 (en) Image Data Compression
US20230075667A1 (en) Verifying compressed stream fused with copy or transform operations
US11863765B2 (en) Coding blocks of pixels
US20230325150A1 (en) Multiple-input floating-point number processing method and apparatus
GB2619574A (en) Image data decompression
GB2619573A (en) Image data compression
MacDonald Hardware JPEG Decompression

Legal Events

Date Code Title Description
E902 Notification of reason for refusal